Oracle 12c расширен для поддержки varchar2 › 4000 байт не работает для пользователя, который не является sysdba

На oracle 12c, совместимом с 12.0.0, изменено на расширенное с привилегиями sysdba. Теперь я могу создать таблицу со столбцом varchar2 (16000) и вставить строку > 4000 байт; но только при подключении как sysdba. При подключении как обычный пользователь, а не sysdba, я не могу играть с varchar2>4000 байт, выдается ошибка ORA-60019. Кто-нибудь может объяснить, почему? параметр max_string_size=extended and compatible=12.0.0 при входе в систему как пользователь, не являющийся sysdba.


person Shadab Khan    schedule 16.06.2015    source источник
comment
Возможно, вы захотите опубликовать это на StackExchange для администраторов баз данных.   -  person Mr. Llama    schedule 17.06.2015
comment
Вы выполнили все шаги, описанные в руководстве? У вас есть CDB или не CDB?   -  person Jon Heller    schedule 17.06.2015
comment
Привет, когда вы вошли в систему как sysdba, вы создаете таблицы в том же табличном пространстве, что и когда вы вошли в систему как обычный пользователь? Размер экстента одинаков во всем табличном пространстве? Возможно, вам нужно создать табличное пространство пользователей с большим размером экстента... дайте мне знать! Например: создайте файл данных табличного пространства '/data_256K01_01.dbf' размер 2000M управление экстентом локальный унифицированный размер 256K;' и попробуйте вставить в него те же данные.   -  person Giova    schedule 21.07.2015


Ответы (2)


Выполните следующие шаги и дайте мне знать, если проблема решена. Я прошу установить параметр еще раз, чтобы убедиться, что все в порядке.

1) Сделайте резервную копию вашего spfile (получите расположение spfile)

sqlplus / as sysdba
show parameter spfile;

2) Закройте базу данных.

sqlplus / as sysdba
shutdown immediate

3) Перезапустите базу данных в режиме UPGRADE.

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 помогает перекомпилировать некорректные объекты. Вы должны быть подключены КАК SYSDBA для запуска скрипта.

6) Перезапустите базу данных в НОРМАЛЬНОМ режиме.

sqlplus / as sysdba
shutdown immediate
startup;
show parameter MAX_STRING_SIZE; 

7) создать новую таблицу с типом данных столбца varchar2 размером более 4000.

person Nilesh Deshpande    schedule 04.09.2015

Вы должны изменить свой файл "TNSNAMES.ORA" для подключения через PDB. Я был с той же проблемой. Я решил с информацией по ссылке ниже.

https://dba.stackexchange.com/questions/240761/in-oracle-12c-tryiyng-to-create-table-with-columns-greater-than-4000

Причина такого поведения заключается в том, что вы находитесь в многопользовательской среде, т. е. в главном контейнере, называемом CDB («База данных контейнеров»), и любом количестве PDB («Подключаемые базы данных»).

CDB («контейнер») — это своего рода «системная» база данных, которая содержит фактические базы данных клиентов («подключаемые базы данных» или PDB). CDB не предназначена для получения каких-либо данных о клиентах. Все входит в одну или несколько PDB.

При подключении без указания какой-либо службы вы автоматически попадаете в БД. Параметр расширенных строк игнорируется для CDB: предел остается 4000 байт. Следующее подключается к CDB. Создание таблицы с длинной строкой отклоняется, как и в вашем случае:

person Cleber Marques    schedule 17.12.2019