今天在导入公司一个业务系统dmp文件的时候报错imp00017,将数据库字符集强制修改了改成 ZHS16GBK,但是其他业务系统显示都成乱码了。没办法改成AL32UTF8。但是遇到ora12712错误。参考了一些文档暂时解决了问题。 SQL> select * from nls_database_parameters where parameter in ('NLS_LANGUAGE','NLS_TERRITORY','NLS_CHARACTERSET'); PARAMETER ------------------------------ VALUE -------------------------------------------------------------------------------- NLS_LANGUAGE AMERICAN NLS_TERRITORY AMERICA NLS_CHARACTERSET ZHS16GBK SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount; ORACLE instance started. Total System Global Area 1.6602E+10 bytes Fixed Size 2269752 bytes Variable Size 8959036872 bytes Database Buffers 7616856064 bytes Redo Buffers 23928832 bytes Database mounted. SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION; System altered. SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; System altered. SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0; System altered. SQL> alter database open; Database altered. SQL> ALTER DATABASE CHARACTER SET AL32UTF8; ALTER DATABASE CHARACTER SET AL32UTF8 * ERROR at line 1: ORA-12712: new character set must be a superset of old character set SQL> ALTER DATABASE CHARACTER SET utf8 2 ; ALTER DATABASE CHARACTER SET utf8 * ERROR at line 1: ORA-12712: new character set must be a superset of old character set SQL> ALTER DATABASE character set INTERNAL_USE AL32UTF8; Database altered. SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> startup; ORACLE instance started. Total System Global Area 1.6602E+10 bytes Fixed Size 2269752 bytes Variable Size 8959036872 bytes Database Buffers 7616856064 bytes Redo Buffers 23928832 bytes Database mounted. Database opened. 根据报错,提示新字符集必须是老字符集的超集。于是使用了强制转换,问题解决。 INTERNAL_USE是没有写在文档中的参数,用于强制完成字符集转化 alter database character set internal_use &charset; alter database national character set internal_use &ncharset;