12

ヘッダーとボディに大量のコードを含む Oracle PL/SQL パッケージを作成しました。

CREATE OR REPLACE PACKAGE BODY...後で、別のソース コード (実際には別のパッケージ名で保存するつもりでした) を使用してステートメントを再実行した後、誤ってその本体からコードを消去してしまいました。

古い置き換えられたソース コードをパッケージから復元する方法はありますか?

4

2 に答える 2

18

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.

フラッシュバックの詳細については、こちらをご覧くださいTom Kyteは、ここでall_sourceでフラッシュバックを使用する方法も示しています。

于 2010-06-04T21:05:00.890 に答える
4

DDLコマンドのロギング/監査を有効にしている場合、またはデータベースのバックアップを作成している場合を除いて、答えはほぼ確実ではありません。

ストアドプロシージャを含むデータベース定義は、常にソースコードのように扱い、コードリポジトリに保持する必要があります

于 2010-06-04T18:20:36.747 に答える