在oracle 12c兼容12.0.0上,更改为使用sysdba权限进行扩展。 我现在可以创建一个以varchar2(16000)为列的表,并插入一个字符串> 4000字节;但只有当连接为sysdba时。 当作为普通用户而不是sysdba连接时,我无法使用varchar2> 4000字节,抛出错误ORA-60019。有谁能解释为什么? 当以非sysdba用户身份登录时,param max_string_size = extended和compatible = 12.0.0。
答案 0 :(得分:0)
执行以下步骤,如果问题得到解决,请与我们联系。我要求再次设置参数以确保 一切都井然有序。
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)以NORMAL模式重启数据库。
sqlplus / as sysdba
shutdown immediate
startup;
show parameter MAX_STRING_SIZE;
7)使用列数据类型varchar2创建新表,其大小超过4000。
答案 1 :(得分:0)
您必须更改文件“ TNSNAMES.ORA”以通过PDB连接。 我也遇到同样的问题。 我已经解决了波纹管的问题。
该行为的原因是您处于多租户环境中,即一个名为CDB(“容器数据库”)的主容器以及任意数量的PDB(“可插拔数据库”)。
CDB(“容器”)是一种“系统”数据库,其中包含实际的客户数据库(“可插拔数据库”或PDB)。 CDB并不打算接收任何客户数据。一切都进入一个或多个PDB。
在未指定任何服务的情况下进行连接时,您将自动进入CDB。 CDB将忽略扩展字符串参数:限制仍然为4000字节。以下连接到CDB。就像您的情况一样,创建带有长字符串的表的操作被拒绝了: