如何将Oracle原有字符集AL32UTF8修改为ZHS16GBK

安装Oracle时选择的是AL32UTF8,后来调试项目的时候客户要求使用ZHS16GBK,除了重装有没有办法替换新的字符集.

注:SQL> alter database CHARACTER SET ZHS16GBK;
alter database CHARACTER SET ZHS16GBK
*
ERROR 位于第 1 行:
ORA-12712: 新字符集必须为旧字符集的超集

第1个回答  推荐于2017-11-26
1、修改server端字符集(不建议使用)

  在oracle 8之前,可以用直接修改数据字典表props$来改变数据库的字符集。但oracle8之后,至少有三张系统表记录了数据库字符集的信息,只改props$表并不完全,可能引起严重的后果。正确的修改方法如下:

  $sqlplus /nolog

  SQL>conn / as sysdba;

以上方法测试不行,用scott/tiger登陆sqlplus然后connect sys/sys as sysdba,然后输入命令即可

  若此时数据库服务器已启动,则先执行SHUTDOWN IMMEDIATE命令关闭数据库服务器,然后执行以下命令:

  SQL>STARTUP MOUNT;

  SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;

  SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

  SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;

  SQL>ALTER DATABASE OPEN;

  SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK; //跳过超子集检测

  SQL>ALTER DATABASE national CHARACTER SET INTERNAL ZHS16GBK;

这一行不起作用,执行后出错ORA-00933: SQL 命令未正确结束,不过执行上一行命令已经生效,其他文章里未提到本行。

  SQL>SHUTDOWN IMMEDIATE;

  SQL>STARTUP

  本回答被网友采纳
第2个回答  2013-08-13
先切换到sqlplus上,然后执行
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER SYSTEM ENABLE RESTRICED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE CHARACTER SET ZHS16GBK;
SHUTDOWN IMMEDIATE;
STARTUP;
相似回答