Oracleは、誤って削除または誤操作されたデータをリカバリします(フラッシュバック・クエリ、フラッシュバック・ドロップ、フラッシュバック・テーブル、フラッシュバック・データベース)。

Oracle は、誤って削除または誤操作されたデータを回復します。
日常業務では、あなたまたは他の人がデータベース内のデータを悪用、削除、または変更することは避けられません。この時点でデータを回復するにはどうすればよいでしょうか?
 
1. フラッシュバック クエリを使用して過去のデータをクエリできます
フラッシュバック クエリの機能は、誤って処理されたデータを修復するために最もよく使用されます。これは、フラッシュバック クエリでデータを回復できるという意味ではないことに注意してください。フラッシュバック クエリ自体は、操作や変更を復元しません。また、どのような操作や変更が行われたかを通知することもできません。実際、フラッシュバック クエリ機能が実際に適用されるとき、それは標準の SELECT の拡張に基づいています。 , ユーザーは指定した時点のデータをクエリできます. テーブル内のレコードは過去を見ることができるのと同じです. リカバリに関しては SELECT の結果がすべて出ています. INSERT の実行方法がわかりませんか?
注: 過去のデータをクエリする フラッシュバック クエリ は、delete およびその他の DML ステートメントに対してのみ有効です。データが truncate によって変更された場合、 フラッシュバック クエリを使用して過去のデータをクエリすることはできません
以下に例を示します。
まず、2 つのデータを含むテーブルを用意しました。
 
この時点で、delete ステートメントを実行してデータを削除します。
 
 
フラッシュバッククエリを使用したクエリ
select * from O_MCHT_KEY_API_BAK as of timestamp to_timestamp('2020-03-13 11:00:57', 'yyyy-mm-dd hh24:mi:ss');

 

 
フラッシュバック クエリで指定された時点は 2020-03-13 11:00:57 であることがわかり、その時点のデータをクエリすることができます。このとき、これら 2 つのデータを再コピーして、それらをこれでデータの復旧は完了です。
注: フラッシュバック クエリは時間に依存するため、あまりにも前のデータは消去されます。
テーブルを削除した場合、それを復元するにはどうすればよいでしょうか?
ここでは、最初にテーブルを削除します。クエリを使用すると、テーブルが存在しなくなっていることがわかります。
 
 
2. フラッシュバック テーブルを適用して、ドロップで操作されたテーブルを復元できます。
現時点では、フラッシュバック クエリを使用してテーブルの元のデータをクエリすることはできませんが、フラッシュバック テーブルを使用することができます。
flashback table O_MCHT_KEY_API_BAK to before drop;

クエリを再度実行すると、データが正常に復元されたことがわかります。

 
 
もちろん、フラッシュバックタブを使用して、削除されたデータを復元することもできます。
 
この時点で、まずデータ行を削除してから、次のコマンドを実行します。
flashback table O_MCHT_KEY_API_BAK to timestamp to_timestamp('2020-03-13 11:00:57', 'yyyy-mm-dd hh24:mi:ss');

この時点でリカバリ エラーが報告され、[72000][8189] ORA-08189: 行移動機能が有効になっていないため、テーブルをフラッシュ バックできません。

ここで必要なのは、対応するテーブルの行移動機能を有効にすることだけです。
//开启表行移动功能
alter table T_TERM_MCHT_INFO enable row movement;

 

 
再度実行する
flashback table O_MCHT_KEY_API_BAK to timestamp to_timestamp('2020-03-13 11:00:57', 'yyyy-mm-dd hh24:mi:ss');

削除されたレコードが正常に復元されたことがわかります。

 
 
3. フラッシュバック テーブルを使用して、ドロップによって操作されたテーブルを復元できます (データが削除され、新しいフィールド テーブル構造が変更されます!!!)。
データを削除した後、列を追加し、フラッシュバック クエリとフラッシュバック テーブルを実行しました。
フラッシュバック クエリとフラッシュバック テーブルの両方をここで復元できますが、新しく追加された列は NULL で埋められます。
二度目の処刑
4. テーブル内のデータが削除されると、そして!フィールドを削除します - - - - テーブル構造が変更されました!
この状況をシミュレートするには、まずテーブルを元の状態に復元し、2 つのレコードを挿入します。
5 分後、テーブル内の列を削除し、フラッシュバック クエリまたはフラッシュバック テーブルに従って復元します。実行後のシステム エラー: [72000][1466] ORA-01466: データを読み取れません - テーブル定義が変更されました
システムによってフラッシュバックされたデータが現在の状態テーブルと一致しないためです。
 
現時点で、以前のデータを復元したい場合は、名前変更方法、つまり、以前のテーブル構造に従って以前のデータを別の新しいテーブルに復元する方法しか使用できません。具体的な操作は次のとおりです。
--将O_MCHT_KEY_API_BAK闪回并将数据转存到另一张表:O_MCHT_KEY_API_BAK_1
flashback table O_MCHT_KEY_API_BAK to before drop rename to O_MCHT_KEY_API_BAK_1;

 

名前を変更した後、元のデータが新しいテーブルに復元されたことがわかります。
 
5. テーブル内のデータが切り捨てられている場合、フラッシュバック データベースを通じてのみリカバリできます。
表が切り捨てられている場合、フラッシュバック問合せとフラッシュバック表は役に立ちません。
フラッシュバック データベースを介して直接復元する
フラッシュバック データベースを使用するには、まず FLASHBACK がオンになっていることを確認する必要があります。つまり、以下のステートメントが YES を返す必要があります。
 
FLASHBACKがONになっている前提で、今回は以下のコマンドを使用して復旧させます。フラッシュバックがオンになっておらず、すでにテーブルを切り捨てている場合は、おめでとうございます。DBA を見つけてください。これは、DBA との関係を強化する絶好の機会です。
flashback database to timestamp to_timestamp('2020-03-13 14:31:26', 'yyyy-mm-dd hh24:mi:ss');

 

 
 
 

おすすめ

転載: blog.csdn.net/qq_23974323/article/details/104841424