データベース
 Computer >> コンピューター >  >> プログラミング >> データベース

トータルリコール(フラッシュバックデータアーカイブ)

フラッシュバックデータアーカイブは、指定されたデータベースオブジェクトに対するトランザクションデータの変更を自動的に追跡およびアーカイブする機能を提供します。

説明

フラッシュバックデータアーカイブは複数のテーブルスペースで構成され、追跡されたテーブルに対するすべてのトランザクションからの履歴データを保存します。データは内部履歴テーブルに保存されます。元に戻すデータを長期間保存できるため、元に戻すベースのフラッシュバック操作を長期間実行できます。内部履歴テーブルの厳格な保護を維持し、履歴データを短期間維持します。長期間、Flash Data Archiveは、履歴バックアップを復元せずに呼び出すのに役立つオプションです。

実行に必要な権限
  • FLASHBACK ARCHIVE ADMINISTERシステム権限を持つスキーマは、PL/SQLプロシージャの関連付けの解除と再関連付けを実行できます。
  • テーブルの関連付けが解除されると、通常のユーザーは、テーブルに対して必要な権限を持っている場合、DDLおよびDMLステートメントを実行できます。
  • FLASHBACK ARCHIVE ADMINISTERシステム権限には、フラッシュバックデータアーカイブの作成が必要です。
  • フラッシュバックデータアーカイブを作成するには、CREATETABLESPACEシステム権限が必要です
  • 履歴情報が存在するテーブルスペースに十分なクォータがあることを確認してください。

コンテキスト情報はトランザクションデータとともに保存されます。DBMS_FLASHBACK_ARCHIVE.SET_CONTEXT_LEVELプロシージャを使用して、次のパラメータ値のいずれかを渡す必要があります。

  • 標準:USERENVコンテキストの基本的な監査属性のみが保存されます。
  • ALL:SYS_CONTEXT関数を介してユーザーが使用できるすべてのコンテキストが保存されます。
  • なし:コンテキスト情報は保存されません。

この場合、ALLを使用して、USERENVとカスタムコンテキスト値をキャプチャします。

CONN sys @ surya AS SYSDBA

EXEC DBMS_FLASHBACK_ARCHIVE.set_context_level('ALL');

テストと実装

次の例では、表領域レベルでFDAを有効にし、複数の表領域の特定の期間の保持を設定しています。また、保存期間中に削除されたフラッシュバックデータアーカイブからデータを取得します。目的は、FADを使用して履歴データを簡単に取得することです。この機能を有効にしないと、履歴データを取得するためにデータベース全体を復元する必要があります。複雑さを増すのは、大規模なデータベースシステムの場合です。

例:

•テーブルスペースを作成するためのコマンド

SQL> CREATE TABLESPACEFBADATAFILEサイズ500m次の100mで自動拡張;

表スペースが作成されました。

•次のコマンドを実行して、デフォルトのフラッシュバックデータアーカイブ(FDA)を作成します

SQL> CREATE FLASHBACK ARCHIVE DEFAULT FLA1 TABLESPACE FBA QUOTA 500M RETENTION 1 YEAR;

フラッシュバックアーカイブが作成されました。

•デフォルト以外のFDAを作成するための次の手順を完了します

SQL> CREATE FLASHBACK ARCHIVEFLA2TABLESPACEユーザーQUOTA400MRETENTION 6 MONTH;

フラッシュバックアーカイブが作成されました。

•作成されたFDAのリストを取得する

SELECT owner_name、flashback_archive_name、

   flashback_archive#,
   
   retention_in_days,
   
   TO_CHAR(create_time, 'DD-MON-YYYY HH24:MI:SS') AS create_time,
   
   TO_CHAR(last_purge_time, 'DD-MON-YYYY HH24:MI:SS') AS last_purge_time,
   status

FROM dba_flashback_archive

ORDER BY owner_name、flashback_archive_name;

OWNER_NAME FLASHBACK_ARCHIVE_NAME FLASHBACK_ARCHIVE#RETENTION_IN_DAYS CREATE_TIME LAST_PURGE_TIME STATUS

SYS FLA1 1 365 16-DEC-2021 19:28:53 16-DEC-2021 19:28:53 DEFAULTSYS FLA2 2180 16-DEC-2021 19:29:14 16-DEC-2021 19:29:14

•デフォルトのFDAを設定し、詳細を取得する

SQL> ALTER FLASHBACK ARCHIVE FLA1 SET DEFAULT;

フラッシュバックアーカイブが変更されました。

SELECT flashback_archive_name、 flashback_archive#、 tablespace_name、 quote_in_mb FROM dba_flashback_archive_ts ORDER BY flashback_archive_name;

FLASHBACK_ARCHIVE_NAME FLASHBACK_ARCHIVE#TABLESPACE_NAME QUOTA_IN_MB

FLA1 1 FBA 500

FLA22ユーザー400

SQL> SELECT * FROMDBA_FLASHBACK_ARCHIVE_TABLEs WHERE TABLE_NAME ='EMPLOYEES' AND OWNER_NAME ='HR';

TABLE_NAME OWNER_NAME FLASHBACK_ARCHIVE_NAME ARCHIVE_TABLE_NAME STATUS

EMPLOYEES HRFLA1SYS_FBA_HIST_92593有効

次のテストを実行し、それがどのように機能するかを確認します

SQL> ALTER SESSION SET NLS_DATE_FORMAT =‘YYYY / MM / DD HH24:MI:SS’;

セッションが変更されました。

SQL> SQL> SELECT SYSDATE FROM DUA;

SYSDATE

2021/12/16 19:39:31

SQL> SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;

GET_SYSTEM_CHANGE_NUMBER

             1964623
レコードを削除してemployeesテーブルを更新してみましょう。

SQL> DELETE FROM HR.EMPLOYEES WHERE EMPLOYEE_ID =192;

1行が削除されました。

SQL>コミット;

コミットが完了しました。

SQL> SQL> SQL> SQL> UPDATE HR.EMPLOYEES SET SALARY =12000 WHERE EMPLOYEE_ID =168;

コミット;

UPDATE HR.EMPLOYEES SET SALARY =12500 WHERE EMPLOYEE_ID =168;

コミット;

UPDATE HR.EMPLOYEES SET SALARY =12550 WHERE EMPLOYEE_ID =168;

COMMIT;1行が更新されました。

SQL>SQL>コミット完了。

SQL>SQL>1行が更新されました。

SQL>SQL>コミット完了。

SQL>SQL>1行が更新されました。

SQL> SQL>

コミットが完了しました。

  • FDAを使用してデータを比較するための手順に従います

SQL> SELECT EMPLOYEE_ID、FIRST_NAME、LAST_NAME FROM HR.EMPLOYEES AS OF TIMESTAMP TO_TIMESTAMP( '2021/12/16 19:39:31'、'YYYY / MM / DD HH24:MI:SS') マイナス SELECT EMPLOYEE_ID、FIRST_NAME、LAST_NAME FROM HR.EMPLOYEES;

EMPLOYEE_ID FIRST_NAME LAST_NAME

    192 Sarah                Bell

ここでは、FDAから削除された行を確認できます。 VERSION_STARTSCNpseudcoumnsを使用してデータを取得することもできます。

•指定されたSCNのデータ

SQL> COL VERSIONS_STARTTIME FORMAT A40 SELECT VERSIONS_STARTTIME、 VERSIONS_STARTSCN、 FIRST_NAME、 LAST_NAME、 SALARY FROM HR.EMPLOYEES VERSIONS BETWEEN TIMESTAMP TO_TIMESTAMP( '2021/12/16 19:39:31'、'YYYY / MM / DD HH24:MI:SS')AND SYSTIMESTAMP

WHERE

EMPLOYEE_ID=168;

VERSIONS_STARTTIME VERSIONS_STARTSCN FIRST_NAME LAST_NAME SALARY

16-DEC-21 07.40.08.000000000 PM 1964648 Lisa Ozer 1250016-DEC-21 07.40.08.000000000 PM 1964646 Lisa Ozer 12000Lisa Ozer 1150016-DEC-21 07.40.08.000000000 PM 1964650 Lisa Ozer 12550

500の値の差がある給与列で更新ステートメントを実行したため、給与列に同じデータの異なるバージョンの行が表示されます。

DDLステートメントの制限と回避策(録音の進化をキャプチャする)

関連付けを解除/関連付け

より複雑なDDL(アップグレード、表の分割など)の場合、PL / SQLの関連付け解除および関連付け手順を使用して、指定した表のフラッシュバック・データ・アーカイブを一時的に無効にすることができます。 Associateプロシージャは、関連付け後にスキーマの整合性を強制します。ベーステーブルと履歴テーブルのスキーマは同じである必要があります。関連付けの解除と関連付けの手順には、FLASHBACKARCHIVEADMINISTER権限が必要です。

o列の追加、削除、名前の変更、または編集oパーティションの削除または切り捨て

oテーブルの名前を変更または切り捨てます(FBA削除のあるテーブルはエラーORA- 55610で失敗します)

o一部の変更(例:MOVE / SPLIT / CHANGE PARTITIONS)メソッドでは、DBMS_FLASHBACK_ARCHIVEパッケージが必要です。

次の例では、履歴データのFDAテーブルでDDLアクティビティを実行する方法を確認できます。制約を追加するデモテーブルEMPLOYEES_FBAを作成します。

SQL> CREATE TABLE HR.EMPLOYEES_FBA AS SELECT * FROM HR.EMPLOYEES;

テーブルが作成されました。

SQL> ALTER TABLE HR.EMPLOYEES_FBA ADD CONSTRAINT employee_pk PRIMARY KEY(employee_id);

テーブルが変更されました。

デモテーブルでFDAを有効にし、一部のレコードを更新します。

SQL> ALTER TABLE HR.EMPLOYEES_FBA FLASHBACK ARCHIVE;

テーブルが変更されました。

SQL> UPDATE HR.EMPLOYEES_FBA SET SALARY =10000 WHERE EMPLOYEE_ID =203;

1行が更新されました。

COMMIT;

コミットが完了しました。

テーブル制約を無効および有効にする場合、 ORA-55610プロンプトは履歴トラック・データ表を防止します

SQL> ALTER TABLE HR.EMPLOYEES_FBA DISABLE CONSTRAINT EMPLOYEE_PK;

テーブルが変更されました。

SQL> SQL> ALTER TABLE HR.EMPLOYEES_FBA ENABLE CONSTRAINT EMPLOYEE_PK; ALTER TABLE HR.EMPLOYEES_FBA ENABLE CONSTRAINT EMPLOYEE_PK * 1行目のエラー-ORA-55610:履歴追跡テーブルのDDLステートメントが無効です

これらの制限を受けたときに続行する方法

*注:テーブルに制約(主キー、一意キー、外部キー、またはチェック制約)を追加すると、下線が引かれたSYS_FBA_アーカイブテーブルに直接アクセスしない限り、履歴データを自動的に読み取ることができなくなります。**制約管理とテーブルの履歴追跡には十分注意してください*

SQL> SELECT * FROM DBA_FLASHBACK_ARCHIVE_TABLES WHERE TABLE_NAME ='EMPLOYEES_FBA';

TABLE_NAME OWNER_NAME FLASHBACK_ARCHIVE_NAME ARCHIVE_TABLE_NAME STATUS

EMPLOYEES_FBA HRFLA1SYS_FBA_HIST_93946有効

DBMS_FLASHBACK_ARCHIVE.DISASSOCIATE_FBAを使用すると、これを実現できます。

SQL> EXEC DBMS_FLASHBACK_ARCHIVE.DISASSOCIATE_FBA('HR'、'EMPLOYEES_FBA');

PL/SQLプロシージャが正常に完了しました。

ここでもう一度制約を有効にしてみてください

SQL> ALTER TABLE HR.EMPLOYEES_FBA ENABLE CONSTRAINT EMPLOYEE_PK;

テーブルが変更されました。

次に、DBMS_FLASHBACK_ARCHIVE.REASSOCIATE_FBAを使用して制限を再度有効にします

SQL> EXEC DBMS_FLASHBACK_ARCHIVE.REASSOCIATE_FBA('HR'、'EMPLOYEES_FBA');

PL/SQLプロシージャが正常に完了しました。

特定の時間の履歴データを削除します。 SQL> ALTER FLASHBACK ARCHIVE FLA1 PURGE BEFORE TIMESTAMP(SYSTIMESTAMP-INTERVAL '1' DAY);

フラッシュバックアーカイブが変更されました。

FDAを無効にする

SQL> ALTER TABLE HR.EMPLOYEES NO FLASHBACK ARCHIVE;

SQL> ALTER TABLE HR.EMPLOYEES_FBA NO FLASHBACK ARCHIVE;

FDAの削除

SQL> DROP FLASHBACK ARCHIVE FLA1;

結論

フラッシュバックデータアーカイブ機能は、データ履歴を管理および保持するための集中化された統合インターフェイスと、この履歴データを追跡して新しい規制に準拠したり、変化するビジネスニーズに適応したりするデータベース管理のための劇的なソリューションを提供する自動化されたポリシーベースの管理を提供します。

専門家がデータベースの旅をご案内します。

コメントや質問をするには、[フィードバック]タブを使用します。私たちと会話を始めることもできます。


  1. MongoDBのスペース使用量を理解する

    MongoDBを初めて使用する方にとって、MongoDBのスペース使用量は非常に混乱しているように思われるかもしれません。この記事では、MongoDBがスペースを割り当てる方法と、ObjectRocketダッシュボードのスペース使用量情報を解釈して、インスタンスを圧縮する必要がある場合や、インスタンスで使用可能なスペースを増やすためにシャードを追加する必要がある場合を判断する方法について説明します。 まず、単一の5GBシャードで構成される新しいMediumインスタンスから始めましょう。このインスタンスに「ocean」という名前のデータベースのテストデータを入力します。テストデータを追加し、い

  2. Microsoft アカウント データのアーカイブをダウンロードする方法

    Microsoft では、検索、ブラウジング、ロケーション履歴など、Microsoft のサービス全体で作成したすべてのデータのアーカイブをダウンロードできます。これにより、Microsoft のアクティビティをバックアップして保存したり、データを使用して Microsoft サービスの使用方法に関する情報を抽出したりできます。また、別のテクノロジー プロバイダーに移行する際にも役立ちます。 まず、account.microsoft.com の Microsoft アカウント ページにアクセスします。アカウントにログインするように求められる場合があります。パスワードを入力するか、電話で Mi