2012-02-27 70 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) 
);