当前位置: 首页 > news >正文

oracle 12c怎样修改varchar2允许的最大长度

12C单实例测试,varchar2在早期版本中最大长度限制为4000,当字段长度指定的比较长的时候会报错:ORA-00910: specified length too long for its datatype。

早期版本中虽然SQL数据类型限制为4000(如表中的列的varchar2类型),但在PL/SQL中的限制是32767(如在存储过程中的定义变量时用的varchar2类型)。

12C版本可以通过修改参数MAX_STRING_SIZE为EXTENDED将varchar2最大长度限制调整为3276712c的cdb里虽然max_string_size为STANDARD,但是varchar2最大长度限制也是32767。

一 MAX_STRING_SIZE相关说明

1,需要在UPGRADE模式下修改参数和跑脚本utl32k.sql。
Use ALTER SYSTEM only when the database is in UPGRADE mode, and run the utl32k.sql script afterward, as explained in this section.
2,参数MAX_STRING_SIZE只控制 VARCHAR2, NVARCHAR2, and RAW这三个数据类型的最大值。
MAX_STRING_SIZE controls the maximum size of VARCHAR2, NVARCHAR2, and RAW data types in SQL.
3,STANDARD模式下,VARCHAR2 and NVARCHAR2最大值为4000,RAW最大为2000。
STANDARD means that the length limits for Oracle Database releases prior to Oracle Database 12c apply (for example, 4000 bytes for VARCHAR2 and NVARCHAR2, and 2000 bytes for RAW).
4,EXTENDED模式下,上述三个数据类型的最大值为32767。
EXTENDED means that the 32767 byte limit introduced in Oracle Database 12c applies.
5,COMPATIBLE这个兼容参数的版本为12.0.0.0及以上。
The COMPATIBLE initialization parameter must be set to 12.0.0.0 or higher to set MAX_STRING_SIZE = EXTENDED.
6,参数MAX_STRING_SIZE的值只能从STANDARD 修改为 EXTENDED,而不能从EXTENDED 修改为 STANDARD。
You can change the value of MAX_STRING_SIZE from STANDARD to EXTENDED. However, you cannot change the value of MAX_STRING_SIZE from EXTENDED to STANDARD.

二 怎样调整MAX_STRING_SIZE

1,以sysdba连接数据库[oracle]$ sqlplus /  as sysdbaSQL> show parameter COMPATIBLE ;              --兼容性参数compatible要为12.0.0.0.0及以上NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
compatible                           string      12.1.0.2.0SQL> show parameter  MAX_STRING_SIZE;         --字符串大小参数max_string_size初始值为STANDARDNAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_string_size                      string      STANDARD2,关闭数据库,并以upgrade试启动数据库SQL> shutdown immediate;SQL> startup upgrade;3,修改参数SQL> alter system  set max_string_size=extended scope=both;         4,字符类型扩展脚本SQL> @?/rdbms/admin/utl32k.sqlSQL> select count(*) from dba_objects where status<>'VALID';    --查看invalid状态COUNT(*)
----------32595,以NOMAL模式重启数据库SQL> shutdown immediate;SQL> startup;6,执行脚本编译数据库SQL> @?/rdbms/admin/utlrp.sqlSQL> select count(*) from dba_objects where status<>'VALID';COUNT(*)
----------0

/*

我在12c自己虚拟机里这种操作没有任何报错,我在一个19c环境(已有一些业务表)的开发环境执行@?/rdbms/admin/utl32k.sql时,遇到一个报错:

ORA-14060: data type or length of a table partitioning column may not be changed

ORA-01722: invalid number

 且sql窗口自己就退出来了,手动启动数据库,也起不来了,报错:

ORA-00603: ORACLE server session terminated by fatal error

ORA-01092: ORACLE instance terminated. Disconnection forced

ORA-14695: MAX_STRING_SIZE migration is incomplete

 后来我把报错的这个业务表临时expdp备份下,然后drop掉了(我这是开发环境,这样操作没事,但是在生产环境drop表会影响业务,一定要谨慎操作),再执行@?/rdbms/admin/utl32k.sql没再报错了。后面再手动导下这个表数据。

*/

--本篇文章参考自https://blog.csdn.net/cowboy90/article/details/91492747,并做了些许改动。

http://www.lryc.cn/news/142105.html

相关文章:

  • python WSGI和ASGI的区别
  • 【Golang】什么是内存逃逸?
  • MVC OR DDD
  • 前端面试:【TypeScript】静态类型检查与编译时类型检查
  • Qt中设置QListWidget滑动条滚动速度
  • STM32的lorawan协议栈
  • IC芯片 trustzone学习
  • Day19-异步请求-axios文件上传
  • 从零学算法79
  • ctfshow-web-红包题第六弹
  • 蓝蓝设计UI设计公司-界面设计与开发案例
  • IDEA 配置注释模板
  • Kuka机器人设计通用码垛程序
  • pandas由入门到精通-数据清洗-扩展数据类型
  • 深入理解 Vue Router:构建可靠的前端路由系统
  • Mysql B+数索引结构
  • 在window上配置NASM
  • 用QT实现MVP模式
  • (2023)Linux安装pytorch并使用pycharm远程编译运行
  • poi带表头多sheet导出
  • RedisDesktopManager(redis客户端,可输入用户名密码)
  • 【Adobe After Effects】关于ae点击空格不会播放反而回退一帧的解决方案
  • Linux网络编程:多路I/O转接服务器(select poll epoll)
  • Mybatis系列原理剖析之项目实战:自定义持久层框架
  • 阿里云 Serverless 应用引擎 2.0,正式公测!
  • 西北大学计算机考研844高分经验分享
  • 【java并发编程的艺术读书笔记】volatile关键字介绍、与synchronized的区别
  • LinkedList的顶级理解
  • 再学http-为什么文件上传要转成Base64?
  • 使用oracleVM搭建虚拟机