Oracle 12C 修改 NLS_NCHAR_CHARACTERSET 的值

说明:本例使用的数据库为新建数据库,没有数据。
注意:若数据库内有重要数据,建议在操作前做好备份工作。

修改原因:

报错: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

出现该错误是因为除了当前连接,还有其他连接

断开其他连接后,再次修改

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.

再次查看发现字符集的配置依然是对的

本次修改完成!

猜你喜欢

转载自blog.csdn.net/Ruishine/article/details/115215556