Oracle 字元集修改(ORA-29275 )

來源:互聯網
上載者:User

標籤:ora-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

如果沒有報:

[email protected]>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
那說明可以修改。如果有以上錯誤,建議不要修改強制修改字元集




Oracle 字元集修改(ORA-29275 )

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.