Oracle 字元集修改(ORA-29275 ),oracleora-29275

來源:互聯網
上載者:User

Oracle 字元集修改(ORA-29275 ),oracleora-29275

今天有朋友資料庫出現ORA-29275 部分多位元組字元,對應的欄位只能用to_char才能正常查詢,感覺是字元集問題。詢問之果然修改過字元集。

他的修改方式:

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 INTERNAL_USE ZHS16GBK;

查看資料庫:

SQL> select name,value$ from props$ where name like '%NLS%';NAME                           VALUE$------------------------------ ------------------------------NLS_LANGUAGE                   AMERICANNLS_TERRITORY                  AMERICANLS_CURRENCY                   $NLS_ISO_CURRENCY               AMERICANLS_NUMERIC_CHARACTERS         .,NLS_CHARACTERSET               ZHS16GBKNLS_CALENDAR                   GREGORIANNLS_DATE_FORMAT                DD-MON-RRNLS_DATE_LANGUAGE              AMERICANNLS_SORT                       BINARYNLS_TIME_FORMAT                HH.MI.SSXFF AMNLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AMNLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZRNLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZRNLS_DUAL_CURRENCY              $NLS_COMP                       BINARYNLS_LENGTH_SEMANTICS           BYTENLS_NCHAR_CONV_EXCP            FALSENLS_NCHAR_CHARACTERSET         AL16UTF16NLS_RDBMS_VERSION              11.2.0.1.0
確實已經修改好了。但是這裡:

ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;
是非常有問題的,這裡跳過字元集子集檢查,強制進行修改。

所以以後的資料將會出現問題。

那麼我們使用exp/imp在匯出的時候指定字元集進行轉換呢?

引入一篇文章的部分段落:
9i之前的版本:在來源資料庫的字元集和export的session的NLS_LANG設定不同時,所有資料的字元集(使用者資料和字典資料)均會轉換;
在import過程中,如果import session的NLS_LANG和export時不一致,將會將dmp中的字元集轉換成import session的NLS_LANG設定成的字元集;
當import session的NLS_LANG和目標資料庫的字元集不一致時,將會發生公import session的NLS_LANG字元集到目標資料庫的字元集轉換
9i及之後的版本:在來源資料庫的字元集和export的session的NLS_LANG設定不同時,只有字典資料會發生字元集轉換,使用者資料則和來源資料庫的字元集一致,而忽略NLS_LANG的設定;
在import過程中,如果import session的NLS_LANG和export時不一致,將會將dmp中的字元集轉換成import session的NLS_LANG設定成的字元集;
當import session的NLS_LANG和目標資料庫的字元集不一致時,將會發生公import session的NLS_LANG字元集到目標資料庫的字元集轉換


其實都沒關係,不管你用什麼辦法轉換,只要轉換的字元集不是原字元集的超集都是有問題的:

所以我們在修改資料庫字元集的時候,執行如下語句:
ALTER DATABASE CHARACTER SET ZHS16GBK

如果沒有報:

SYS@zbdba>ALTER DATABASE CHARACTER SET ZHS16GBK;ALTER DATABASE CHARACTER SET ZHS16GBK*ERROR at line 1:ORA-12712: new character set must be a superset of old character set
那說明可以修改。如果有以上錯誤,建議不要修改強制修改字元集




相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.