Linux 下更改 oracle 客户端字符集和服务端字符集
1.oracle server 端字符集查询
代码如下:
select userenv('language') from dual;
server 字符集修改:
将数据库启动到 RESTRICTED 模式下做字符集更改:
代码如下:
SQL>conn /as sysdba
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;
ALTER DATABASE CHARACTER SET ZHS16GBK ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
提示我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改:
代码如下:
SQL>ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
SQL>select * from v$nls_parameters;
重启检查是否更改完成:
代码如下:
SQL>shutdown immediate;
SQL>startup
SQL>select * from v$nls_parameters;
我们看到这个过程和之前 ALTER DATABASE CHARACTER SET 操作的内部过程是完全相同的,也就是说 INTERNAL_USE 提供的帮助就是使 Oracle 数据库绕过了子集与超集的校验
这一方法在某些方面是有用处的,比如测试;应用于产品环境时大家应该小心,可能会有一些意外的问题。
2.oracle client 端字符集修改
代码如下:
$echo$NLS_LANG
client 字符集修改:
在 /home/oracle
与 /root
用户目录下的 .bash_profile
中添加或修改 export NLS_LANG="AMERICAN_AMERICA.UTF8"
语句
关闭当前 ssh 窗口。
注意:NLS_LANG 变量一定要配置正确否则会引起 sqlplus 失效。
3.修改数据库字符集为 UTF-8
1. 以 DBA 登录
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;
注意:如果没有大对象,在使用过程中进行语言转换没有什么影响!
可能会出现 ORA-12717:CANNOT ALTER DATABASE NATIONAL CHARACTER SET WHEN NCLOBDATAEXISTS
, 解决这个问题的方法
利用 INTERNAL_USE 关键字修改区域设置
代码如下:
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论