今天做了个数据迁移,从oracle10g迁移到Oracle11g,导入过程中,发现错误
![](https://img-blog.csdnimg.cn/img_convert/edae88812c52c1fa65d94c1e1e3f48b6.png)
对比了一下,发现原数据库编码是ZHS16GBK,新数据库编码是AL32UTF8
SELECT * FROM NLS_DATABASE_PARAMETERS p where p.PARAMETER='NLS_CHARACTERSET';
那么就需要修改编码集,百度了一下,过程如下:
以sysdba的身份登录
sqlplus / as sysdba
2.关闭数据库
shutdown immediate
3.以mount(挂载方式)打开数据库
startup mount
4.设置session
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
5.启动数据库
alter database open;
6.修改字符集(改成你需要的字符集)
ALTER DATABASE CHARACTERSET ZHS16GBK;
这里可能会出错,提示ORA-12712: 新字符集必须为旧字符集的超集
![](https://img-blog.csdnimg.cn/img_convert/559f69d922e2b18477a5c143f339d56a.png)
跳过超集检查做更改:
ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
7.关闭数据库,重新启动
shutdown immediate
startup
8.再次查询,新数据库字符集已经变成ZHS16GBK,你以为这样就完了么?这个时候可能数据泵无法使用,我就碰到了。所以继续执行下边代码
execute sys.dbms_metadata_util.load_stylesheets;
9.再次使用数据泵导入,导入成功。