Как перекомпилировать недействительные пакеты PLSQL, которые были зашифрованы с помощью утилиты Wrap Oracle 10g?

#oracle #plsql #oracle10g

#Oracle #plsql #oracle10g

Вопрос:

Итак, я взял экспорт (с использованием Data Pump) из схемы Oracle 10g, где все пакеты PLSQL были зашифрованы с помощью утилиты Wrap Oracle. Проблема в том, что когда я импортирую это в новую схему, все мои пакеты недействительны, и попытка ручной компиляции не работает.

 SQL> ALTER PACKAGE mypackage compile;

Warning: Package altered with compilation errors.

SQL> show errors
Errors for PACKAGE MYPACKAGE:

LINE/COL ERROR
-------- -----------------------------------------------------------------
36/2     PLS-00103: Encountered the symbol "2"
 

Итак, каково решение для перекомпиляции всех этих недействительных пакетов?

Комментарии:

1. была ли импортированная база данных другого выпуска, чем исходная БД?

2. @tbone да, я считаю, что это был немного другой выпуск, но коллега сообщил мне, что это также происходит между одним и тем же выпуском. На самом деле, по-видимому, это известная ошибка в Oracle. Тем не менее, это все еще не дает мне решения. 🙁

3. Я считаю, что перенос не совместим с понижением (т. Е. Не может экспортировать с более высокого уровня и импортировать в выпуск более низкого уровня). Вот почему я все равно спросил. Кроме того, я полагаю, что в 10g есть известная ошибка, связанная с упакованными пакетами и перекачкой данных. У вас есть последние исправления?

4. @tbone спасибо за это. Нет, у нас нет последних исправлений для этой конкретной системы.

Ответ №1:

Попробуйте использовать системную DBMS_UTILITY.COMPILE_SCHEMA процедуру для компиляции объектов вашей схемы. Эта процедура определит порядок, в котором следует компилировать ваши объекты, и даже обрабатывает циклические зависимости. После сборки скриптовой схемы рекомендуется вызвать процедуру очистки.

 BEGIN
  DBMS_UTILITY.COMPILE_SCHEMA('MYSCHEMA');
END;
/
 

Мне было бы любопытно узнать, насколько хорошо он обрабатывает обернутые объекты.

Комментарии:

1. @BrianFenton: Спасибо за отзыв, это полезно знать. Мне было любопытно, справится ли она с этой проблемой.

Ответ №2:

Итак, похоже, что для этой проблемы нет «исправления», только обходные пути, ни один из которых не идеален.

  1. Повторите экспорт и импорт, используя старые программы exp и imp (вместо data pump)
  2. Если у вас есть .Файлы SQL, содержащие определения пакетов, вы можете вручную скомпилировать в SQL * Plus (это могут быть тысячи файлов, что делает эту большую работу).
  3. Вы можете исправить базу данных (см. Статью Metalink 460267.1)