字符集不一致导致乱码的问题经常会困扰我们,今天就遇到一个OGG复制中的疏忽导致问题。
生产端字符集
select * from nls_database_parameters;
NLS_LANGUAGE SIMPLIFIED CHINESE
NLS_TERRIIOY CHINA
NLS_CHARACTERSET AL32UTF8
目标端字符集
select * from nls_database_parameters;
NLS_LANGUAGE AMERICAN
NLS_TERRIIOY AMERICA
NLS_CHARACTERSET AL32UTF8
源端抽取进程字符集
SETENV (NLS_LANG=“AMERICAN_AMERICA.ZHS16GBK”)
目标端复制进程字符集
SETENV (NLS_LANG=“AMERICAN_AMERICA.ZHS16GBK”)
看到问题所在了吧,数据库的字符集一致都是AL32UTF8,可是OGG的抽取进程和复制进程是我们一直习惯用的ZHS16GBK。
修改方法很简单,先将抽取进程参数、复制进程参数中的字符集换成统一的
看到问题所在了吧,数据库的字符集一致都是AL32UTF8,可是OGG的抽取进程和复制进程是我们一直习惯用的ZHS16GBK。
修改方法很简单,先将抽取进程参数、复制进程参数中的字符集换成统一的
SETENV (NLS_LANG=“AMERICAN_AMERICA.AL32UTF8”)
然后重新做一次OGG初始化。如果是全库复制那就没什么可说的RAMN全备吧,如果是部分表同步的OGG那就设好字符集后采用expdp、impdp方式重新初始化这些表。
需要注意的是expdp导出表数据之前使用export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK 设置一下,impdp导入之前也执行一次,避免oracle环境变量中的参数干扰
然后重新做一次OGG初始化。如果是全库复制那就没什么可说的RAMN全备吧,如果是部分表同步的OGG那就设好字符集后采用expdp、impdp方式重新初始化这些表。
需要注意的是expdp导出表数据之前使用export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK 设置一下,impdp导入之前也执行一次,避免oracle环境变量中的参数干扰
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29047826/viewspace-1426822/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29047826/viewspace-1426822/