Oracle 12c 扩展为支持 varchar2 > 4000 字节不适用于非 sysdba 用户

Posted

技术标签:

【中文标题】Oracle 12c 扩展为支持 varchar2 > 4000 字节不适用于非 sysdba 用户【英文标题】:Oracle 12c extended to support varchar2 > 4000 bytes doesn't work for user who is not sysdba 【发布时间】:2015-06-16 20:56:29 【问题描述】:

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

【问题讨论】:

您可能想尝试在Database Administrators StackExchange 上发布此内容。 您是否按照the manual 中的所有步骤进行操作?您有 CDB 还是非 CDB? 您好,当您以 sysdba 身份登录时,您是否在与以普通用户身份登录时相同的表空间中创建表?所有表空间的范围大小都相同吗?也许您需要创建更大范围大小的用户表空间......让我知道!例如:create tablespace data datafile '/data_256K01_01.dbf' size 2000M extent management local uniform size 256K;'并尝试在其中插入相同的数据。 【参考方案1】:

执行以下步骤,如果问题已解决,请告诉我。我要求再次设置参数以确保 一切都井井有条。

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

sqlplus / as sysdba
show parameter spfile;

2) 关闭数据库。

sqlplus / as sysdba
shutdown immediate

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

startup upgrade

4) 将 MAX_STRING_SIZE 的设置更改为 EXTENDED。

alter system set MAX_STRING_SIZE ='EXTENDED' scope=spfile;

5)

sqlplus / as sysdba
@%ORACLE_HOME%\RDBMS\ADMIN\utl32k.sql
 @%ORACLE_HOME%\RDBMS\ADMIN\utlrp.sql

注意:utl32k.sql 脚本会增加 VARCHAR2、NVARCHAR2 和 RAW 列,用于其中的视图 必需的。该脚本不会增加 VARCHAR2、NVARCHAR2 和 RAW 列在某些视图中因为方式 为这些视图编写 SQL。

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

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

sqlplus / as sysdba
shutdown immediate
startup;
show parameter MAX_STRING_SIZE; 

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

【讨论】:

【参考方案2】:

您必须更改文件“TNSNAMES.ORA”才能通过 PDB 连接。 我遇到了同样的问题。 我已经用下面的链接信息解决了。

https://dba.stackexchange.com/questions/240761/in-oracle-12c-tryiyng-to-create-table-with-columns-greater-than-4000

这种行为的原因是您处于多租户环境中,即称为 CDB(“容器数据库”)的主容器和任意数量的 PDB(“可插入数据库”)。

CDB(“容器”)是一种“系统”数据库,用于包含实际的客户数据库(“可插入数据库”或 PDB)。 CDB 无意接收任何客户数据。一切都进入一个或多个 PDB。

当您在未指定任何服务的情况下进行连接时,您将被自动置于 CDB 中。 CDB 的扩展字符串参数被忽略:限制仍然是 4000 字节。以下连接到 CDB。与您的情况一样,拒绝创建带有长字符串的表:

【讨论】:

以上是关于Oracle 12c 扩展为支持 varchar2 > 4000 字节不适用于非 sysdba 用户的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 12c 中 varchar2 的扩展长度

Oracle 19c对VARCHAR2的限制

Oracle 19c对VARCHAR2的限制

使用 12c 客户端截断的存储过程 OUTPUT VARCHAR2 值

Oracle 12c 数据默认值

mysql与oracle 长度区别