web-dev-qa-db-ja.com

Oracleがバックアップを正しく復元していない

まず、私が使用していると言います:

  • Oracle Database 11g Express Edition
  • Oracle SQL開発者

私が達成しようとしていること

バックアップを作成して復元します。たとえば、バックアップ後にテーブルを削除し、バックアップを復元してそのテーブルを回復できます。

一歩ずつやってみた

ステップ1

最初にRMANに入り、次のステートメントを使用しました

connect target;
shutdown immediate;
startup mount;
configure controlfile autobackup on;
backup database;

enter image description here

今のところ、データベースに接続していて、データベースがマウントされているだけで、バックアップは正常に完了しています。あなたは私がバックアップを実行した後に得たものを上に持っています。

ステップ2

今、私はstartup dba;データベースを開始したいので、Oracle SQL Developerに接続して、たとえばテーブルを削除できます。 enter image description here

ご覧のとおり、私が持っていた唯一のものを削除したので、今はテーブルがありません(バックアップ前に、HRスキーマのテーブル「リージョン」があり、バックアップの中にあると思います)。
結局エラーが発生するかどうかはわかりませんが、回避したいので、SQL開発者の接続を閉じます。

ステップ3

バックアップと復元の両方を読んだので、データベースを「マウント状態」のままにしておく必要があるので、Recovery Managerに移動して、これだけを実行します。

shutdown immediate;
startup mount;

ステップ4

そして今、このステップで本当のリカバリを実行します。

restore database;

enter image description here

recover database;

enter image description here

今、私は以下を実行する必要がありますが、このエラーが返されます:

alter database open;

enter image description here

だから、代わりにこれを実行します:

alter database open resetlogs;

enter image description here

手順5

すべてが完了して開かれたので、テーブルがSQL開発者に復元されたかどうかを確認します。 enter image description here

いいえ、ありません。

すべての情報が明確であることを願っています

2

上記の出力に基づくと、テーブルはありませんでした。

しかし、テーブルがあり、バックアップを作成し、テーブルを削除したとしましょう。

_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')";)。

オラクルはまさにあなたがそれから要求したことをしました。

1
Balazs Papp