oracle修改字符集

生产环境的数据表用了 中文字段名。

在生产环境oracle表正常,新建开发环境时,报字符串超长。

原因是

生产oracle字符集是:NLS_CHARACTERSET ZHS16GBK

开发oracle字符集是:NLS_CHARACTERSET AL16UTF16


开发oracle需要修改字符集和生产一致。


开发下:

select * from V$nls_Parameters;


cmd,sqlplus登录

system as dba

密码


通过 "alter database character set ZHS16GBK;" 方式修改,但并不总是有效。该命令在Oracle8时被引入Oracle,这个操作在本质上并不转换任何数据库字符,只是简单的更新数据库中所有跟字符集相关的信息。
查询字符集信息: "sql> select name,value$ from props$ where name like '%NLS%';",结果有二十行。
修改步骤:

注意:转换字符集,数据库应该在RESTRICTED模式下进行. (使用DBA登录数据库)
sql> SHUTDOWN IMMEDIATE;
sql> STARTUP MOUNT;
sql> ALTER SESSION SET sql_TRACE=TRUE;
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> set linesize 120;
sql> ALTER DATABASE CHARACTER SET ZHS16GBK;

常见问题:
问题1:
sql> ALTER DATABASE CHARACTER SET ZHS16CGB231280;
ALTER DATABASE CHARACTER SET ZHS16CGB231280
*
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
原因:
字符集超集问题,所谓超集是指:当前字符集中的每一个字符在新字符集中都可以表示,并使用同样的代码点,比如很多字符集都是US7ASCII的严格超集。如果不是超集,将获得以上错误
解决方式:
sql> alter database character set internal_use ZHS16GBK;
sql> select * from v$nls_parameters;
sql> STARTUP;
备注:
ALTER DATABASE CHARACTER SET操作的内部过程是完全相同的,也就是说INTERNAL_USE提供的帮助就是使Oracle数据库绕过了子集与超集的校验。该方法某些方面有用处,比如测试环境;应用于产品环境大家应该格外小心,除了你以外,没有人会为此带来的后果负责。
问题2:
ALTER DATABASE CHARACTER SET ZHS16GBK
ORA-12721: operation cannot execute when other sessions are active
字符集超集问题。
sql> alter database character set internal_use ZHS16GBK;
sql> select * from v$nls_parameters;
sql> SHUTDOWN IMMEDIATE;
问题3:
ORA-12716: Cannot ALTER DATABASE CHARACTER SET when CLOB data exists
数据库存在CLOB类型字段,那么就不允许对字符集进行转换
这时候,我们可以去查看alert.log日志文件,看CLOB字段存在于哪些表上: 内容如: ALTER DATABASE CHARACTER SET ZHS16GBK SYS.MetaSTYLESHEET (STYLESHEET) - CLOB populated ORA-12716 signalled during: ALTER DATABASE CHARACTER SET ZHS16GBK... 对于用户表,可以先将该表导出,然后把该表删掉,等字符转换完毕后在导入。

相关文章

数据库版本:11.2.0.4 RAC(1)问题现象从EM里面可以看到,在23号早上8:45~8:55时,数据库等待会话暴增...
(一)问题背景最近在对一个大约200万行数据的表查看执行计划时,发现存在异常,理论上应该返回100多万...
(一)删除备份--DELETE命令用于删除RMAN备份记录及相应的物理文件。当使用RMAN执行备份操作时,会在RM...
(1)DRA介绍 数据恢复顾问(Data Recovery Advise)是一个诊断和修复数据库的工具,DRA能够修复数据文...
RMAN(Recovery Manager)是Oracle恢复管理器的简称,是集数据库备份(backup)、修复(restore)和恢复...
(1)备份对象 可以使用RMAN进行的备份对象如下: --整个数据库:备份所有的数据文件和控制文件; --数...