2011年11月2日
在做表分割的时候碰到如下错误:
SQL> alter table TBCS.CS_LOG_GPRS_ADJUST split partition P_R_955_MAX at (955,TO_DATE('2012-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) into (partition P_R_955_201202,PARTITION P_R_955_MAX);
alter table TBCS.CS_LOG_GPRS_ADJUST split partition P_R_955_MAX at (955,TO_DATE('2012-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) into (partition P_R_955_201202,PARTITION P_R_955_MAX)
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-00001: unique constraint (SYS.I_TABPART_BOPART$) violated
数据库版本是:
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
查看MOS,导致错误的原因是未公布的Bug 3748430 解决办法是打补丁Patch 3748430或者是升级到10.2.0.4版本,该版本已经修复了该Bug。
打好补丁以后,再次执行以上SQL语句,不会出现错误信息,问题解决了。
打补丁步骤:
1.再MOS上下载补丁包。
2.解压补丁包
[oracle@testmanaual patch]$ uzip p3748430_10201_LINUX.zip
[oracle@testmanaual patch]$ ls -l
总用量 76
drwxr-xr-x 4 oracle oinstall 4096 2006-01-19 3748430
-rw-r--r-- 1 root root 68866 10月 29 17:12 p3748430_10201_LINUX.zip
3.进入到补丁目录中
[oracle@testmanaual patch]$ cd 3748430/
4.执行以下命令,应用补丁
[oracle@testmanaual 3748430]$ opatch apply
Invoking OPatch 10.2.0.1.0
Oracle 中间补丁程序安装程序版本 10.2.0.1.0
版权所有 (c) 2005, Oracle Corporation。保留所有权利。。
Oracle 主目录 : /u01/oracle/product/10.2.0/db_1
主产品清单: /u01/oracle/oraInventory
从 : /u01/oracle/product/10.2.0/db_1/oraInst.loc
OPatch 版本 : 10.2.0.1.0
OUI 版本 : 10.2.0.1.0
OUI 位置 : /u01/oracle/product/10.2.0/db_1/oui
日志文件位置 : /u01/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch-2011_Oct_29_17-53-39-CST_Sat.log
ApplySession 将中间补丁程序 '3748430' 应用到 OH '/u01/oracle/product/10.2.0/db_1'
调用 fuser 来检查活动的进程。
Invoking fuser on "/u01/oracle/product/10.2.0/db_1/bin/oracle"
OPatch 从产品清单中检测到非集群 Oracle 主目录, 将仅对本地系统打补丁。
请关闭本地系统上在此 ORACLE_HOME 之外运行的 Oracle 实例。
(Oracle 主目录 = '/u01/oracle/product/10.2.0/db_1')
本地系统是否已准备打补丁?
是否继续? [y|n]
y
User Responded with: Y
为 Oracle 主目录备份文件和产品清单 (不是用于自动回退)
正在备份受补丁程序 '3748430' 影响的文件以用于恢复。此操作将需要一些时间...
正在备份受补丁程序 '3748430' 影响的文件以用于回退。此操作将需要一些时间...
正在为组件 oracle.rdbms, 10.2.0.1.0 打补丁...
用 "lib/libserver10.a/kkpo.o" 更新归档文件 "/u01/oracle/product/10.2.0/db_1/lib/libserver10.a"
正在对目标 ioracle 运行 make 命令
ApplySession 将中间补丁程序 '3748430' 添加到产品清单
本地系统已打补丁, 可以重新启动。
OPatch succeeded.
5.补丁已成功的打上了,查看打上的补丁:
[oracle@testmanaual 3748430]$ opatch lsinventory
Invoking OPatch 10.2.0.1.0
Oracle 中间补丁程序安装程序版本 10.2.0.1.0
版权所有 (c) 2005, Oracle Corporation。保留所有权利。。
Oracle 主目录 : /u01/oracle/product/10.2.0/db_1
主产品清单: /u01/oracle/oraInventory
从 : /u01/oracle/product/10.2.0/db_1/oraInst.loc
OPatch 版本 : 10.2.0.1.0
OUI 版本 : 10.2.0.1.0
OUI 位置 : /u01/oracle/product/10.2.0/db_1/oui
日志文件位置 : /u01/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch-2011_Oct_29_17-54-25-CST_Sat.log
Lsinventory Output file location : /u01/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/lsinv/lsinventory-2011_Oct_29_17-54-25-CST_Sat.txt
--------------------------------------------------------------------------------
已安装的顶级产品 (1):
Oracle Database 10g 10.2.0.1.0
此 Oracle 主目录中已安装 1 个产品。
中间补丁程序 (1):
Patch 3748430 : applied on Sat Oct 29 17:54:17 CST 2011
Created on 18 Jan 2006, 11:40:01 hrs PST8PDT
Bugs fixed:
3748430
--------------------------------------------------------------------------------
OPatch succeeded.
6.如果打补丁过程中出现错误,需要回退操作的话,执行以下命令:
[oracle@testmanaual patch]$ cd 3748430
[oracle@testmanaual 3748430]$ opatch rollback -id 3748430
注意事项:在给系统打补丁之前最后先对数据库做一个完全备份。[@more@]