[资产|安全|PM|工单] configDb重建索引出错解决方法

来源:互联网 发布:php access 编辑:程序博客网 时间:2024/05/22 05:00

[资产|安全|PM|工单] configDb重建索引出错解决方法

一、错误提示

D:\\Maximo\\tools\\maximo>configdb.bat
Tue Apr 22 09:19:05 CST 2008 --- Starting ----
Reading properties file : maximo.properties
RestoreFromBackup started for schema MAXIMO Tue Apr 22 09:19:06 CST 2008
RestoreFromBackup connected to database jdbc[s:10]racle:thin[s:9]127.0.0.1:1521:testmaximo Tue Apr 22 09:19:06 CST 2008
ConfigDB started for schema MAXIMO Tue Apr 22 09:19:06 CST 2008
ConfigDB connected to database jdbc[s:10]racle:thin[s:9]127.0.0.1:1521:testmaximo Tue Apr 22 09:19:06 CST 2008
获取元数据 Tue Apr 22 09:19:07 CST 2008
正在配置表 Tue Apr 22 09:19:07 CST 2008
正在更改表 TEFIN Tue Apr 22 09:19:07 CST 2008
正在配置视图 Tue Apr 22 09:19:08 CST 2008
正在刷新属性元数据 Tue Apr 22 09:19:08 CST 2008
正在刷新对象元数据 Tue Apr 22 09:19:18 CST 2008
正在重建本地索引 Tue Apr 22 09:19:20 CST 2008
java.sql.SQLException: ORA-01452: 无法 CREATE UNIQUE INDEX; 找到重复的关键字

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:207)
at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:946)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1168)
at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1687)
at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1653)
at psdi.configure.CommonShell.doSql(CommonShell.java:339)
at psdi.configure.ConfigDB.rebuildIndexes(ConfigDB.java:2011)
at psdi.configure.ConfigDB.configureIndexes(ConfigDB.java:1937)
at psdi.configure.ConfigDB.process(ConfigDB.java:263)
at psdi.configure.ConfigDB.main(ConfigDB.java:2564)
ORA-01452: 无法 CREATE UNIQUE INDEX; 找到重复的关键字
Tue Apr 22 09:19:22 CST 2008
ConfigDB completed with errorsTue Apr 22 09:19:22 CST 2008
RestoreFromBackup completedTue Apr 22 09:19:22 CST 2008

如果configdb不成功,有可能还会出现weblogic的异常。一般情况下我们会执行RestoreFromBackup来解决,不过当configdb与RestoreFromBackup都不能成功执行时就得想想办法了

二、解决办法
按以下办法依次执行,到解决成功为至。
第一种办法:
执行RestoreFromBackup.bat
第二种办法
1、找出建立不成功的索引:
select * from MAXSYSINDEXES where name not in ( select a.index_name from dba_indexes a) and changed='N'
说明如下:
CHANGED有三种取值:
Y:表示索引是刚添加的,还没有进行configdb。
N:表示索引已添加好了,已进行过configdb作业
D:表示索引已删除,还没有进行configdb
2、删除建立不成功的索引
delete from maxsyskeys where ixname in ( select name from maxsysindexes where name not in ( select a.index_name from dba_indexes a) and changed='N');
delete frommaxsysindexes where name not in ( select a.index_name from dba_indexes a) and changed='N';
3、找到即将要通过configdb建立索引,但是数据库已经存在的索引。
select * from maxsysindexes where name in( select a.index_name from dba_indexes a) and changed in ('Y')
4、删除即将要通过configdb建立索引,但是数据库已经存在的索引
delete from maxsyskeys where ixname in 
( select name from maxsysindexes where namein ( select a.index_name from dba_indexes a) and changed='Y');
delete frommaxsysindexes where namein ( select a.index_name from dba_indexes a) and changed='Y';

5、删除不一致的索引
delete frommaxsyskeys where ixname not in (select name from maxsysindexes)
6、清除垃圾索引
A、查找出垃圾索引
select index_name from dba_ind_columns c where c.index_name not in (select index_name from dba_indexes)
B、清除之,
命令为:purge index \"垃圾索引名\"
这个时候的索引名是一大堆无意义的符号,按查出的结果集一条一条清理。
第三种办法
如果前面二种办法还不能解决,那只能出狠招了:
A、delete from maxsyskeys where ixname in 
( select name from maxsysindexes where changed='Y');
delete frommaxsysindexes wherechanged='Y';
B、进行configdb
C、启动weblogic,进入系统进行数据配置重设索引。
原创粉丝点击