Oracle Ошибка свойства EDITIONABLE при импорте резервной копии из 11G - PullRequest
0 голосов
/ 13 января 2020

У меня есть oracle 11G файлы дампа. Когда я импортирую его в 12.2.0.1.0, он импортируется, как и ожидалось. После этого мне нужно запустить мой последний скрипт DDL, который содержит CREATE OR REPLACE View / Function / Процедура / Type. Когда я выполняю свой скрипт, я получаю ошибку ниже.

ORA-38824: A CREATE OR REPLACE command may not change the EDITIONABLE property of an existing object.

После импорта файла дампа, когда я увидел данные user_objects, все мои импортированные объекты имеют EDITIONABLE = N. Нужно ли мне менять значение по умолчанию перед импортом файлом дампа? ? Мне нужно исправить это с минимальными шагами. Клиент (ы) не будет выполнять сложные сценарии или не будет давать сложные разрешения. Я попробовал ниже заявление, но не работает.

alter user pjs enable editions;

1 Ответ

0 голосов
/ 13 января 2020

Это относится к Переопределению на основе издания . Начиная с 12 c, вы можете пометить отдельные объекты как (non)editionable. По умолчанию используется значение editionable.

. Из-за ошибки вы не можете изменить это свойство при использовании create or replace.

При импорте объекты должны быть созданы как noneditionable. Таким образом, у вас есть несколько вариантов:

  • Добавить ключевое слово noneditionable в ваши скрипты
  • Изменить объекты на editionable - если пользователь не включены редакции
  • Удалите все не редактируемые объекты и заново создайте их

Например:

create or replace noneditionable procedure prc ( p int ) as
begin
  null;
end prc;
/

select editionable 
from   user_objects
where  object_name = 'PRC';

EDITIONABLE   
N  

alter procedure prc editionable;

select editionable 
from   user_objects
where  object_name = 'PRC';

EDITIONABLE   
Y     

grant create session, 
      create procedure 
  to u 
  identified by u;

alter user u enable editions;

conn u/u

create or replace noneditionable procedure prc ( p int ) as
begin
  null;
end prc;
/

select editionable 
from   user_objects
where  object_name = 'PRC';

EDITIONABLE   
N   

create or replace procedure prc ( p int ) as
begin
  null;
end prc;
/

ORA-38824: A CREATE OR REPLACE command may not change the EDITIONABLE property of an existing object.

alter procedure prc editionable;

ORA-38825: The EDITIONABLE property of an editioned object cannot be altered.

select editionable 
from   user_objects
where  object_name = 'PRC';

EDITIONABLE   
N   

drop procedure prc;

create or replace procedure prc ( p int ) as
begin
  null;
end prc;
/

select editionable 
from   user_objects
where  object_name = 'PRC';

EDITIONABLE   
Y     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...