Oracle 12c 扩展以支持 varchar2 > 4000 字节对不是 sysdba 的用户不起作用

Sha*_*han 6 oracle oracle12c

在 oracle 12c 兼容的 12.0.0 上,更改为使用 sysdba 权限扩展。我现在可以用 varchar2(16000) 作为列创建一个表并插入一个 > 4000 字节的字符串;但仅当作为 sysdba 连接时。当作为普通用户而不是 sysdba 连接时,我无法使用大于 4000 字节的 varchar2,抛出错误 ORA-60019。谁能解释为什么?当以非 sysdba 用户身份登录时,参数 max_string_size= extended 和 compatible=12.0.0。

Nil*_*nde 1

请执行以下步骤,并让我知道问题是否已解决。我要求再次设置参数以确保一切正常。

1)备份你的spfile(获取spfile的位置)

sqlplus / as sysdba
show parameter spfile;
Run Code Online (Sandbox Code Playgroud)

2) 关闭数据库。

sqlplus / as sysdba
shutdown immediate
Run Code Online (Sandbox Code Playgroud)

3)以UPGRADE模式重新启动数据库。

startup upgrade
Run Code Online (Sandbox Code Playgroud)

4) 将 MAX_STRING_SIZE 设置更改为 EXTENDED。

alter system set MAX_STRING_SIZE ='EXTENDED' scope=spfile;
Run Code Online (Sandbox Code Playgroud)

5)

sqlplus / as sysdba
@%ORACLE_HOME%\RDBMS\ADMIN\utl32k.sql
 @%ORACLE_HOME%\RDBMS\ADMIN\utlrp.sql
Run Code Online (Sandbox Code Playgroud)

注意:utl32k.sql 脚本会增加需要的视图的 VARCHAR2、NVARCHAR2 和 RAW 列的最大大小。由于这些视图的 SQL 编写方式,该脚本不会增加某些视图中 VARCHAR2、NVARCHAR2 和 RAW 列的最大大小。

rdbms/admin/utlrp.sql 脚本有助于重新编译无效对象。您必须以 SYSDBA 身份连接才能运行该脚本。

6) 以NORMAL模式重新启动数据库。

sqlplus / as sysdba
shutdown immediate
startup;
show parameter MAX_STRING_SIZE; 
Run Code Online (Sandbox Code Playgroud)

7) 创建列数据类型为 varchar2、大小超过 4000 的新表。