Oracle 12C 新特性-扩展数据类型,在12c中,与早期版本相比,诸如VARCHAR2, NAVARCHAR2以及 RAW这些数据类型的大小会从4K以及2K字节扩展至32K字节。只要可能,扩展字符的大小会降低对LOB数据类型的使用。为了启用扩展字符大小,你必须将MAX_STRING_SIZE的初始数据库参数设置为EXTENDED。
实验流程:1.查看参数max_string_size默认值SQL> show parameter max_string_sizeNAME TYPE VALUE------------------------------------ ----------- ------------------------------max_string_size stringSTANDARD说明:12C 参数max_string_size默认值是standard,即不改变varchar2、nvarchar2、和raw数据类型的大小限制,和11g保持一致。2. 关闭数据库SQL> shutdown immediate;3. 以升级模式重启数据库SQL> startup upgrade;3. 更改参数: ALTERSYSTEM 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
说明:如果环境是cdb+pdb,那么所有的cdb + pdb$seed + pdb 都需要在 startup upgrade; 状态下跑脚本 @$ORACLE_HOME/rdbms/admin/utl32k.sql 。不然,只扩展完cdb后,pdb不能打开,报ORA-14694: database must in UPGRADE mode to begin MAX_STRING_SIZE migration 。
5. 检查一下有没有产生失效对象
SQL> select count(*) from dba_objects where status<>'VALID'; COUNT(*)----------06. 关闭数据库SQL> shutdown immediate;7. 以读写模式重启数据库SQL> startup;8.检查参数max_string_size , 与失效对象。SQL> show parameter max_string_sizeNAME TYPE VALUE------------------------------------ ----------- ------------------------------max_string_size stringEXTENDEDSQL> select count(*) from dba_objects where status<>'VALID'; COUNT(*)----------09. 测试SQL> create table t_32k (name varchar2(32000)); Table created.SQL> insert into t_32k values('andy'); 1 row created.SQL> select * from t_32k;NAME--------------------------------------------------------------------------------andy对比LOB数据类型,在ASSM表空间管理中,扩展数据类型的字段以SecureFiles LOB加以存储,而在非ASSM表空间管理中,它们则是以BasciFiles LOB进行存储的。注意:一旦更改,你就不能再将设置改回STANDARD。