使用DATAPUMP升級DB與Oracle Text索引無法成功匯入

westzq1984發表於2012-06-16
今天晚上值守升級,用datapump從10204遷移資料庫到11203

因為只是值守,這個升級我一直就是打醬油的

客戶導完資料,幫忙比對了下資料,發現差了幾個IOT表和TEXT索引

檢查日誌發現幾個如下的報錯

ORA-39083: Object type INDEX failed to create with error:
ORA-20000: Oracle Text error:
DRG-52204: error while registering index
DRG-10507: duplicate index name: IDX_TF_CMS_CONTENT_TITLE, owner: SCWY
Failing sql is:
BEGIN
ctxsys.driimp.create_index('IDX_TF_CMS_CONTENT_TITLE','TF_CMS_CONTENT',USER,
'CONTENT_ID','2','TITLE','1',
'500','4617','8130','4618',
NULL, NULL, NULL, 0,NULL, NULL, NULL, NULL, NULL );

客戶在演練的時候,看到說索引名重複就直接跳過了,也沒關注

檢視了下當前情況:
1.報重複的索引,資料庫中根本沒有
2.ctxsys.dr$index表中,有這些TEXT索引的記錄,但是OWNER_ID為0,既SYS。而源庫上,OWNER應該為應用使用者

查了下MOS

Text Indexes In Import State And Owned Incorrectly By SYS After DataPump export / import DataPump [ID 744162.1]

ORA-39083 DRG-10507 Errors On DataPump Import [ID 987033.1]

This is due to unpublished bug 5731054 fixed in 11.1, where a DRG-10507 error occurs on DataPump import, however the underlying problem is caused in the export process where duplicate index entries are created for a 'function-based domain index', which gets both 'functional index' and 'domain index' entries created, and hence can occur on import into 11g and later versions when using a 10.2 export dump file.

處理方法:
1.清除一些錯誤的後設資料,清除前最好備份這些表
connect / as sysdba
select idx_id from ctxsys.dr$index where idx_name='';
delete from ctxsys.dr$index_value where IXV_IDX_ID = ;
delete from ctxsys.dr$index_object where IXO_IDX_ID = ;
delete from ctxsys.dr$index where idx_id = ;
commit;

2.使用TOAD從源端上提取建立這些索引的指令碼建立相關TEXT索引

PS:如果使用了自定義的preferences,要從ctxsys.ctx_preferences,ctxsys.ctx_preference_values中提取資料建立這些preferences。特別是在需要對中文進行分詞時,一般都有

如果準備從10204升級到11gR2,最好打上Patch 6051635,目前只有LINUX-64bit 和 Solaris on SPARC 64bit有
10205應該是沒問題的。反正重在先測試

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8242091/viewspace-733004/,如需轉載,請註明出處,否則將追究法律責任。

相關文章