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_SIZE 从 STANDARD 设置为 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 转储