修改oracle的字符编码集

修改oracle的字符编码集 AL32UTF8->ZHS16GBK

起因

在把dump导入oracle数据库的过程中,突然出现大量的字符串长度不够的错误

ORA-12899:value too large for column **** (actural:9,maximum:6)
方法1

查看字符编码集:
select * from V$NLS_PARAMETERS;
查看字符编码集:
select userenv(‘language’) from dual;
修改字符编码集:(有问题的解决方式)

UPDATE PROPS$ SET VALUE$=‘ZHS16GBK’ WHERE NAME=‘NLS_CHARACTERSET’;
关闭:
shutdown immediate;
重启:
startup;

  • 经过测试确实可以修改字符编码集,但是会导致Navicat Premium连不上oracle
ORA-25847

出现这个问题是由于修改了字符编码之后原来Navicat Premium中自带的oci.dll不支持ZHS16GBK,因此需要下载支持ZHS16GBK的oci.dll并将该文件的路径配置到Navicat Premium的【工具】-【选项】-【环境】-OCI环境中
下载链接:https://download.csdn.net/download/ichuany/11434281

  • 重新加载了oci.dll文件并重启Navicat Premium,再链接数据库遇到了下面的问题
ORA-06552:PL/SQL:Compilation unit analysis terminated
ORA-06553:PLS-553:character set name is not recognized

上面的问题也与字符集的设置有关,在正式修改字符集时,oracle中至少需要修改12张数据字典表,而方法1这重直接更新PROPS$表的方式只是完成了其中的一小部分工作,存在很大的隐患。因此,正确修改oracle字符编码集的方式如下:

正确的修改字符编码集的方式

1.用sysdba用户登录

su oracle
sqlplus / as sysdba

2.依次执行如下命令

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> alter database character set internal_use ZHS16GBK;
SQL> shutdown immediate;
SQL> startup
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值