一个客户的数据库版本是19.3,在做数据库复制的时候,目标端报错了,查看了一下问题发现表的字段长度有不对,在12c以前我们都知道varchar的长度最大是4000,但是客户这里居然有32767:
把客户的建表语句弄出来,放到我的一个19c的测试环境进行测试:
发现报错了:
这里报错很明显了,是MAX_STRING_SIZE参数不对,客户环境是extended,我的是默认STANDARD,
下面就是修改这个参数了,此参数是静态参数,需要重启数据库修改,还挺复杂的,具体如下:
1. 将集群参数设置为false
SQL> ALTER SYSTEM SET CLUSTER_DATABASE=FALSE scope=spfile;
2. 关闭所有节点数据库
SQL> shutdown immediate;
3. 以升级模式重启数据库
SQL> startup upgrade;
3. 更改参数: ALTER SYSTEM SET MAX_STRING_SIZE=EXTENDED;
SQL> alter system set max_string_size=extended scope=spfile;
System altered.
4. 执行 utl32k.sql as sysdba:
SQL> @$ORACLE_HOME/rdbms/admin/utl32k.sql
执行脚本编译数据库 --必须执行,不然可能系统的部分对象失效,导致打开数据库 失败
@$ORACLE_HOME/rdbms/admin/utlrp.sql
5. 检查一下有没有产生失效对象
SQL> select count(*) from dba_objects where status<>'VALID';
COUNT(*)
----------
0
6. 关闭数据库
SQL> shutdown immediate;
7. 以读写模式重启数据库
SQL> startup;
确认没问题后,将集群参数修改为true,再使用集群启动