说明:本例使用的数据库为新建数据库,没有数据。
注意:若数据库内有重要数据,建议在操作前做好备份工作。
修改原因:
报错:ORA-00910: specified length too long for its datatype
经查看是NLS_NCHAR_CHARACTERSET的配置有问题,应该为AL32UTF8
select value from nls_database_parameters t where t.PARAMETER ='NLS_NCHAR_CHARACTERSET'
修改步骤:
(此处记录的是实际操作情况,之所以把失败的情况也展示出来,是为了提供给大家一个排错思路。)
尝试修改
SQL> ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8;
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8
*
ERROR at line 1:
ORA-12719: operation requires database is in RESTRICTED mode
出现该错误,是由于当前没有处于 RESTRICTED 模式
修改为 RESTRICTED 模式
SQL> alter system enable restricted session;
System altered.
再次尝试
SQL> ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8;
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8
*
ERROR at line 1:
ORA-12721: operation cannot execute when other sessions are active
出现该错误是因为除了当前连接,还有其他连接
断开其他连接后,再次修改
扫描二维码关注公众号,回复:
12920389 查看本文章

SQL> ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8;
Database altered.
修改成功!
取消RESTRICTED模式
SQL> alter system disable restricted session;
System altered.
查询是否生效
select value from nls_database_parameters t where t.PARAMETER ='NLS_NCHAR_CHARACTERSET'
select * from v$nls_parameters
为验证本次修改的时效性,现重启数据库,再次查看是字符集配置情况:
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup;
ORACLE instance started.
Total System Global Area 1.6267E+11 bytes
Fixed Size 7653480 bytes
Variable Size 2.4159E+10 bytes
Database Buffers 1.3798E+11 bytes
Redo Buffers 529215488 bytes
Database mounted.
Database opened.
再次查看发现字符集的配置依然是对的
本次修改完成!