Linux修改oracle 10g的字符集

时间:2022-02-24 21:09:13

修改数据库字符集为:ZHS16GBK
查看服务器端字符集
SQL > select * from V$NLS_PARAMETERS
修改:
$sqlplus /nolog
SQL>conn / as sysdba~
若此时数据库服务器已启动,则先执行 SHUTDOWN IMMEDIATE 命
令关闭数据库服务器,然后执行以下命令:
SQL>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 ZHS16GBK~
*
ERROR at line 1:
ORA-12721: operation cannot execute when other sessions are active
若出现上面的错误,使用下面的办法进行修改,使用INTERNAL_USE可以跳过超集的检查:
SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK~
SQL>SHUTDOWN IMMEDIATE~
SQL>STARTUP

Oracle gb2312 字符集 转 utf-8

最近因为一些特殊的需求,考虑到以后系统的开发,
就把现有Oracle数据库的字符集gb2312改为了UTF-8
步骤:
1.在SQL*PLUS 中,以DBA登录
conn 用户名 as sysdba
2.执行转换语句:
SHUTDOWN IMMEDIATE;
STARTUP MOUNT EXCLUSIVE;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE NATIONAL CHARACTER SET UTF8;
SHUTDOWN immediate;
startup;

注意:如果没有大对象,在使用过程中进行语言转换没有什么影响,(切记设定的字符集必须是ORACLE支持,不然不能start)

按上面的做法就可以,但是可能会出现‘ORA-12717: Cannot ALTER DATABASE NATIONAL CHARACTER SET when
NCLOB data exists’ 这样的提示信息

要解决这个问题有两种方法

一个是,利用INTERNAL_USE 关键字修改区域设置,
还有一个是利用re-create,但是re-create有点复杂,所以请用internal_use,

SHUTDOWN IMMEDIATE;
STARTUP MOUNT EXCLUSIVE;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8;
SHUTDOWN immediate;
startup;

如果按上面的做法做,National charset的区域设置就没有问题