2011-09-08 38 views
5

我想從「WE8MSWIN1252」更改字符集Oracle數據庫的「AL32UTF8」SQL錯誤:ORA-12712:新字符集必須是舊的字符的超集

我試圖執行從以下步驟鏈接(http://download.oracle.com/docs/cd/B10501_01/server.920/a96529/ch10.htm#1009580):

Shut down the database, using either a SHUTDOWN IMMEDIATE or a SHUTDOWN NORMAL statement. Do a full backup of the database because the ALTER DATABASE CHARACTER SET statement cannot be rolled back. Complete the following statements:

STARTUP MOUNT; 
ALTER SYSTEM ENABLE RESTRICTED SESSION; 
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; 
ALTER SYSTEM SET AQ_TM_PROCESSES=0; 
ALTER DATABASE OPEN; 
ALTER DATABASE CHARACTER SET AL32UTF8; 

但是,當我執行上面的語句,我我得到以下錯誤

SQL錯誤:ORA-12712:新字符集必須是舊字符集的超集

任何人都可以請幫我解決這個問題。

回答

9

對於ALTER DATABASE CHARACTER SET語句成功執行,兩個條件必須滿足:

  • 當前字符集中的每一個字符是在新的字符集可用。
  • 當前字符集中的每個字符在新字符集中都具有相同的代碼點值。 (即:舊的字符集必須是新的一個子集)

因爲WE8MSWIN1252不是AL32UTF8嚴格的子集,該語句將失敗(例如:井號是A3WE8MSWIN1252十六進制,但在AL32UTF8它是C2 A3)。

您需要使用CSALTER才能進行此遷移。

參考:Character Set Migration.

+0

感謝您的快速幫助。我正在使用Oracle XE,因此卸載了它並安裝了Oracle XE Universal ...並將我的字符集更改爲UTF8。 – Dawood

1

最簡單的方法:(關機neccesary)

首先,以SYSDBA身份連接:

sqplus/as sysdba 

接下來,執行下面的腳本:

alter system set nls_length_semantics=CHAR scope=both; 
shutdown; 
startup restrict; 
alter database character set INTERNAL_USE WE8ISO8859P1; 
shutdown; 
startup; 

它爲我在甲骨文12C標準兩版

來自http://www.blogdelpibe.com/2015/05/como-solucionar-el-error-ora-12899.html

0

替換6號線由

ALTER DATABASE CHARACTER SET INTERNAL_USE AL32UTF8;

這是解決我的問題。

相關問題