oracle golden 字符集,goldengate oracle2oracle we8iso8859p1到zhs16gbk字符集转换

goldengate oracle2oracle we8iso8859p1到zhs16gbk字符集转换

(2011-08-13 20:11:55)

标签:

goldengate

oracle

we8iso8859p1

it

我一向手懒

如果不是微博让有人想让我说一下,我估计又不知道什么时候能写这个东西了

和以往一样,我原创的东西,大部分都是凭回忆在写,没有中间记录

其实分两部分处理:数据初始化和goldengate传输变化数据

数据初始化部分,我用的exp、imp

需要明确的是,we8iso8859p1虽然是西欧字符集,理论上只有256个字符,但是,是可以存储多字节的编码的

至于底层oracle如何实现,我确实不清楚。

在exp时,建议设置环境变量(其实不设置也可以,使用we8iso8859p1字符集,在dmp文件里也能正确存储中文字符编码的)NLS_LANG=american_america.zhs16gbk

imp时,需要临时把数据库编码改成we8iso8859p1,网上文章很多,很详细,我简单说一下

1.startup mount

2.alter system enable restricted session;

3.alter database open;

4.alter database character set internal_use zhs16gbk;

5.export NLS_LANG=american_america.zhs16gbk

6.imp

7.检查数据库内中文编码是否正常。需要注意的事,不能简单通过select语句查看显示是否为中文。因为这个受操作系统字符集、化境变量、各类客户端及x桌面工具影响。可以用如下语句判断中文是否导入成功:

select rawtohex(columns_name) from tab1;

看到显示16进制字符集如果和实际中文的gbk编码一样就可以了。

8.确认完后,把数据库字符集改回zhs16gbk

到此数据初始化完成。

那么在goldengate里如何设置呢?

在goldengate里只要设置extract进程的环境变量 NLS_LANG就行了

因为如果在extract时,goldengate正确处理了中文的编码,那么在replicat时,rep进程只要使用zhs16gbk编码就能正确理解extract进程产生的trail文件了。

在extract和replica进程添加参数:setenv

( NLS_LANG=american_america.zhs16gbk)即可

其实不添加这个参数,一般goldengate会使用ascii编码,这个也能正常工作

需要特别注意的是,extract进程参数不能为setenv

(NLS_LANG=american_america.we8iso8859p1),这会导致乱码。

至于原理,大家还是找oracle的文档详细学习吧,我也只是一知半解而已,网上很多文章写得比我好多了。

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值