powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-31603 при использовании DBMS_METADATA.DEG_DDL
25 сообщений из 44, страница 1 из 2
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #32998886
McMurfy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый вечер!
Хочу выгрузить DDL для Constraint'ов с помощью такого (например) кода:
Код: plaintext
1.
select DBMS_METADATA.GET_DDL('CONSTRAINT','MY_CONSTR','SCOTT') from dual
При этом получаю ошибку:
автор
ORA-31603: object "MY_CONSTR" of type CONSTRAINT not found in schema "SCOTT"

Constraint существует, запрос к DBA_Constraints это подтверждает.
Может быть кто-нибудь знает, в чем дело? Заранее спасибо!
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #32998972
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I do not see anything wrong with syntax:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SQL> SET LONG  1000 
SQL> select DBMS_METADATA.GET_DDL('CONSTRAINT','PK_EMP','SCOTT') from dual;

DBMS_METADATA.GET_DDL('CONSTRAINT','PK_EMP','SCOTT')
--------------------------------------------------------------------------------

  ALTER TABLE "SCOTT"."EMP" ADD CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
  USING INDEX PCTFREE  10  INITRANS  2  MAXTRANS  255 
  STORAGE(INITIAL  65536  NEXT  65536  MINEXTENTS  1  MAXEXTENTS  2147483645 
  PCTINCREASE  0  FREELISTS  1  FREELIST GROUPS  1  BUFFER_POOL DEFAULT)
  TABLESPACE "INDEX_SMALL"  ENABLE



SQL> 

What happens when you issue:

Код: plaintext
1.
2.
3.
4.
SELECT  CONSTRAINT_TYPE
  FROM  DBA_CONSTRAINTS
  WHERE OWNER = 'SCOTT'
    AND CONSTRAINT_NAME = 'MY_CONSTR'
/

SY.
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #32999000
McMurfy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получаю 'R', это внешний ключ.
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #32999014
McMurfy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только что попробовал, приведенная конструкция отлично отрабатывает для Constraint'ов всех типов ('C','P','U'), кроме внешних ключей ('R'). Интересно, почему...
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #32999026
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
For a foreign key you must use REF_CONSTRAINT:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> SET LONG  1000 
SQL> select DBMS_METADATA.GET_DDL('REF_CONSTRAINT','FK_DEPTNO','SCOTT') from dual;

DBMS_METADATA.GET_DDL('REF_CONSTRAINT','FK_DEPTNO','SCOTT')
--------------------------------------------------------------------------------

  ALTER TABLE "SCOTT"."EMP" ADD CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
          REFERENCES "SCOTT"."DEPT" ("DEPTNO") ENABLE



SQL> 

SY.
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #32999041
McMurfy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огромное спасибо! Исчерпывающий ответ!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #37574509
AcMuHor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всех приветствую!
И вновь к этому вопросу)...теперь про стандартный планировщик!
(Oracle Database 10g Enterprise Edition Release 10.2.0.4.0)

Код: plsql
1.
2.
3.
4.
5.
SELECT dbms_metadata.get_ddl('PROCOBJ','FGR$AUTOPURGE_JOB', 'SYS') from dual;

или

SELECT dbms_metadata.get_ddl('PROCOBJ','AUTO_SPACE_ADVISOR_JOB', 'SYS') from dual;



Выходит та же самая ошибка ORA-31603((( что здесь то не так не пойму??

Хотя в базе есть такой scheduler:

select * from dba_scheduler_jobs where owner = 'SYS' and job_name = 'FGR$AUTOPURGE_JOB';
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #37574691
AcMuHor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если рассматривать далее.
Создаю задание:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
BEGIN 
dbms_scheduler.create_job('JOB_TEST',
job_type=>'PLSQL_BLOCK', job_action=>
'begin 
 null;
 end;'
, number_of_arguments=>0,
start_date=>'30.11.11 10:02:37,000000 +00:00', repeat_interval=> 
'FREQ=DAILY;BYHOUR=1;BYMINUTE=0;BYSECOND=0'
, end_date=>NULL,
job_class=>'DEFAULT_JOB_CLASS', enabled=>FALSE, auto_drop=>FALSE,comments=>
'Тестовый робот для форума SQL.RU'
);
COMMIT; 
END; 



Проверяю создание задания:

Код: plsql
1.
select j.job_name, j.job_type from dba_scheduler_jobs j where j.owner = 'SYS' and j.job_name = 'JOB_TEST';



JOB_NAME JOB_TYPE
------------------------------------ ----------------------
JOB_TEST PLSQL_BLOCK


Пытаюсь выдернуть DLL:

Код: plsql
1.
SELECT dbms_metadata.get_ddl('PROCOBJ', 'JOB_TEST', 'SYS') from dual;



[1]: ORA-31603: объект "JOB_TEST" с типом PROCOBJ не найден в схеме "SYS"

Да что же не так??

Хотя следующий запрос отрабатывает на ура:

Код: plsql
1.
SELECT dbms_metadata.get_ddl('PROCOBJ', 'MGMT_STATS_CONFIG_JOB', 'ORACLE_OCM') from dual;




DBMS_METADATA.GET_DDL('PROCOBJ','MGMT_STATS_CONFIG_JOB','ORACLE_OCM')
---------------------------------------------------------------------------
(CLOB)
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #37575018
dba123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcMuHor,

что-нибудь вообще (из других схем) показывается ?
Код: plsql
1.
select dbms_metadata.get_ddl('PROCOBJ',j.job_name,j.owner) from dba_scheduler_jobs j where j.owner <> 'SYS';
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #37575030
dba123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dba123,

не заметил,
что Вы в схеме sys создаете джоб

попробуйте в своей или посмотрите что там за права даны oracle_ocm
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #37575033
AcMuHor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да показывает! все без проблем выбирает...так что получается у самого sys-a невозможно посмотреть свои же созданные задания??
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #37575186
AcMuHor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У пользователя ORACLE_OCM следующие привилегии:

Код: plsql
1.
select * from  dba_tab_privs t where t.grantee = 'ORACLE_OCM';



Результат:

GRANTEE OWNER TABLE_NAME GRANTOR
------------------------------------ ------------------------------------ --------------------------------
ORACLE_OCM SYS ORACLE_OCM_CONFIG_DIR SYS
ORACLE_OCM SYS ORACLE_OCM_CONFIG_DIR SYS

Вообщем не знаю что это скажет Вам))

Просто очень интересно почему так получается).
Вручную просто не хотелось все заново создавать на другой БД, т.к. полный дамп DBMS_DATAPUMP не выгружает эти задания((
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #37575200
AcMuHor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
т.к. под SYSTEM все работает так и придется пересоздать под ним все задания))...

Спасибо за помощь!
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #37575292
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересный обход бага
Dbms_metadata.Get_ddl Can Not Capture Ddl For Scheduler Jobs [ID 567504.1]

Спасибо, полезно.
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #37609155
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня при выполнении
Код: plsql
1.
select DBMS_METADATA.GET_DDL('TABLE', 'SD_EXPIRE_PACKS', 'BIS') from DUAL

получается сообщение об ошибке:
ORA-31603: объект "SD_EXPIRE_PACKS" c типом TABLE не найден в схеме "BIS"
ORA-06512: на "SYS.DBMS_METADATA", line 4018
ORA-06512: на "SYS.DBMS_METADATA", line 5843
ORA-06512: на line 1

Я пытался разрапить SYS.DBMS_METADATA, но не получилось .
При этом запрос select * from bis.SD_EXPIRE_PACKS нормально работает, никаких ошибок не выдаёт, выборка не пуста.
В чём может быть проблема?

Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #37609227
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic,

Код: plsql
1.
select object_type from dba_objects where object_name='SD_EXPIRE_PACKS' and owner='BIS';
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #37609272
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PasticORA-31603: объект "SD_EXPIRE_PACKS" c типом TABLE не найден в схеме "BIS"select_catalog_role
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #37609377
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pravednikPastic,

Код: plsql
1.
select object_type from dba_objects where object_name='SD_EXPIRE_PACKS' and owner='BIS';



Возвращает 1 строку со значением TABLE.

-2-PasticORA-31603: объект "SD_EXPIRE_PACKS" c типом TABLE не найден в схеме "BIS"select_catalog_role

Похоже, это то, что нужно.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #38872255
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток!
Эта же ошибка возникает при таких обстоятельствах.
Есть две схемы. Условно USER_DBA (с правами DBA) и USER.
Есть DDL в схеме USER_DBA в котором используется DBMS_METADATA.GET_DDL - здесь и возникает ошибка
Код: plsql
1.
2.
3.
4.
5.
6.
procedure test
is
 c clob;
begin
   c:= dbms_metadata.get_ddl(object_type=>'TRIGGER',name=> 'TR1',schema=>'USER');
end;  



если выполнить для извлечения данных схемы USER_DBA - ошибки нет

Код: plsql
1.
2.
3.
4.
5.
6.
procedure test
is
 c clob;
begin
   c:= dbms_metadata.get_ddl(object_type=>'TRIGGER',name=> 'TR2',schema=>'USER_DBA');
end;  





Причем, если вызывать не из DDL - работает

Код: plsql
1.
select dbms_metadata.get_ddl(object_type=>'TRIGGER',name=> 'TR1',schema=>'USER') into c from dual;



Поручается, ошибка возникает только при вызове из DDL.

Где копать?

Пробовал выполнять это же из схемы USER в DLL - работает нормально, из чего я сделал вывод что не в правах дело.
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #38872283
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorDиз чего я сделал вывод что не в правах дело.Топ №4
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #38872474
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,
SELECT_CATALOG_ROLE присутствует, а ошибка есть
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #38872518
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorDSELECT_CATALOG_ROLE присутствует, а ошибка есть

Медитируй на тему что есть SELECT_CATALOG_ROLE:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
SQL> create user u1 identified by u1
  2  default tablespace users
  3  quota unlimited on users
  4  /

User created.

SQL> grant create session,
  2        create procedure
  3    to u1
  4  /

Grant succeeded.

SQL> grant select_catalog_role
  2    to u1
  3  /

Grant succeeded.

SQL> connect u1@sol11
Enter password: **
Connected.
SQL> create or replace
  2  procedure p1
  3  is
  4   c clob;
  5  begin
  6     c:= dbms_metadata.get_ddl(object_type=>'TABLE',name=> 'EMP',schema=>'SCOTT');
  7  end;
  8  /

Procedure created.

SQL> exec p1
BEGIN p1; END;

*
ERROR at line 1:
ORA-31603: object "EMP" of type TABLE not found in schema "SCOTT"
ORA-06512: at "SYS.DBMS_METADATA", line 5088
ORA-06512: at "SYS.DBMS_METADATA", line 7589
ORA-06512: at "U1.P1", line 5
ORA-06512: at line 1


SQL> create or replace
  2  procedure p1
  3  authid current_user
  4  is
  5   c clob;
  6  begin
  7     c:= dbms_metadata.get_ddl(object_type=>'TABLE',name=> 'EMP',schema=>'SCOTT');
  8  end;
  9  /

Procedure created.

SQL> exec p1

PL/SQL procedure successfully completed.

SQL> 
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #38872541
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,
Помогло! СПАСИБО!
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #39140142
uZverrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Вопрос все еще частично актуален:

create or replace procedure USER1.test authid current_user is
Result clob;
begin
select dbms_metadata.get_ddl('PACKAGE_BODY', 'PKG_NAME', 'USER2') into result from dual;

end test;

При вызове от имени USER1 ругается:
Ошибка: ORA-31603: объект 'PKG_NAME' с типом 'PACKAGE_BODY' не найден в схеме 'USER2'

Что-то уже идеи заканчиваются. Помогите понять что к чему?
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #39140154
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
25 сообщений из 44, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-31603 при использовании DBMS_METADATA.DEG_DDL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]