#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;