Я создал Oracle МН пакет / пакет SQL с заголовком и тело с большим количеством кода.
Позже, я закончил тем случайно, что стер код из того тела после того, как повторно выполнился CREATE OR REPLACE PACKAGE BODY...
оператор с кодом другого источника (который на самом деле я намеревался сохранить под другим именем пакета).
Есть ли какой-либо способ, которым я могу восстановить свой более старый замененный исходный код с пакета?
Вы могли бы получить его обратно, используя ретроспективный запрос на 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 с all_source здесь .
Если у вас не включена регистрация/аудит команд DDL или нет резервной копии базы данных, то ответ почти наверняка будет отрицательным
Определения базы данных, включая хранимые процедуры, всегда должны рассматриваться как исходный код и храниться в репозитории кода