Oracle 12C 修改字符集為AL32UTF8研究

studywell發表於2019-09-08

有這樣一個問題:PDB字符集能否從ZHS16GBK修改為AL32UTF8?

答案:由於CDB為ZHS16GBK,導致PDB不能修改。


針對這個問題作了一下學習,記錄一下。


1、遷移轉換字符集方法:

12C :只有DMU這個工具

10g/11g :csscan/ csalter /部分 exp/imp

8i/9i :Alter Database Character Set () / 部分 exp/imp 


2、AL32UTF8 是一個變寬度的字符集,表示為 1 個字元的程式碼可以是 1,2,3 或 4 個位元組長。

這 與 WE8ISO8859P1 或 WE8MSWIN1252 字符集中 1 字元始終是 1 個位元組有很大的區別。


3、使用 AL32UTF8資料庫會增長,最大的擴充套件將會發生在 CLOB 型別上(或者 XMLtype – 該型別後臺使用 CLOB),

如果源資料 庫是 8 bit 字符集(WE8ISO8859P1,WE8MSWIN1252 等),那麼轉換後的 Clob 列會在磁碟 大小上變成原來的兩倍。 


4、CDB不能轉換字符集,只能重新建立CDB。DMU 是PDB轉換字符集的唯一工具;


5、截至2019.9.8,DMU最新版本為19.1,使用過程圖形介面有卡死現象。DMU用於轉換資料的過程是:

將資料庫置於受限模式。

禁用各種作業佇列程式。

刪除或禁用所選索引。

禁用選定的觸發器和約束。

將使用者表和選定資料字典表中的資料轉換為Unicode。

轉換CLOB資料字典中的列。

發表ALTER DATABASE CHARACTER SET宣告。

啟用觸發器和約束; 並重新建立索引和約束。

恢復資料庫例項引數。


6、使用9i 傳統方法alter database character set INTERNAL_USE AL32UTF8;  修改CDB測試成功,但oracle官方不推薦。該方法並未執行兩個步驟:將使用者表和選定資料字典表中的資料轉換為Unicode  和 轉換CLOB資料字典中的列。這兩關鍵步驟只能透過DMU實行。

測試:使用該方法切換CDB字符集從ZHS16GBK到AL32UTF8成功,同時PDB$SEED也自動變化;但按官方說法切換不完整,不贊成這樣做。


7、NLS_NCHAR_CHARACTERSET("國家字符集")定義了 NCHAR,NVARCHAR2 和 NCLOB 列 的編碼並且在 9i 及以上版本已經是 Unicode了(參見 Note 276914.1 The National Character Set in Oracle 9i 10g and 11g)。 


8、NLS_CHARACTERSET("字符集")定義了"普通的" CHAR,VARCHAR2,LONG 和 CLOB列編 碼,這些也可以被用於存放 Unicode。在這樣的情況下需要 AL32UTF8 或者 UTF8 NLS_CHARACTERSET 資料庫。


參考文件:

AL32UTF8/UTF8(Unicode)資料庫字符集含義 (文件 ID 1946289.1)

如何選擇或更改資料庫字符集 (NLS_CHARACTERSET) (文件 ID 1525394.1)

The Database Migration Assistant for Unicode (DMU) Tool (文件 ID 1272374.1)

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

相關文章