由於源資料和目標資料的字符集不一致,引起無法匯入的問題

jude_king發表於2014-02-09

由於源資料和目標資料的字符集不一致,導致無法匯入,報錯如下:
由於源資料和目標資料的字符集不一致,引起無法匯入的問題


解決辦法:
修改兩個資料庫為統一的字符集,之後重新匯出再匯入;
具體步驟如下:
a後設資料庫:

SQL> select tab1.aa||'_'||tab2.bb||'.'||tab3.cc from


  2   (select VALUE$ aa from sys.props$ where name='NLS_LANGUAGE')tab1,


  3   (select VALUE$ bb from sys.props$ where name='NLS_ISO_CURRENCY')tab2,


  4   (select VALUE$ cc from sys.props$ where name='NLS_CHARACTERSET')tab3;






TAB1.AA||'_'||TAB2.BB||'.'||TAB3.CC


----------------------------------------------------------------------


AMERICAN_AMERICA.ZHS16GBK


b目標資料庫:


SQL> select tab1.aa||'_'||tab2.bb||'.'||tab3.cc from


  2   (select VALUE$ aa from sys.props$ where name='NLS_LANGUAGE')tab1,


  3   (select VALUE$ bb from sys.props$ where name='NLS_ISO_CURRENCY')tab2,


  4   (select VALUE$ cc from sys.props$ where name='NLS_CHARACTERSET')tab3;






TAB1.AA||'_'||TAB2.BB||'.'||TAB3.CC


----------------------------------------------------------------------


AMERICAN_AMERICA.AL32UTF8


原因:由於源和目標資料庫的字符集不一致或不是子集和超集的關係,所以造成不能匯入表空間的字符集。


解決方法:將源資料庫和目標資料庫的字符集調整為一致的字符集;或者源資料庫的字符集是目標資料庫的子集。


源資料庫的修改:


SQL> alter database character set internal_use utf8;


alter database character set internal_use utf8


*


第1行出現錯誤:


ORA-12719:操作要求資料庫處於RESTRICTED模式下






SQL> shutdown immediate;


資料庫已經關閉。


已經解除安裝資料庫。


ORACLE例程已經關閉。






SQL> startup mount;


ORACLE例程已啟動






Total System Global Area  444596224 bytes


Fixed Size                  1219904 bytes


Variable Size             138412736 bytes


Database Buffers          301989888 bytes


Redo Buffers                2973696 bytes


資料庫已裝載






SQL>  alter system enable restricted session;


系統已更改






SQL> alter database open;


資料庫已更改






SQL> alter database character set internal_use utf8;


資料庫已更改






SQL> shutdown immediate;


資料庫已經關閉。


已經解除安裝資料庫。


ORACLE例程已經關閉。


SQL> startup mount;


ORACLE例程已啟動






Total System Global Area  444596224 bytes


Fixed Size                  1219904 bytes


Variable Size             138412736 bytes


Database Buffers          301989888 bytes


Redo Buffers                2973696 bytes


資料庫已裝載






SQL>  alter system disable restricted session;


系統已更改






SQL> alter database open;  


資料庫已更改






SQL> select tab1.aa||'_'||tab2.bb||'.'||tab3.cc from


  2   (select VALUE$ aa from sys.props$ where name='NLS_LANGUAGE')tab1,


  3   (select VALUE$ bb from sys.props$ where name='NLS_ISO_CURRENCY')tab2,


  4   (select VALUE$ cc from sys.props$ where name='NLS_CHARACTERSET')tab3;






TAB1.AA||'_'||TAB2.BB||'.'||TAB3.CC


----------------------------------------------------------------------


AMERICAN_AMERICA.UTF8


目標資料庫修改:


SQL> alter database character set internal_use utf8;


alter database character set internal_use utf8


*


ERROR at line 1:


ORA-12719: operation requires database is in RESTRICTED mode






SQL> shutdown immediate;


Database closed.


Database dismounted.


ORACLE instance shut down.






SQL> startup mount;


ORACLE instance started.






Total System Global Area  444596224 bytes


Fixed Size                  1219904 bytes


Variable Size             138412736 bytes


Database Buffers          301989888 bytes


Redo Buffers                2973696 bytes


Database mounted.






SQL>  alter system enable restricted session;


System altered.






SQL> alter database open;


Database altered.






SQL> alter database character set internal_use utf8;


Database altered.






SQL> shutdown immediate;


Database closed.


Database dismounted.


ORACLE instance shut down.






SQL> startup mount;


ORACLE instance started.






Total System Global Area  444596224 bytes


Fixed Size                  1219904 bytes


Variable Size             138412736 bytes


Database Buffers          301989888 bytes


Redo Buffers                2973696 bytes


Database mounted.






SQL>  alter system disable restricted session;


System altered.






SQL> alter database open;  


Database altered.






SQL> select tab1.aa||'_'||tab2.bb||'.'||tab3.cc from


  2   (select VALUE$ aa from sys.props$ where name='NLS_LANGUAGE')tab1,


  3   (select VALUE$ bb from sys.props$ where name='NLS_ISO_CURRENCY')tab2,


  4   (select VALUE$ cc from sys.props$ where name='NLS_CHARACTERSET')tab3;






TAB1.AA||'_'||TAB2.BB||'.'||TAB3.CC


----------------------------------------------------------------------


AMERICAN_AMERICA.UTF8






修改完成,再重新匯出/匯入一遍,即可成功。




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

相關文章