ORACLE 18c XE (18.0.0.0.0) - MAX_STRING_SIZE = EXTENDED (COLLATE BINARY_CI) 问题

Posted

技术标签:

【中文标题】ORACLE 18c XE (18.0.0.0.0) - MAX_STRING_SIZE = EXTENDED (COLLATE BINARY_CI) 问题【英文标题】:ORACLE 18c XE (18.0.0.0.0) - MAX_STRING_SIZE = EXTENDED (COLLATE BINARY_CI) problem 【发布时间】:2021-03-27 13:52:30 【问题描述】:

我使用以下命令将 MAX_STRING_SIZESTANDARD 设置为 EXTENDED

ALTER SYSTEM SET MAX_STRING_SIZE=EXTENDED SCOPE=spfile;

此查询以“完成”结束。 我用这个命令检查了它:

SELECT * FROM v$parameter WHERE name = 'max_string_size';

..这是多行格式的结果:

NAME                    max_string_size
VALUE                   EXTENDED
DISPLAY_VALUE           EXTENDED
DEFAULT_VALUE           STANDARD
ISDEFAULT               FALSE
ISSES_MODIFIABLE        FALSE
ISSYS_MODIFIABLE        IMMEDIATE
ISPDB_MODIFIABLE        TRUE
ISINSTANCE_MODIFIABLE   FALSE
ISMODIFIED              FALSE
ISADJUSTED              FALSE
ISDEPRECATED            FALSE
ISBASIC                 FALSE
DESCRIPTION             controls maximum size of VARCHAR2, NVARCHAR2, and RAW types in SQL

我想在 CREATE TABLE 中使用 COLLATE BINARY_CI,但我收到以下错误消息:

CREATE TABLE sample_db 
  (
       sample_column VARCHAR2(50) COLLATE BINARY_CI
  )

ORA-43929:如果参数不能指定排序规则 MAX_STRING_SIZE=STANDARD 已设置

Oracle 版本为:ORACLE 18c XE (18.0.0.0.0)

【问题讨论】:

您可以关注 oracle 文档,docs.oracle.com/database/121/REFRN/…。您可以使用 oracle home 变量来执行脚本,如 @$ORACLE_HOME/rdbms/admin/utl32k.sql。 【参考方案1】:

它并不像 ALTER ... 那样简单;见Documentation:

仅当数据库处于 UPGRADE 模式时使用 ALTER SYSTEM,并运行 之后的 utl32k.sql 脚本,如本节所述。 ... COMPATIBLE 初始化参数必须设置为 12.0.0.0 或 更高以设置 MAX_STRING_SIZE = EXTENDED。

【讨论】:

我是在 UPGRADE 模式下完成的,并且运行 utl23k.sql 没有任何错误。没有变化。【参考方案2】:

您可以关注 oracle 文档:https://docs.oracle.com/database/121/REFRN/GUID-D424D23B-0933-425F-BC69-9C0E6724693C.htm#REFRN10321 在“增加 PDB 中 VARCHAR2、NVARCHAR2 和 RAW 列的最大大小”部分。

使用 sysdba 用户运行的命令:

# list pdbs
show pdbs;

# alter session to a specific pdb
alter session set container = pdb;

# restart pdb in upgrade mode
shutdown;
alter pluggable dabase pdb open upgrade;

# change max_string_size
alter system set max_string_size=extended;

# run oracle script
@$ORACLE_HOME/admin/utl32k.sql;

# reopen as normal mode
shutdown;
alter pluggable database pdb open READ WRITE;

# recompile invalid objects
@$ORACLE_HOME/rdbms/admin/utlrp.sql;

我使用了https://hub.docker.com/r/pvargacl/oracle-xe-18.4.0 容器图像。该页面包含连接到 sysdba 模式的指南。

【讨论】:

【参考方案3】:

解决了。

问题是我试图在 CDB 而不是 PDB 中修改 MAX_STRING_SIZE 参数的值。

使用“XEPDB1”修改命令:

PURGE DBA_RECYCLEBIN;
ALTER PLUGGABLE DATABASE XEPDB1 CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE XEPDB1 OPEN UPGRADE;
ALTER SESSION SET CONTAINER=XEPDB1;
ALTER SYSTEM SET MAX_STRING_SIZE=EXTENDED;
@?/rdbms/admin/utl32k.sql;
ALTER PLUGGABLE DATABASE XEPDB1 CLOSE;
ALTER PLUGGABLE DATABASE XEPDB1 OPEN;

【讨论】:

以上是关于ORACLE 18c XE (18.0.0.0.0) - MAX_STRING_SIZE = EXTENDED (COLLATE BINARY_CI) 问题的主要内容,如果未能解决你的问题,请参考以下文章

安装Oracle Database 18c 安装程序时,报错[INS-35180]无法检查可用内存

在 C++ 中带有子句和函数的 oracle 的 OTL 问题

来自 19c 的 Oracle XE 18c impdp 转储

Oracle Database Express Edition(XE)64位和ODBC

Oracle 18C新特性介绍

18c 与 19c 上的 Oracle 编号问题