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的文档详细学习吧,我也只是一知半解而已,网上很多文章写得比我好多了。
分享:
喜欢
0
赠金笔
加载中,请稍候......
评论加载中,请稍候...
发评论
登录名: 密码: 找回密码 注册记住登录状态
昵 称:
评论并转载此博文
发评论
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。