Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > impdp


Автор: setnull 15.9.2009, 13:20
Все здравствуйте!!!

Делаю impdp (expdp прошел без ошибок)...
все завершается так:
Код

Обрабатывается объект типа SCHEMA_EXPORT/PACKAGE/PACKAGE_BODY
Обрабатывается объект типа SCHEMA_EXPORT/JAVA_CLASS/JAVA_CLASS
Обрабатывается объект типа SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Обрабатывается объект типа SCHEMA_EXPORT/TABLE/TRIGGER
ORA-39125: Непредвиденная неустранимая ошибка рабочего процесса в KUPW$WORKER.PUT_DDLS при вызове DBMS_METADATA.CONVERT []
ORA-06502: PL/SQL:
LPX-00225: end-element tag "ROW" does not match start-element tag "BODY" ошибка числа или значения

ORA-06512: на  "SYS.DBMS_SYS_ERROR", line 95
ORA-06512: на  "SYS.KUPW$WORKER", line 6235

----- PL/SQL Call Stack -----
  object      line  object
  handle    number  name
397B727C     14916  package body SYS.KUPW$WORKER
397B727C      6300  package body SYS.KUPW$WORKER
397B727C     12279  package body SYS.KUPW$WORKER
397B727C      3279  package body SYS.KUPW$WORKER
397B727C      6889  package body SYS.KUPW$WORKER
397B727C      1262  package body SYS.KUPW$WORKER
37768E88         2  anonymous block


Что это может быть?
И еще: можно как-нибудь указать imp/exp'у чтоб не имп/экспортировать, к примеру триггеры, или вообще определенную проседуру?


Спасибо!!!!

Автор: ToshaCh 26.9.2009, 10:26
Ты какую схему импортишь? Не sys случайно?

По поводу второй часть вопроса: параметр INCLUDE. Ну и expdp -help не лишняя фишка. 

Автор: setnull 7.10.2009, 09:52
Цитата(ToshaCh @ 26.9.2009,  10:26)
Ты какую схему импортишь? Не sys случайно?

По поводу второй часть вопроса: параметр INCLUDE. Ну и expdp -help не лишняя фишка.

нет, свою.

Include уже нашел... Спасибо.

Автор: ToshaCh 7.10.2009, 13:06
Хм. Вот жешь как интерестно. LPX... У тебя там xml используется? Давай попробуем стили перегрузить.

На базе, на которую импортируешь выполни под sys.
Код

@$ORACLE_HOME/rdbms/admin/initmeta.sql

Автор: setnull 22.10.2009, 15:31
1) в initmeta.sql у меня лежит такой код
Код

EXECUTE SYS.DBMS_METADATA_UTIL.LOAD_STYLESHEETS('ORAHOME\rdbms\xml\xsl');

он не выполнялся,  т.к. в SYS.DBMS_METADATA_UTIL.LOAD_STYLESHEETS у меня параметры отсутствуют....
2)Я выполнил без пути... Но на поведении impdp это никак не отразилось.
3)Може это имеет значение, я лью в другую схему (remap_schema)

Автор: setnull 22.10.2009, 16:16
И если сделать exclude=trigger, указанная ошибка пропадает

Автор: ToshaCh 24.10.2009, 12:53
Гы. Порыл я священный металинк. Тебе надо патч походу ставить. База какой версии?

Doc ID:    453918.1

Автор: setnull 27.10.2009, 09:22
10 g.
Я не заметалинченый. По крайней мере ничего для этого не деал. Или там свободный доступ?
Не раз встречал фразы подобные "Если есть доступ на металинк, ...".

Автор: ToshaCh 27.10.2009, 22:13
Если у тебя официально купленая база, то ты можешь создать себе металинк аккаунт используя свой CSI. Если же нет придётся выкручиваться. 
Раз у тебя криво заливаются тригеры, попробуем обдурить систему. У импорта есть параметр sqlfile, который позволяет нагенерить ddl код. Т.е. тебе надо слить твои тригеры в скрипт, доработать напильником, и исполнить smile

Автор: setnull 28.10.2009, 15:59
Спасибо!!! а в чем именно глюк я по ddl определю? ничего сложного?

Автор: setnull 28.10.2009, 17:52
Код

Обрабатывается объект типа SCHEMA_EXPORT/TABLE/TRIGGER
ORA-39125: Непредвиденная неустранимая ошибка рабочего процесса в KUPW$WORKER.PUT_DDLS при вызове DBMS_METADATA.CONVERT []
ORA-06502: PL/SQL:
LPX-00225: end-element tag "ROW" does not match start-element tag "BODY" ошибка числа или значения

ORA-06512: на  "SYS.DBMS_SYS_ERROR", line 95
ORA-06512: на  "SYS.KUPW$WORKER", line 6235

----- PL/SQL Call Stack -----
  object      line  object
  handle    number  name
3C246EF4     14916  package body SYS.KUPW$WORKER
3C246EF4      6300  package body SYS.KUPW$WORKER
3C246EF4     12279  package body SYS.KUPW$WORKER
3C246EF4      3279  package body SYS.KUPW$WORKER
3C246EF4      3956  package body SYS.KUPW$WORKER
3C246EF4      6931  package body SYS.KUPW$WORKER
3C246EF4      1262  package body SYS.KUPW$WORKER
3C919F24         2  anonymous block


 в файл пишет
Код


-- CONNECT SYS
-- new object type path is: SCHEMA_EXPORT/TABLE/TRIGGER


 все :(

Автор: ToshaCh 28.10.2009, 23:33
Блин, вот зараза smile Ну тогда надо выковыривать ddl с соруса непосредственно из таблицы dba_source

Автор: setnull 29.10.2009, 09:09
А это возможно сделать тоже какими-нибудь не GUIшными средствами?

Автор: ToshaCh 29.10.2009, 09:58
Ну дык sqlplus!

Автор: setnull 29.10.2009, 13:23
 smile  а как ? smile 

Автор: setnull 29.10.2009, 13:59
и можно ли это реализовать batником, и чтоб как в expdp сразу для нескольких схем?
просто с sqlplus практичекси не работал...(

Автор: setnull 29.10.2009, 15:15
вот, если у меня есть такой код

Код

for ddl_row in 
(
SELECT
TO_CHAR(
DBMS_METADATA.GET_DDL(all_objects.object_type, all_objects.object_name, all_objects.owner) as ddl
)
FROM all_objects 
WHERE all_objects .object_type = 'TRIGGER'
loop
end loop;


 как мне сделать, чтоб
1) вывести содержимое в какой-нибудь файл? есть что-то типа DBMS_FILE_IO? чего-то не нахожу ничего..
2) указанный код выполнялся через бат-файл?

или это вообще можно сделать как-то гараздо проще?
И еще хочу оточнить в чем конкретно глюк в empdp/impdp? Некорректно формируется сам дамп-файл, или ошибки именно этапа импорта? Т.е. если поставить патч, уже имеющиеся дампы будут импортироваться?

Спасибо!!!

Автор: setnull 29.10.2009, 16:13
Код

declare
  l_file       UTL_FILE.FILE_TYPE;
BEGIN
  l_file := utl_file.fopen('ORA_DUMP_DIR', 'test.sql', 'w');
  
  for ddl_row in 
  (
SELECT
all_objects.object_name,
all_objects.owner
FROM all_objects 
WHERE all_objects .object_type = 'TRIGGER'
and all_objects.owner in ('MY', 'SCHEME', 'LIST')
)loop
  dbms_output.put_line(ddl_row.object_name);
 UTL_FILE.PUT_LINE(l_file, TO_CHAR(
DBMS_METADATA.GET_DDL('TRIGGER', ddl_row.object_name, ddl_row.owner)));
  UTL_FILE.PUT_LINE(l_file, '/');
null;
end loop;

  IF UTL_FILE.IS_OPEN(l_file) THEN
    UTL_FILE.FCLOSE(l_file);
  END IF;
END;



Вот. Как теперь его через бытник запустить?

Автор: setnull 29.10.2009, 16:29
Блин!!! Этот скрипт вязывает ту же самую ошибку!!!!

Код

Error report:
ORA-06502: PL/SQL: 
LPX-00225: end-element tag "ROW" does not match start-element tag "BODY" ошибка числа или значения
ORA-06512: на  "SYS.UTL_XML", line 168
ORA-06512: на  "SYS.DBMS_METADATA_INT", line 9462
ORA-06512: на  "SYS.DBMS_METADATA", line 1919
ORA-06512: на  "SYS.DBMS_METADATA", line 2792
ORA-06512: на  "SYS.DBMS_METADATA", line 4333
ORA-06512: на  line 20
06502. 00000 -  "PL/SQL: numeric or value error%s"

Автор: Zloxa 29.10.2009, 16:52
Похоже на баг.
У тебя что вернет:
Код

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 
 
SQL> 
SQL> select sum(dbms_lob.getlength(dbms_metadata.get_ddl(object_type
  2                                                     ,object_name
  3                                                     ,owner)))
  4    from all_objects
  5   where object_type = 'TRIGGER'
  6  /
 
SUM(DBMS_LOB.GETLENGTH(DBMS_ME
------------------------------
                         56308




Автор: ToshaCh 29.10.2009, 17:17
Цитата(Zloxa @  29.10.2009,  16:52 Найти цитируемый пост)
Похоже на баг.У тебя что вернет:

Это именно баг. Я выше писал об этом. Нужно патч ставить, т.к. dbms_metadata не пашет. Либо ставить патч, либо раскручивать dba_source

Автор: setnull 30.10.2009, 10:45
Так да. у меня ошибку швыряет именно dbms_metadata.get_ddl. И, собственно, предложенный запрос также.
Причем, только на отдельных триггерах. Сильно не анализировал, но навскидку на тех, которые отличаются большими размерами, но тоже не факт. (Может, это ассоциативное мнение из-за  предложенного
Код

select sum(dbms_lob.getlength(

smile
)
И тут вот еще что у меня вчера всплыло  блин. Это тот же баг?

Вот захожу в свои схемы - там все замечательно (с таблицами).
Если же заходить через sys в эти же схемы, то кроме нормальных таблиц там также присутствуют таблицы с именами такого вида 
BIN$/FTzNt4HSwaArTixM/7I7Q==$0 
и со структурами оригинальных таблиц (оригинальные также присутствуют в нормальном виде).
Также и с такими же иероглифическими именами эти таблицы имеют и соответствующие оригиналу триггеры.
Так вот при попытке metadata построить ddl для таких триггеров, говорит, что не может найти такой объект.
Но все равно, если ставишь фильтр
     and (object_name not like 'BIN%')     
в запросе на множество трггеров, и работая только с оригиналами
LPX-00225 вылетает именно на нормальных  объектах.
Также отмечу, что не смотря на отсутствие BIN$таблиц в оригинальных схеммах, поведение же все запросов вокруг all_objects и dbms_metadata не меняется, если вызывать их под этими схемами. Т.е. тоже на может найти BIN$/FTzNt4HSwaArTixM/7I7Q==$0 
и все то же LPX-00225.

Что это вообще за BIN$ы? Уж очень они мне не нравятся?

Ну а возвращаясь к ddl, сейчас буду разбираться с dba_source.

Спасибо!!!.

Автор: setnull 30.10.2009, 11:06
так, с dba_source, вроде, все понятно.
Единственное уточню:
Там все начинается со строк
"TRIGGER "SCHEME"."TRIGGER_NAME". 
Если же я хочу получиь DDL, то нужно просто добавиь CREATE OR REPLACE? Или есть еще какие-то нюансы?

И, все-таки, как же потом выполнение моего скрипта реализовать через бат-файл?

И все еще переживаю за BIN$-глюки. Насколько это серьезно? Что это? Или это проявление той же дыры?

P.S. Так а в чем собственно этот баг, который патчить нужно, выражается? Какой его характер? Может быть, что сейчас проблема с триггерами, а потом возникнет и с пакетами или еще с чем? Или, обойдя, эту ситуацию с триггерами, в дельнейшем к ней не вернусь?

Спасибо!!!

Автор: ToshaCh 30.10.2009, 15:26
setnull,  

BIN$ это оракловая мегамысль (чтоб юзвери чувтствовали себя в базе как в родном вантузе). Это называется http://www.orafaq.com/node/968. В принципе почисти корзину, может быть поможет и не придётся тогда ковырять dba_source.

Автор: setnull 3.11.2009, 12:03
Странно, но я и сам догадывался, что BIN$ы связаны с корзиной, только искал почему-то более косвенную связь smile
Как бы там ни было, но очистка корзины никак не отобразилась на imp'е.

В общем у меня осталось три актуальных вопроса

1) Достаточно ли для формирования DDL отдельного трггеора просто сконкатенировать 'create or replace' с соответствующей последовательностью кода из dba_source
2) Как выполнить опеределенный PL код из командной строки, только невнесением последовательности команд, а типа бат-файл, чтоб прописать все, что необходимо, а оператор только запускал....
3) В полной ли мере решается проблема с этим багом при imp, если осуществить отдельнуюу выгрузку триггеров? Или следом может полететь выгрузка других объектов? В чем именно этот баг заключается?

Спасибо!!!

Добавлено через 4 минуты и 39 секунд
А, и еще, я могу как-то узнать, гуляя по all_objects и т.п., что объект Корзинный по более достоверному признаку, чем object_name like 'BIN$%'?
Приджойнить, может, что-то можно?

Автор: ToshaCh 3.11.2009, 13:45
1) Вроде да. Но нужно проверить. 
2) http://forum.vingrad.ru/forum/topic-258676.html уже обсуждали.
3) Насколько я понимаю речь только о триггерах. Там при экспорте проскакивают null символы, на которых всё и падает. (за что купил называется, описалово бага у оракла не очень вразумительное).

Добавлено через 1 минуту и 23 секунды
Цитата(setnull @  3.11.2009,  12:03 Найти цитируемый пост)
А, и еще, я могу как-то узнать, гуляя по all_objects и т.п., что объект Корзинный по более достоверному признаку, чем object_name like 'BIN$%'?Приджойнить, может, что-то можно?

Код

select object_name, original_name, type, can_undrop as "UND", can_purge as "PUR", droptime  from recyclebin

Автор: setnull 4.11.2009, 09:41
благодарю!!!

Добавлено через 14 минут и 15 секунд
P.S. а еще в dba_source нет информации касательно состояния триггера.
Как ее узнать?

Автор: ToshaCh 4.11.2009, 10:37
В смысле валидный/не валидный? dba_objects (ну или all_objects). 

Автор: setnull 4.11.2009, 10:47
нет. Вот нашел

Код

select
enabled
from TRIGGER$

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)