2012-02-27 68 views
0

我在我的筆記本電腦上安裝了oracle 10gr2快速版。 當我導入由Oracle 10gr2企業版生成的.dmp文件時,發生錯誤。如何更改Oracle 10gr2快速版的默認字符集

其產生的.dmp文件數據庫服務器與GBK字符集運行,但我的Oracle快捷服務器與UTF-8運行。

SQL> select userenv('language') from dual; 

USERENV('LANGUAGE') 
-------------------------------------------------------------------------------- 
SIMPLIFIED CHINESE_CHINA.AL32UTF8 

如何配置我自己的oracle服務器來導入.dmp文件?

編輯-------------------------------------------- ------- 我自己的Oracle Express服務器:

SQL> select * from v$nls_parameters where parameter like '%CHARACTERSET'; 

PARAMETER 
-------------------------------------------------------------------------------- 
VALUE 
-------------------------------------------------------------------------------- 
NLS_CHARACTERSET 
AL32UTF8 

NLS_NCHAR_CHARACTERSET 
AL16UTF16 
+0

你會得到什麼錯誤?爲什麼你認爲這個錯誤與字符集有關?兩個數據庫的數據庫和國家字符集是什麼? – 2012-02-27 10:06:42

+0

錯誤ORA-12899:對於列 – CaiNiaoCoder 2012-02-27 10:11:44

+0

的值太大確定。兩個數據庫的數據庫和國家字符集是什麼? 'select * from v $ nls_parameters'參數如'%CHARACTERSET'? – 2012-02-27 10:16:00

回答

2

轉儲文件包含一個整體的架構,改變列長度對我來說不是一個好的選擇。

了Oracle Express版本使用UTF-8作爲默認情況下,Google搜索網絡後,我找到了一種方法來改變數據庫的字符集。

在我的情況: UTF-8 - > GBK

我與用戶sys作爲在sqlplus SYSDBA連接。然後執行以下命令:

shutdown immediate 

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

shutdown immediate 

startup 

我不知道這些命令做我的數據庫,但它的工作原理。

+0

來幫助別人,希望有些oracle專家可以在這裏解釋一下這些命令。 – CaiNiaoCoder 2012-02-28 01:35:49

5

,而舊的,才需要最多2個字節的新的字符集需要高達每字4個字節。所以由於字符集的改變,一些字符字段需要比以前更多的空間。很明顯,其中一些現在已經達到了列長限制。

要解決它,你就必須增加受影響的列的長度或改變長度語義使長度字符解釋(而不是字節,這是默認值)。

如果轉儲文件包含的架構定義和數據,你必須在階段的工作:第一隻導入架構,增加列的長度,最後導入數據。

我沒有經驗的長度語義。我通常會明確地指定它。有關信息,請參閱有關NLS_LENGTH_SEMANTICS參數的文檔。它會影響如何在下面的語句數100解釋:

CREATE TABLE example (
    id NUMBER, 
    name VARCHAR(100) 
); 

通常,最好是明確和直接指定單位:

CREATE TABLE example (
    id NUMBER, 
    name VARCHAR(100 CHAR) 
);