如何解决Oracle 9i到11g迁移KOREAN_LEXER的问题?
我目前正在将Oracle 9i数据库(* .dmp文件)迁移到Oracle 11g数据库.
为此,我使用exp和imp Oracle实用程序命令行: exp USERID=<user>/<password>@<database> FILE=<path> OWNER=<owner> 然后我创建一个skeleton.sql文件,它将创建表,索引表和最后的索引. imp <user>/<password>@<database> FILE=<path> INDEXFILE="<path>skeleton.sql" FROMUSER=<fromuser> TOUSER=<touser> 在此迁移过程中,我能够正确导入大部分数据,当然,从一个数据库到另一个数据库,表空间保持不变,以避免任何冲突. 但问题来了.在Oracle 11g中,不再支持KOREAN_LEXER,而是必须使用KOREAN_MORPH_LEXER.为此,我执行以下SQL命令: call ctx_ddl.create_preference('korean_lexer','korean_morph_lexer'); call ctx_ddl.add_sub_lexer('global_lexer','korean','korean_lexer',null); 然后我导入skeleton.sql文件,以便在导入之前注入所需的数据: sqlplus <user>/<password>@<database> @<path>skeleton.sql 表和索引表的创建顺利进行,直到我为每个创建的150个索引收到以下错误: CREATE INDEX "<schema>"."WORKORDER_NDX16" ON "WORKORDER" ERROR at line 1 : ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine ORA-20000: Oracle Text error: DRG-10502: WORKORDER_NDX16 index does not exist DRG-13201: KOREAN_LEXER is no longer supported ORA-06512: at "CTXSYS.DRUE",line 160 ORA-06512: at "CTXSYS.TEXTINDEXMETHODS",line 366 索引仍然创建,此消息??只是一个警告. ALTER index WORKORDER_NDX16 REBUILD; 哪次再次给我以下错误: SQL Error : ORA-29874: warning in the execution of ODCIINDEXCREATE routine ORA-29960: ligne 1,DRG-10595: failure on ALTER INDEX WORKORDER_NDX16 DRG-50857: oracle error in drixmd.PurgeKGL ORA-20000: Oracle Text error: DRG-13201: KOREAN_LEXER is no longer supported ORA-30576: ConText Option dictionary loading error DRG-50610: internal error: kglpurge [] 29874. 00000 - "warning in the execution of ODCIINDEXALTER routine" *Cause: A waring was returned from the ODCIIndexAlter routine. *Action: Check to see if the routine has been coded correctly Check the user defined warning log tables for greater details. 在我的skeleton.sql文件中,在每个索引的创建下,每种语言都有以下几行: ctxsys.driimp.set_object('LEXER','MULTI_LEXER',12); ... ctxsys.driimp.set_sub_value('SUB_LEXER','8',NULL,'KO:KOREAN_LEXER:'); ... 到目前为止,我不知道该怎么做,这似乎是一个简单的问题要解决,但我的dba技能太低,不能自己做. 如果有人能帮助我,我会非常感激! 谢谢. 解决方法这看起来像您的数据库使用的是Oracle Text索引,它与普通索引不同.您是否完全遵循Oracle Note 300172.1(KOREAN_LEXER Lexer Type的过时)?它提到了下面的代码,这可能有所帮助.ALTER INDEX <[schema.]index> REBUILD PARAMETERS('REPLACE LEXER ko_morph_lexer [MEMORY <size>]'); 如果所有其他方法都失败了,可以考虑尝试将数据迁移到Oracle 10g数据库并在10g中完成korean_morph_lexer.如果可行,那么将数据泵从10g移动到11g(或12c)将是一项简单的数据泵任务. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |