Могу ли я восстановить старый исходный код Oracle pl/sql из тела пакета после того, как я заменил новый код

Я создал пакет Oracle PL/SQL с заголовком и телом с большим количеством кода.

Позже я случайно удалил код из этого тела после повторения инструкции CREATE OR REPLACE PACKAGE BODY... с другим исходным кодом (который я намеревался сохранить под другим именем пакета).

Можно ли каким-либо образом восстановить старый код с исходным кодом из пакета?

Ответ 1

Возможно, вы сможете вернуть его, используя запрос flashback на all_source.

например. мое тело пакета в настоящее время находится в версии 2, выполняя этот запрос в качестве стандартного пользователя:

SQL> select text
  2  from all_source
  3  where name = 'CARPENTERI_TEST'
  4  and type = 'PACKAGE BODY';

TEXT


package body carpenteri_test
is

procedure do_stuff
is
begin
   dbms_output.put_line('version 2');
end do_stuff;

end carpenteri_test;

10 rows selected.

Я знаю, что я изменил это примерно в 9:30 вечера, поэтому после подключения в качестве пользователя SYSDBA я выполнил этот запрос:

SQL> select text
  2  from all_source
  3  as of timestamp
  4  to_timestamp('04-JUN-2010 21:30:00', 'DD-MON-YYYY HH24:MI:SS')
  5  where name = 'CARPENTERI_TEST'
  6  and type = 'PACKAGE BODY';

TEXT
----------------------------------------------------------------------------

package body carpenteri_test
is

procedure do_stuff
is
begin
   dbms_output.put_line('version 1');
end do_stuff;

end carpenteri_test;

10 rows selected.

Более подробную информацию о flashback можно найти здесь. Том Ките также демонстрирует, как использовать flashback с all_source здесь.

Ответ 2

Если у вас нет регистрации/аудита включенных команд DDL или резервной копии базы данных, тогда ответ почти наверняка не будет

Определения базы данных, включая хранимые процедуры, всегда должны обрабатываться как исходный код и поддерживаться в репозитории кода