oracle改变字符编码(ORA-12899问题)

在导入数据库时,出现ORA-12899。这个问题是字符集不一致引起的。

查看一下源数据库的字符编码:

 select * from nls_database_parameters 
 where parameter ='NLS_CHARACTERSET';
结果是ZHS16GBK,而目标数据库是AL32UTF8。

中文在UTF-8中占3个字节,ZHS16GBK中占2个字节,所以会出现ORA-12899

解决办法就是修改目标数据库的字符编码。

########################################################################
首先,以sysdba身份登录sqlplus。
开始-->运行-->cmd,之后输入:"sqlplus system/system@orcl as sysdba".
如果不是本地实例,需要在实例名前加IP,例如sqlplus system/system@192.168.0.1/orcl as sysdba。

或者在开始中找到sqlplus,打开后会提示你输入账号和密码。
如果是SYSDBA账号,在密码中就需要输入system as sysdba(密码后要加as sysdba).
如果你以一个账号已经登录,想换一个账号,就在sql命令中输入 conn system/system as sysdba.

修改ORACLE数据库的编码,源数据库ZHS16GBK,目标数据库AL32UTF8,
从源数据库导出的数据在导入到目标数据库会有报错。
所以要把目标数据库也改成ZHS16GBK。

查看数据库的编码sql:
 select * from nls_database_parameters 
 where parameter ='NLS_CHARACTERSET';

下面是步骤:

进入sqlplus

SQL> shutdown immediate;
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> shutdown immediate;
SQL> startup


//下面是导入数据库的步骤

--需要创建用户的表空间
CREATE  TABLESPACE TABLESPACE_DB 
 LOGGING
 DATAFILE  'D:\TEST_DATA01.DBF '  
 SIZE 32M 
 AUTOEXTEND  ON  
 NEXT  32M MAXSIZE 2048M
 EXTENT MANAGEMENT LOCAL;

-- 创建用户 
create user UUU
  identified by UUUPass
  default tablespace TABLESPACE_DB
  temporary tablespace TEMP
  profile DEFAULT;

--修改密码
ALTER USER UUU IDENTIFIED BY UUUNewpass; 

-- 授权 
grant connect to UUU;
grant dba to UUU;
grant resource to UUU;
grant unlimited tablespace to UUU;

退出oracle客户端,进入cmd。

imp UUU/UUUNewpass@orcl full=y file=d:\direct20120109.dmp

imp UUU/UUUNewpass@orcl  file=d:\direct20120109.dmp


###############下面是实际过程##################











最后改变结果已经显示是ZHS16GBK,成功!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值