主要是字符集 成 導入的Oracle服務器的字符集 對應不上.
以下方案為是修改服務器的字符集. 這樣會影響之前的Oracle其他數據庫的數據顯示(正式服務器慎用)
個人認為應該修改導出文件的字符集比較合理一些. 沒測試過.
情景重現:
從oracle 10g環境下exp出來的數據,imp到10g數據庫的時候就出現下面這個錯誤。
IMP-00019: 由於 ORACLE 錯誤 12899 而拒絕行
IMP-00003: 遇到 ORACLE 錯誤 12899
ORA-12899: 列 "JACKEYJ"."JK_REGISTER"."OPNAME" 的值太大 (實際值: 21, 最大值: 20)
列 1 523
可能的原因:操作系統類型不同導致的。
解決方法:
修改oracle 10g的字符集
Oracle
修改數據庫字符集為:ZHS16GBK
在oracle目錄下 打開應用程序開發--> SQL Plus,然后:
查看服務器端字符集SQL > select * from V$NLS_PARAMETERS
修改:$sqlplus /nolog
SQL>conn / as sysdba (ps: 在cmd中可以直接粘貼)
若此時數據庫服務器已啟動,則先執行 SHUTDOWN IMMEDIATE 命令關閉數據庫服務器,
然后執行以下命令:
SQL>shutdown immediate;
SQL>STARTUP MOUNT;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL>ALTER DATABASE OPEN;
SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;
接下來可能出現兩種情況:
ERROR at line 1 RA-12721: operation cannot execute when other sessions are active
1、若出現上面的錯誤,使用下面的辦法進行修改,使用INTERNAL_USE可以跳過超集的檢查:
SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;
ORA-12712: new character set must be a superset of old character set
RROR at line 1:
2、結果報錯,提示新字符集必須是老字符集的超集。
於是強制轉換
>ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
最后步驟:
>shutdown immediate;
>STARTUP;
