понедельник, 2 августа 2010 г.

ORA-04052: error occurred when looking up remote object

Нашел сообщение в черновике, которое написал уже давно, и решил опубликовать, т.к. на днях разобрались с этой историей.

Накатывал большой патч на серверную логику продуктивной БД. Изменения в пакетах, триггерах, альтеры таблиц и пр. После чего получил инвалидные объекты с ошибками следующего содержания:


Error: PL/SQL: ORA-04052: error occurred when looking up remote object CMS.USERS_TABLE@DB1.RESTRICTED
ORA-00604: error occurred at recursive SQL level 1
ORA-03106: fatal two-task communication protocol error
ORA-02063: preceding line from DB1.RESTRICTED
Line: 35
Text: insert into users_table@db1.restricted(login_id,user_name,serv_group_id,


DBA в отпуске был. Два часа часть функционала была недоступна. Google навел меня на информацию о баге в Oracle 9, проявляющуюся при компиляции кода, где есть связь по dblink с базой на другой платформе. В нашем случае это был Oracle 9.2.0.8 на Solaris SPARC и та-же версия на CentOS x86.
Придумал быстрый workaround: создать на той же базе схему c таким же именем и с объектами, на которые смотрит dblink(благо объектов было всего с десяток), в tnsnames заменить адрес удаленной базы на локальную, перекомпилить пакеты и поменять tnsnames обратно.
C этой страшной багой мы жили несколько месяцев, каждый раз боясь инвалидировать код, работающий с dblink'ом, но все равно пару раз повторялось.

Все это закончилось тем, что мы наконец перешли на 10g, где такой ошибки нет. Ура!!!

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

Отправить комментарий