暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

nvarchar2()长度超过2000

原创 伟鹏 2023-09-06
1504

昨天碰到一个客户的问题,在更改字段长度的时候报错:ORA-00910:指定的长度对于数据类型而言过长

环境:oracle rac12c 

错误如下:


     NVARCHAR2(),最大值为2000,单位是字符,而且不管是汉字还是字母,每个字符的长度都是2个字节。 

所以nvarchar2类型的数据最多能存放2000个汉字,也最多只能存放2000个字母。 并且NVARCHAR2不受数

据库字符集的影响。

    从12c开始,varchar2(实际包括nvarchar2和raw)开始支持32767个字节,即32K的容量。

他是由max_string_size这个参数控制的,默认值是STANDARD,为了支持32K,需要将其改为EXTENDED

处理步骤;

1、在其中一个节点执行

alter system set cluster_database = false scope = spfile;

2、关闭数据库

srvctl stop database -d dbname;

3、在其中一个节点执行

startup upgrade;

ALTER SYSTEM SET MAX_STRING_SIZE=EXTENDED SID='*';

@?/rdbms/admin/utl32k.sql

但是在执行过程中报错:

ORA-38301: can not perform DDL/DML over objects in Recycle Bin

NAME

TNAME

CNAME ERROR


BIN$vG/y3fVHFZzgU2UIqMDRNw==$0

品牌 ORA-38301: can not perform DDL/DML over objects in Recycle Bin

CATARC_DW

BIN$vG/y3fVHFZzgU2UIqMDRNw==$0

企业简称 ORA-38301: can not perform DDL/DML over objects in Recycle Bin

UNAME

TNAME

CNAME ERROR


CATARC_DW

BIN$vG/y3fVIFZzgU2UIqMDRNw==$0

批次 ORA-38301: can not perform DDL/DML over objects in Recycle Bin

CATARC_DW

BIN$vG/y3fVJFZzgU2UIqMDRNw==$0

PC ORA-38301: can not perform DDL/DML over objects in Recycle Bin

重新启动数据库之后报错如下:

ORA-00603: ORACLE server session terminated by fatal error

ORA-01092: ORACLE instance terminated. Disconnection forced

ORA-14695: MAX_STRING_SIZE migration is incomplete

Process ID: 316458

Session ID: 327 Serial number: 22369

Ps:查看当前参数设置值MAX_STRING_SIZE=EXTENDED; 但是提示升级没完成

4、重新启动数据库到migration状态

startup upgrade;

5、清理回收站

purge dba_recyclebin

6、执行脚本

@?/rdbms/admin/utl32k.sql  

@?/rdbms/admin/utlrp.sql  (编译时效对象)

7、关闭数据库

shutdown immediate

8、启动数据库

srvctl start database -d dbname;

9、尝试更改字段类型成功;

   

最后修改时间:2023-09-06 16:38:26
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论