ORA-04043: object SYS_PLSQL_XXXXXXXX_XXX_X does not exist
В этой статье попытаюсь провести расследование на тему - почему появляется ошибка "ORA-04043: object SYS_PLSQL_XXXXXXXX_XXX_X does not exist" и как её решить.
Началось всё с попытки перекомпилировать пакет. Вот полный текст ошибки:
ERROR at line 1:
ORA-04045: errors during recompilation/revalidation of
TEST_SCHEMA.TEST_LIFE_PG
ORA-04043: object SYS_PLSQL_56A267A9_133_1 does not exist
Проанализировав материал по ссылкам (см. Используемая литература), пришла к выводу, что пакет с функционалом PIPE требует внутренние типы Oracle вида
"SYS_PLSQL_XXXXXXXX_XXX_X" при условия, А ВОТ ЭТО САМОЕ ИНТЕРЕСНОЕ: если такой, полностью идентичный, объект существует в другой схеме базы данных. Вопрос: зачем вообще ему эти объекты, и создаёт ли он их сам, если нет в другой схеме.
На данный момент пользуюсь временным решением - нахожу подобные объекты в других схемах БД, проверяю, что нет таких в целой схеме, и создаю их. После пересобираю пакет - успех.
Пример временного решения. В примере указаны объекты из текста ошибкой. Так как при компиляции пакета, возможно требование нескольких объектов.
BEGIN
FOR r IN (SELECT UNIQUE name/*, type#*//*, S.OWNER#*/
FROM sys.obj$ S
WHERE (name LIKE 'SYS_PLSQL_9C8D516C_%' ESCAPE '@'
OR name LIKE 'SYS_PLSQL_F638D40F_%' ESCAPE '@'
OR name LIKE 'SYS_PLSQL_AF8E5319_%' ESCAPE '@'
OR name LIKE 'SYS_PLSQL_4075FF3D_%' ESCAPE '@')
AND type# != 10
AND type# = 13
AND S.OWNER# <> 732
AND S.NAME NOT IN (
SELECT UNIQUE name/*, type#*//*, S.OWNER#*/
FROM sys.obj$ S
WHERE (name LIKE 'SYS_PLSQL_9C8D516C_%' ESCAPE '@'
OR name LIKE 'SYS_PLSQL_F638D40F_%' ESCAPE '@'
OR name LIKE 'SYS_PLSQL_AF8E5319_%' ESCAPE '@'
OR name LIKE 'SYS_PLSQL_4075FF3D_%' ESCAPE '@')
AND type# != 10
AND type# = 13
AND S.OWNER# = 732)
)
LOOP
DBMS_OUTPUT.put_line(r.name);
EXECUTE IMMEDIATE
'CREATE TYPE TEST_SCHEMA.' || r.name;
END LOOP;
END;
Список используемой литературы:
http://www.dba-oracle.com/t_ora_04043.htm
https://twitter.com/WhenOthers
https://community.oracle.com/thread/1131277
http://flyhorse127.blogspot.ru/2007/04/oracle-bug-3744836-while-using-table.html
http://www.anysql.net/doc/bug10104.html
https://dmitrybobrovsky.ru/2012/10/04/kratkaya-instruktsiya-po-ustanovke-prom/
Началось всё с попытки перекомпилировать пакет. Вот полный текст ошибки:
ERROR at line 1:
ORA-04045: errors during recompilation/revalidation of
TEST_SCHEMA.TEST_LIFE_PG
ORA-04043: object SYS_PLSQL_56A267A9_133_1 does not exist
Проанализировав материал по ссылкам (см. Используемая литература), пришла к выводу, что пакет с функционалом PIPE требует внутренние типы Oracle вида
"SYS_PLSQL_XXXXXXXX_XXX_X" при условия, А ВОТ ЭТО САМОЕ ИНТЕРЕСНОЕ: если такой, полностью идентичный, объект существует в другой схеме базы данных. Вопрос: зачем вообще ему эти объекты, и создаёт ли он их сам, если нет в другой схеме.
На данный момент пользуюсь временным решением - нахожу подобные объекты в других схемах БД, проверяю, что нет таких в целой схеме, и создаю их. После пересобираю пакет - успех.
Пример временного решения. В примере указаны объекты из текста ошибкой. Так как при компиляции пакета, возможно требование нескольких объектов.
BEGIN
FOR r IN (SELECT UNIQUE name/*, type#*//*, S.OWNER#*/
FROM sys.obj$ S
WHERE (name LIKE 'SYS_PLSQL_9C8D516C_%' ESCAPE '@'
OR name LIKE 'SYS_PLSQL_F638D40F_%' ESCAPE '@'
OR name LIKE 'SYS_PLSQL_AF8E5319_%' ESCAPE '@'
OR name LIKE 'SYS_PLSQL_4075FF3D_%' ESCAPE '@')
AND type# != 10
AND type# = 13
AND S.OWNER# <> 732
AND S.NAME NOT IN (
SELECT UNIQUE name/*, type#*//*, S.OWNER#*/
FROM sys.obj$ S
WHERE (name LIKE 'SYS_PLSQL_9C8D516C_%' ESCAPE '@'
OR name LIKE 'SYS_PLSQL_F638D40F_%' ESCAPE '@'
OR name LIKE 'SYS_PLSQL_AF8E5319_%' ESCAPE '@'
OR name LIKE 'SYS_PLSQL_4075FF3D_%' ESCAPE '@')
AND type# != 10
AND type# = 13
AND S.OWNER# = 732)
)
LOOP
DBMS_OUTPUT.put_line(r.name);
EXECUTE IMMEDIATE
'CREATE TYPE TEST_SCHEMA.' || r.name;
END LOOP;
END;
Список используемой литературы:
http://www.dba-oracle.com/t_ora_04043.htm
https://twitter.com/WhenOthers
https://community.oracle.com/thread/1131277
http://flyhorse127.blogspot.ru/2007/04/oracle-bug-3744836-while-using-table.html
http://www.anysql.net/doc/bug10104.html
https://dmitrybobrovsky.ru/2012/10/04/kratkaya-instruktsiya-po-ustanovke-prom/
Комментарии
Отправить комментарий