Oracle VARCHAR2超过4000字节-数据库修改

本文详细记录了在Oracle数据库中进行字符类型扩展的过程,包括设置兼容性参数、关闭并升级数据库、修改max_string_size参数、执行扩展脚本、编译无效对象以及重启数据库。在这一过程中遇到了多次重启失败的问题,错误涉及ORACLE实例终止、MAX_STRING_SIZE迁移不完整等。通过分析,确定问题可能源于max_string_size参数修改未立即生效。解决方案是确保在修改参数时使用'scope=both',确保重启后扩展脚本生效,最终成功将数据库字符长度扩展到30000,并验证了创建大长度varchar2表的正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,以sysdba连接数据库
 
[oracle]$ sqlplus /  as sysdba
 
SQL> show parameter COMPATIBLE ;              --兼容性参数compatible要为12.0.0.0.0及以上
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
compatible                           string      12.1.0.2.0
 
SQL> show parameter  MAX_STRING_SIZE;         --字符串大小参数max_string_size初始值为STANDARD
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_string_size                      string      STANDARD
 
2,关闭数据库,并以upgrade试启动数据库
 
SQL> shutdown immediate;
 
SQL> startup upgrade;
 
3,修改参数
 
SQL> alter system  set max_string_size=extended scope=both;         
 
4,字符类型扩展脚本

SQL> shutdown immediate; 
SQL> startup upgrade;
SQL> @?/rdbms/admin/utl32k.sql
5,以NOMAL模式重启数据库
 
SQL> shutdown immediate;
 
SQL> startup;
 
6,执行脚本编译数据库
 
SQL> @?/rdbms/admin/utlrp.sql
 
 
SQL> select count(*) from dba_objects where status<>'VALID';
 
  COUNT(*)
----------

上面代码测试过程中,执行完扩展脚本后多次重启失败,报错记录如下 :

第一次,执行完扩展脚本无法正常重启,此时是有3259个invalid的,打算重启后再执行编译脚本,重启报错如下

ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-14694: database must in UPGRADE mode to begin MAX_STRING_SIZE migration

第二次,重启失败后再次重启

ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-14695: MAX_STRING_SIZE migration is incomplete

第三次,以upgrade模式重启,启动后两次执行编译脚本utlrp.sql,invalid降为0;再次以NOMAL模式重启,报错如下

ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-14695: MAX_STRING_SIZE migration is incomplete

第四次,以upgrade模式重启,启动后执行扩展脚本utl32k.sql,再执行编译脚本utlrp.sql,invalid降为0;最后以NOMAL模式重启,正常。

补:报错分析,修改参数max_string_size=extended时用的scope=spfile,然后再跑的扩展脚本,怀疑就是因为此时内存里参数值仍为stardard,跑扩展脚本是不生效的。要重启DB使max_string_size=extended生效后再跑扩展脚本就可以了。避免上述报错的办法是修改参数max_string_size=extended时用scope=both。

字符长度扩展后,测试使用:

SQL> create  table   test1(name  varchar2(30000));
 
Table created.
 
SQL> insert into test1 values('kiti');
 
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

長安只在旧夢中(梁瀚文)

知识的大门打开后,才有真正机会

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值