Могу ли я восстановить более старый исходный код Oracle pl / sql из тела пакета после замены на более новый код - PullRequest
12 голосов
/ 04 июня 2010

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

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

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

Ответы [ 2 ]

18 голосов
/ 05 июня 2010

Возможно, вы сможете получить его обратно, воспользовавшись запросом ретроспективного просмотра на 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.

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

4 голосов
/ 04 июня 2010

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

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

...