Проблема ORACLE 18c XE (18.0.0.0.0) — MAX_STRING_SIZE = РАСШИРЕННЫЙ (СОПОСТАВИТЬ ДВОИЧНЫЕ файлы)

#plsql #oracle-xe #collate

#plsql #oracle-xe #сопоставить

Вопрос:

Я установил MAX_STRING_SIZE из СТАНДАРТНОГО в РАСШИРЕННЫЙ с помощью этой команды:

 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 sample_db 
  (
       sample_column VARCHAR2(50) COLLATE BINARY_CI
  )
 

ORA-43929: Сопоставление не может быть указано, если установлен параметр
MAX_STRING_SIZE=STANDARD

Версия Oracle: ORACLE 18c XE (18.0.0.0.0)

Комментарии:

1. Вы можете следовать документации oracle, docs.oracle.com/database/121/REFRN /. … Вы можете использовать переменную oracle home для выполнения сценариев как @${ORACLE_HOME}/rdbms/admin/utl32k.sql.

Ответ №1:

Это не так просто, как ИЗМЕНИТЬ …; См. Документацию:

Используйте ALTER SYSTEM только тогда, когда база данных находится в режиме ОБНОВЛЕНИЯ, а затем запустите скрипт utl32k.sql, как описано в этом разделе .

Для параметра СОВМЕСТИМОЙ инициализации должно быть установлено значение 12.0.0.0 или выше, чтобы установить MAX_STRING_SIZE = РАСШИРЕННЫЙ.

Комментарии:

1. Я сделал это в режиме ОБНОВЛЕНИЯ и запустил utl23k.sql без каких-либо ошибок. Никаких изменений.

Ответ №2:

Вы можете следовать документации oracle: https://docs.oracle.com/database/121/REFRN/GUID-D424D23B-0933-425F-BC69-9C0E6724693C.htm#REFRN10321 в разделе «Увеличение максимального размера столбцов VARCHAR2, NVARCHAR2 и RAW в PDB».

Команды выполняются с пользователем 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:

Решаемая.

Проблема заключалась в том, что я пытался изменить значение параметра MAX_STRING_SIZE в CDB вместо PDB.

Изменить команды с помощью ‘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;