首页 > oracle > oracle 转换数据库编码 AL32UTF8 到 ZHS16GBK

oracle 转换数据库编码 AL32UTF8 到 ZHS16GBK

2021年4月27日 发表评论 阅读评论

把通过数据泵的方式导出备份文件恢复到 Oracle 时,报错:

提示字段的值超长,源库能够存储的数据到了恢复库不能存储,起初怀疑 impdp 参数不对导致的问题,但是这些参数是一直使用的,之前有执行成功的例子,只是这次的数据库是新装的。问题的差异可能出现在数据,通过比较发现数据的编码不一致,源库是 GBK 编码,新库是 UTF8 编码,UTF8 中文占 3 个字节,GBK 中文使用 2 个字节编码,这样带有中文的字段长度可能会超过字段定义的最大长度。,解决的办法是把恢复库的编码从 AL32UTF8 改为 ZHS16GBK。

查看目标 Oracle 数据库的字符集并格式化

用上面的方式分别查看生产库和测试库的字符集,可以看到测试库是NLS_CHARACTERSET AL32UTF8生产库是NLS_CHARACTERSET ZHS16GBK
修改字符集一般来说是不推荐的,最好的方式是重新装数据库并选择正确的字符集,特别是已有数据的库,显然生产库既有数据又不能重装。
我们只能对测试数据库下手,试试能否修改字符集。

1. 关闭数据库并重新启动到 MOUNT 状态

2. 更改编码的过程中防止其他用户登陆操作(重新打开使用disable参数)

3. 禁止数据库 job 自动执行

4. 禁用队列监控(恢复参数 reset)

5. 启动数据库并修改编码

6.强制不检查字符集

7.重启数据库

8. 重新执行导入命令 impdp 成功。

最后,重启数据库后需要恢复上面禁用的参数。

快速查看数据库字符集和国家字符集,国际字符集多为 UTF8,一般是 AL16UTF16

分类: oracle 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.