2014-05-02 14 views
5

Tôi hiện đang làm việc khi di chuyển cơ sở dữ liệu Oracle 9i (* .dmp) vào một số Oracle 11g một. Để đạt được điều này tôi sử dụng exp và imp Oracle dòng tiện ích lệnh:Cách giải quyết vấn đề KOREAN_LEXER của Oracle 9i đến 11g?

exp USERID=<user>/<password>@<database> FILE=<path> OWNER=<owner> 

Sau đó, tôi tạo ra một tập tin skeleton.sql mà sẽ tạo bảng biểu, bảng chỉ số và cuối cùng chỉ mục.

imp <user>/<password>@<database> FILE=<path> INDEXFILE="<path>\skeleton.sql" FROMUSER=<fromuser> TOUSER=<touser> 

Trong quá trình di chuyển này, tôi có thể nhập hầu hết dữ liệu một cách chính xác và tất nhiên không gian bảng được giữ cùng một cơ sở dữ liệu để tránh xung đột.

Nhưng ở đây có vấn đề. Trong Oracle 11g, KOREAN_LEXER không còn được hỗ trợ, thay vào đó bạn phải sử dụng KOREAN_MORPH_LEXER. Để làm như vậy tôi thực thi các lệnh SQL sau:

call ctx_ddl.create_preference('korean_lexer','korean_morph_lexer'); 
call ctx_ddl.add_sub_lexer('global_lexer','korean','korean_lexer',null); 

Sau đó, tôi nhập khẩu các tập tin skeleton.sql để tiêm các dữ liệu cần thiết trước khi nhập khẩu:

sqlplus <user>/<password>@<database> @<path>\skeleton.sql 

Việc tạo ra các bảng và các bảng chỉ số diễn ra suôn sẻ cho đến khi tôi nhận được lỗi sau cho mỗi 150+ chỉ mục mà tôi đã tạo:

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 

Chỉ mục vẫn được tạo, thông báo này chỉ là cảnh báo. tôi cố gắng xây dựng lại một trong các chỉ số bị hỏng:

ALTER index WORKORDER_NDX16 REBUILD; 

nào cung cấp cho tôi những lỗi sau đây một lần nữa:

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. 

Trong skeleton.sql tập tin của tôi, dưới sự sáng tạo của mỗi chỉ số, tôi có các dòng sau cho mỗi ngôn ngữ:

ctxsys.driimp.set_object('LEXER','MULTI_LEXER',12); 
... 
ctxsys.driimp.set_sub_value('SUB_LEXER','8', NULL, NULL,'KO:KOREAN_LEXER:'); 
... 

Cho đến nay tôi bị mất việc phải làm, đây có vẻ là một vấn đề đơn giản để giải quyết nhưng kỹ năng dba của tôi quá thấp để làm điều này một mình.

Nếu có ai có thể giúp tôi về điều này, tôi sẽ đánh giá cao điều đó!

Cảm ơn bạn.

Trả lời

2

Có vẻ như cơ sở dữ liệu của bạn đang sử dụng các chỉ mục văn bản Oracle, không giống như chỉ mục bình thường. Bạn đã theo dõi hoàn toàn Oracle Note 300172.1 (Lỗi thời của KOREAN_LEXER Lexer Type) chưa? Nó đề cập đến mã này dưới đây, mà có thể giúp đỡ.

ALTER INDEX <[schema.]index> REBUILD 
PARAMETERS('REPLACE LEXER ko_morph_lexer [MEMORY <size>]'); 

Nếu mọi thứ khác không thành công, có thể xem xét cố gắng di chuyển dữ liệu của bạn vào cơ sở dữ liệu Oracle 10g và hoàn thành korean_morph_lexer trong 10g. Nếu nó hoạt động, nó sẽ là một nhiệm vụ Data Pump dễ dàng để di chuyển nó từ 10g đến 11g (hoặc 12c).

Các vấn đề liên quan