linux字符集与imp冲突,11g数据库不同字符集之间的【EXP/IMP工具】的使用

环境说明:

操作系统:OEL5.6   数据库:11.2

db11g数据库字符集:WE8MSWIN1252

emrep数据库字符集:ZHS16GBK

测试:

1、创建测试用户和表:

SYS@db11g>create user ocm identified by ocm;

User created.

SYS@db11g>grant dba to ocm;

Grant succeeded.

SYS@db11g>conn ocm/ocm

Connected.

OCM@db11g>create table T ( x int);

Table created.

OCM@db11g>insert into T  values (1);

1 row created.

OCM@db11g>insert into T  values (2);

1 row created.

OCM@db11g>commit;

2、查看db11g的库的字符集:

SYS@db11g>SELECT userenv('language') FROM dual;

USERENV('LANGUAGE')

----------------------------------------------------

AMERICAN_AMERICA.WE8MSWIN1252

3、exp工具导出db11g数据库中ocm用户的T表:

[oracle@ocm ~]$ exp ocm/ocm file=T.dmp  TABLES=T  GRANTS=Y

[oracle@ocm ~]$ ls

Desktop  expdat.dmp  export.log  oradiag_oracle  T.dmp

4、连接emrep库创建ocm用户:

SYS@emrep>create user ocm identified by ocm;

User created.

SYS@emrep>grant dba to ocm;

Grant succeeded.

5、查看emrep库的字符集:

SYS@emrep>SELECT userenv('language') FROM dual;

USERENV('LANGUAGE')

----------------------------------------------------

AMERICAN_AMERICA.ZHS16GBK

6、设置emrep库的服务器端,导入时的字符集:

[oracle@ocm ~]$ set nls_lang=AMERICAN_AMERICA.WE8MSWIN1252

7、imp工具将ocm的T表数据导入emrep数据库中:

[oracle@ocm ~]$ imp ocm/ocm file=T.dmp  fromuser=ocm touser=ocm

8、查看导入是否成功:

SYS@emrep>select *from ocm.t;

X

----------

1

2

总结:源库字符集跟目标数据库的字符集不同,经常导致源库导出的数据再导入目标库时要报错,原因很简单,字符集不同编码方式不同,有一种比较简单的方法是:设置当前imp导入时:环境的字符集set nls_lang=,这样oracle会进行相关的字符集编码转换。

补充:

查看数据库的字符集:

SYS@db11g>select NAME,VALUE$ from props$  where name ='NLS_CHARACTERSET';

或者:

SYS@db11g>SELECT userenv('language') FROM dual;

By  FishExpert

2012.07.25

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值