バックアップを作成して復元します。たとえば、バックアップ後にテーブルを削除し、バックアップを復元してそのテーブルを回復できます。
最初にRMANに入り、次のステートメントを使用しました
connect target;
shutdown immediate;
startup mount;
configure controlfile autobackup on;
backup database;
今のところ、データベースに接続していて、データベースがマウントされているだけで、バックアップは正常に完了しています。あなたは私がバックアップを実行した後に得たものを上に持っています。
今、私はstartup dba;
データベースを開始したいので、Oracle SQL Developerに接続して、たとえばテーブルを削除できます。
ご覧のとおり、私が持っていた唯一のものを削除したので、今はテーブルがありません(バックアップ前に、HRスキーマのテーブル「リージョン」があり、バックアップの中にあると思います)。
結局エラーが発生するかどうかはわかりませんが、回避したいので、SQL開発者の接続を閉じます。
バックアップと復元の両方を読んだので、データベースを「マウント状態」のままにしておく必要があるので、Recovery Managerに移動して、これだけを実行します。
shutdown immediate;
startup mount;
そして今、このステップで本当のリカバリを実行します。
restore database;
recover database;
今、私は以下を実行する必要がありますが、このエラーが返されます:
alter database open;
だから、代わりにこれを実行します:
alter database open resetlogs;
すべてが完了して開かれたので、テーブルがSQL開発者に復元されたかどうかを確認します。
いいえ、ありません。
上記の出力に基づくと、テーブルはありませんでした。
しかし、テーブルがあり、バックアップを作成し、テーブルを削除したとしましょう。
_restore database
_を使用してデータベースを復元しました。
次に、_recover database
_を使用してデータベースを最新のポイントに回復しました。
データベースを復元したところ、テーブルがありました。次に、テーブルを削除した変更を含むREDOログを使用してデータベースをリカバリしたため、テーブルが再度削除されました。データベースを開いた後にテーブルが表示されないのも不思議ではありません。
_2019-05-27 22:00:00
_でバックアップを取り、次に_2019-05-27 22:10:00
_でテーブルを削除し、データベースがまだテーブルを持っていた時点までデータベースを復元する場合は、不完全なリカバリを実行する必要があります。
したがって、_recover database;
_の代わりに、テーブルがまだ存在する時点を指定します(例:recover database until time "to_date('2019-05-27 22:05:00', 'YYYY-MM-DD HH24:MI:SS')";
)。
オラクルはまさにあなたがそれから要求したことをしました。