[資產|安全|PM|工單] configDb重建索引出錯解決方法

[資產|安全|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,進入系統進行數據配置重設索引。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章