フラッシュバック Oracle ドキュメントの読み方

フラッシュバックに関連するドキュメントのほとんどは、『バックアップおよびリカバリ ユーザーズ ガイド』
および『Oracle Database 開発者ガイド』にあります。

基本的な考え方

『バックアップおよびリカバリ・ユーザーズ・ガイド』の1.4 Oracle Flashback Technologyについてを参照してください

Oracle Flashback Technologyの定義:

データ保護の追加レイヤーを提供する一連のOracle Database機能。これらの機能には、Oracle Flashback Query、Oracle Flashback Version Query、Oracle Flashback Transaction Query、Oracle Flashback Transaction、Oracle Flashback Table、Oracle Flashback Drop、および Oracle Flashback Database が含まれます。

フラッシュバック機能を使用して、データの過去の状態を表示し、データベースの一部またはすべてをリワインドできます。一般に、フラッシュバック機能は、適用されるほとんどの状況で、メディア・リカバリよりも効率的で中断も少なくなります。バックアップとリストアは軽量です。

論理フラッシュバック機能

フラッシュバック・データベース以外のフラッシュバック・テクノロジはすべて論理フラッシュバックであり、RMANには依存しません。

いわゆる論理とは、これらの機能が論理レベルで動作するためであり、後述する Flashback Database は物理レベルで動作し、RMAN に依存します。

Oracle Flashback Drop に加えて、論理フラッシュバック機能は、各データベース更新の効果と更新で上書きされた値を記録する UNDO データに依存します。

Oracle Databaseには、次の論理フラッシュバック機能が含まれています:

  • Oracle Flashback Queryを使用すると、ターゲット時刻
    を指定してデータベースに対してクエリを実行し、ターゲット時刻に表示される結果を確認できます。テーブルの更新などの不要な変更から回復するには、エラーが発生する前の目標時間を選択し、クエリを実行して不足している行の内容を取得できます。この機能の使用方法については、『Oracle Database開発者ガイド』を参照してください。

  • Oracle Flashback Version Query を使用すると、指定された期間中に1 つ以上のテーブルに存在したすべての行のすべてのバージョン
    を表示できます行のさまざまなバージョンに関するメタデータを取得することもできます。これには、開始時刻と終了時刻、操作、およびそのバージョンを作成したトランザクションのトランザクション ID が含まれます。この機能を使用して、欠落しているデータ値を回復し、クエリ テーブルへの変更を監査できます。この機能の使用方法については、『Oracle Database開発者ガイド』を参照してください。

  • Oracle Flashback Transaction Queryを使用すると、
    特定の期間内に単一のトランザクションまたはすべてのトランザクションによって行われた変更を表示できます。この機能の使用方法については、『Oracle Database開発者ガイド』を参照してください。

  • Oracle Flashback トランザクショントランザクションを取り消す
    ことができますOracle Databaseはトランザクション間の依存性を判断し、実際に補正トランザクションを作成して不要な変更を元に戻します。データベースは、そのトランザクションとそれに依存する可能性のあるトランザクションがまったく発生しなかったかのように、状態に巻き戻されます。この機能の使用方法については、『Oracle Database開発者ガイド』を参照してください。

  • Oracle Flashback Tableを使用すると、データベースの一部をオフラインにすることなく、表または表のグループを以前に指定した時点にリストアでき
    ます多くの場合、Flashback Table により、より複雑なポイント イン タイム リカバリ操作を実行する必要がなくなります。Flashback Table は、テーブルの復元中に現在のインデックス、トリガー、制約などの関連するプロパティを自動的に維持するため、データベース固有のプロパティを見つけて復元する必要がなくなります。表のフラッシュバックによる表の巻き戻し」では、この機能の使用方法について説明しています。

  • Oracle Flashback Drop
    DROP TABLE ステートメントの効果を元に戻すことができます。Flashback DropによるDROP TABLE操作の巻き戻し」では、この機能の使用方法について説明しています。

フラッシュバック データ アーカイブを使用すると、いくつかの論理フラッシュバック機能を使用して、かなり前のデータにアクセスできますFlashback Data Archive は、1 つ以上の表領域または表領域の一部で構成されます。フラッシュバック データ アーカイブを作成するときは、名前、保存期間、および表領域を指定しますデフォルトのフラッシュバック データ アーカイブを指定することもできます。データベースは、保持期間が終了した翌日に古い履歴データを自動的に消去します。

個々の表に対してフラッシュバック・アーカイブのオンとオフを切り替えることができます。デフォルトでは、各表のフラッシュバック・アーカイブはオフになっています。

フラッシュバック データベース

Flashback Database を使用すると、Oracle データベースを以前の時点にリストアできます。

物理レベルでは、Oracle Flashback Database はDatabase Point-in-Time Recovery (DBPITR)よりも効率的なデータ保護の代替手段を提供します。現在のデータファイルに不要な変更がある場合は、Recovery Manager コマンドFLASHBACK DATABASE を使用して、データファイルを過去の内容にリストアできます。最終製品は DBPITR の結果によく似ていますが、データファイルをバックアップから復元する必要がなく、メディアの復元よりもやり直しが少ないため、通常ははるかに高速です。

フラッシュバック・データベースは、フラッシュバック・ログを使用して、過去のバージョンのデータ・ブロックおよびアーカイブREDOログ内の一部の情報にアクセスします。フラッシュバック・データベースでは、データベースの高速リカバリ領域を構成する必要があります。これは、フラッシュバック・ログはそこにのみ格納できるためです。フラッシュバック ロギングは、デフォルトでは有効になっていません。フラッシュバック・ログに使用される領域は、データベースによって自動的に管理され、フラッシュ・リカバリ領域内の他のファイルが必要とする領域とバランスが取れています。

Oracle Database は、復元ポイント、Flashback Database、Backup and Recovery もサポートしています。復元ポイントは、システム変更番号 (SCN)に対応するエイリアスですデータベースの一部またはすべてを当時の状態に復元する必要があると予想される場合は、いつでも復元ポイントを作成できます。リストア・ポイントが保証されているため、フラッシュバック・データベースを使用してデータベースをリストア・ポイントの時点に戻すことができます。

Rewinding a Database with Flashback Database”了解如何使用FLASHBACK DATABASE命令 执行闪回数据库

备份和恢复指南:5.10.2.1 Considerations When Setting the Size of the Fast Recovery Area

如果您计划启用闪回日志记录,那么闪回日志生成量大约与重做日志生成量相同。 例如,如果您打算将 DB_FLASHBACK_RETENTION_TARGET 设置为 24 小时,并且如果数据库每天生成 20 GB 的重做,那么一般的经验法则是允许 20 GB 到 30 GB 的磁盘空间用于闪回日志。 启用闪回日志记录时,同样的规则适用于保证还原点。 例如,如果数据库每天产生20GB的重做,并且保证还原点保留一天,那么计划分配20到30GB。

几个术语:

The return of the whole database to a prior consistent SCN by the FLASHBACK DATABASE command in RMAN or SQL. A database flashback is different from traditional media recovery because it does not involve the restore of physical files, instead restoring your current data files to past states using saved images of changed data blocks. This feature uses flashback logs and archived redo logs.

指定された過去のターゲット時間、SCN、またはログ シーケンス番号へのデータベース全体のリカバリ。

フラッシュバック データベース操作の実行に使用される Oracle 生成ログ。データベースは、フラッシュバック・ログを高速リカバリ領域にのみ書き込むことができます。フラッシュバック ログは順次書き込まれ、アーカイブされません。ディスクにバックアップすることはできません。

  • 高速リカバリ領域制御ファイルやオンラインREDOログのコピー、アーカイブREDOログ・ファイル、フラッシュバック・ログおよびRMANバックアップなどのリカバリ関連ファイル
    を格納するために使用できるオプションのディスクの場所。Oracle DatabaseおよびRMANは、高速リカバリ領域内のファイルを自動的に管理します。高速リカバリ領域の最大サイズであるディスク クォータを指定できます。以前はフラッシュ リカバリ領域と呼ばれていました。

  • 復元ポイント

復元ポイントの作成時に対応するデータベースの SCN に関連付けられたユーザー定義の名前。復元ポイントは、保証付き復元ポイントまたは通常の復元ポイントにすることができます。

  • システム変更番号 (SCN)ある時点でコミットされたデータベースのバージョンを
    定義するスタンプOracle は、コミットされたすべてのトランザクションに一意の SCNを割り当てます。

  • 保証付きリストア・ポイント
    データベースがOracle Flashback Database操作のフラッシュバック・ログを保持することが保証されているリストア・ポイント。通常の復元ポイントとは異なり、保証付き復元ポイントは制御ファイルから期限切れにならず、明示的に削除する必要があります。保証された復元ポイントは、定義する必要がある高速リカバリ領域の領域を使用します。

フラッシュバックに関連するバックグラウンド プロセス

RVWR和FBDA,都是可选的。前者与Flashback Database相关,后者Flashback Data Archive(也称为Flashback Time Travel)相关。
ここに画像の説明を挿入

详见Database Concepts和Oracle Database 21c Technical Architecture。

使用Flashback技术

参看数据库开发指南的第20章Using Oracle Flashback Technology

Overview of Oracle Flashback Technology

Oracle 闪回技术是一组 Oracle 数据库特性,使您可以查看数据库对象的过去状态或将数据库对象返回到以前的状态,而无需使用时间点介质恢复。

使用闪回功能,您可以:

  • 执行返回过去数据的查询
  • 执行返回显示数据库更改详细历史记录的元数据的查询
  • 将表或行恢复到以前的时间点
  • 自动跟踪和归档交易数据变更
  • 数据库保持在线的情况下回滚事务及其相关事务

Oracle 闪回功能使用Automatic Undo Management (AUM) 系统来获取事务的元数据和历史数据。他们依赖于撤销数据(undo data),这是对单个事务影响的记录。例如,如果用户运行UPDATE语句将薪水从 1000 更改为 1100,则 Oracle 数据库会将值 1000 存储在撤消数据中。

撤消数据是持久的并且在数据库关闭后仍然存在。它会保留由undo_retention(默认15分钟)指定的时间,或者在存在自动撤消管理 (AUM) 的情况下达到调整的撤消保留时间。通过使用闪回功能,您可以使用撤消数据来查询过去的数据或从逻辑损坏中恢复。除了在闪回特性中使用它之外,Oracle 数据库还使用撤销数据来执行这些操作:

  • 回滚活动事务
  • 使用数据库或进程恢复来恢复终止的事务
  • 为 SQL 查询提供读取一致性

注: CREATE TABLE ステートメントを実行した後、少なくとも 15 秒待ってトランザクションをコミットし、Oracle フラッシュバック機能 (特に Oracle フラッシュバック バージョン クエリ) がこれらのトランザクションを確実に反映するようにします。

注意: Oracle Databaseでは、パフォーマンスを向上させるために、versions_starttimeまたはcolumn versions_endtimescn_to_timestamp
VERSIONS問合せ(CTAS問合せを含む)を回避することをお薦めします。

ドキュメント Database Concepts のData Consistencyセクションには、次のように書かれています。

Oracle Databaseでは、常に文レベルの読取り一貫性が強制されます。これにより、単一の問合せが返すデータがコミットされ、単一の時点で一貫性があることが保証されます。トランザクション分離レベルに応じて、この時点は、ステートメントが開かれた時点またはトランザクションが開始された時点です。Oracle Flashback Query 機能を使用すると、この時点を明示的に指定できます

アプリケーション開発に関連するフラッシュバック機能:

  • Flashback Query は、
    SELECT の AS OF 句を介して以前のデータを返します。
  • Flashback Version Query は
    、この機能を使用して、特定の時間間隔のメタデータと履歴データを取得します (たとえば、特定の時間間隔に存在したテーブルのすべての行を表示するなど)。各行バージョンのメタデータには、開始時刻と終了時刻、変更操作の種類、行バージョンを作成したトランザクションの ID が含まれます。Oracle Flashback Versions クエリを作成するには、SELECT ステートメントの VERSIONS BETWEEN 句を使用します。
  • Flashback Transaction Query は、
    この機能を使用して、特定のトランザクションまたは特定の時間間隔内のすべてのトランザクションのメタデータと履歴データを取得します。Oracle Flashback Transaction クエリを実行するには、静的データ ディクショナリ ビュー FLASHBACK_TRANSACTION_QUERY を参照してください。Flashback Version Query は、対象の行のトランザクション ID を提供します。
  • DBMS_FLASHBACK パッケージは、
    この機能を使用して内部の Oracle データベース クロックを以前の時刻に設定し、その時点で最新のデータを確認したり、データベースがオンラインのままである間にトランザクションとその依存トランザクションをロールバックしたりできるようにします。
  • Flashback Transaction は、
    Flashback Transaction を使用して、データベースがオンラインのままである間に、トランザクションとそれに依存するトランザクションをロールバックします。この回復操作では、元に戻すデータを使用して、対応する補正トランザクションを作成および実行し、影響を受けたデータを元の状態に戻します。(フラッシュバック トランザクションは DBMS_FLASHBACK パッケージの一部です)。
  • Flashback Time Travel は、Flashback Time Travel
    を使用して、フラッシュバック アーカイブ対応テーブルへの変更の履歴バージョンを自動的に追跡およびアーカイブし、スナップショットの古すぎるエラーなしでデータベース オブジェクト バージョンへの SQL レベルのアクセスを保証します。

部分データベース管理のフラッシュバック機能は、主にデータの回復に使用されます。通常、これらの機能はデータベース管理者としてのみ使用します。含む:

  • Flashback Table は、
    この関数を使用して、テーブルを前の時点の状態に復元できます。データベースがオンラインのときにテーブルを復元し、指​​定したテーブルへの変更のみを元に戻すことができます。
  • フラッシュバック ドロップは、
    この機能を使用して、削除されたテーブルを回復します。この関数は、DROP TABLE ステートメントの効果を逆にします。
  • フラッシュバック・データベースは、
    この機能を使用して、リカバリ領域を使用してデータベースを以前の時点に迅速にリストアします。データベースのバックアップを復元する必要がないため、これは高速です。

Oracle Flashback Technology用のデータベースの構成

20.2.1 自動UNDO管理のためのデータベースの構成

自動UNDO管理(AUM)用にデータベースを構成するには、次の手順を実行する必要があります:

  • フラッシュバック操作に必要なデータを保持するのに十分な領域を持つUNDO表領域を作成します。
    ユーザーがデータを更新する頻度が高いほど、より多くのスペースが必要になります。データベース管理者は通常、スペース要件を計算します。

  • AUM を有効にします。次のデータベース初期化パラメータを構成します。

    • UNDO_MANAGEMENT (デフォルトは AUM)
    • UNDO_TABLESPACE
    • UNDO_RETENTION

    固定サイズのUNDO表領域の場合、Oracle Databaseはシステムを自動的にチューニングして、最適なUNDO保存時間を提供します。自動的に拡張可能なUNDO表領域の場合、Oracle DatabaseはUNDO_RETENTIONパラメータで指定された最大問合せ期間およびUNDO保持の下限しきい値よりも長くUNDOデータを保持します。
    V$UNDOSTAT を問い合せることができます。TUNED_UNDORETENTION を使用して、現在のUNDO表領域のUNDOを保持する時間を決定します。
    UNDO_RETENTION を設定しても、有効期限が切れていない取り消しデータが破棄されないという保証はありません。システムでより多くの領域が必要な場合、Oracle Databaseは期限切れになっていないUNDOを最近生成されたUNDOデータで上書きできます。

  • UNDO 表領域の RETENTION GUARANTEE 句を指定して、有効期限が切れていない UNDO データが破棄されないようにします。

20.2.2 Oracle Flashback Transaction Query用のデータベースの構成

Oracle Flashback Transaction Query機能用にデータベースを構成するには、ユーザーまたはデータベース管理者が次のことを行う必要があります:

  • Oracle データベースがバージョン 10.0 互換で実行されていることを確認してください。
  • サプリメンタル ロギングを有効にします。
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

有効化プロセスの例:

SQL> select SUPPLEMENTAL_LOG_DATA_MIN MIN, SUPPLEMENTAL_LOG_DATA_PK PK, SUPPLEMENTAL_LOG_DATA_UI UI, SUPPLEMENTAL_LOG_DATA_ALL ALL_LOG from v$database;

MIN      PK  UI  ALL
-------- --- --- ---
NO       NO  NO  NO

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

Database altered.

SQL> select SUPPLEMENTAL_LOG_DATA_MIN MIN, SUPPLEMENTAL_LOG_DATA_PK PK, SUPPLEMENTAL_LOG_DATA_UI UI, SUPPLEMENTAL_LOG_DATA_ALL ALL_LOG from v$database;

MIN      PK  UI  ALL
-------- --- --- ---
YES      NO  NO  NO

20.2.3 フラッシュバック・トランザクション用のデータベースの構成

構成プロセスは次のとおりです。

-- 启用归档
ALTER DATABASE ARCHIVELOG;
-- 打开至少一个archive log
ALTER SYSTEM ARCHIVE LOG CURRENT;
-- 如果之前没有配置,启用最小和主键补充日志记录
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
-- 如果要跟踪外键依赖,请启用外键补充日志记录
-- 如果您有很多外键约束,启用外键补充日志记录可能不值得性能损失。
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (FOREIGN KEY) COLUMNS;

20.2.4 特定のLOB列に対するOracleフラッシュバック操作の有効化

表の特定のLOB列でフラッシュバック操作を有効にするには、ALTER TABLE文をRETENTIONオプションとともに使用します。

LOB列のUNDOデータは非常に大きくなる可能性があるため、フラッシュバック操作に使用するLOB列を定義する必要があります。

20.2.5 必要な権限の付与

ユーザーまたはデータベース管理者は、これらのフラッシュバック機能を使用する必要があるユーザー、ロールまたはアプリケーションに権限を付与する必要があります。つまり、対応するテーブルに対してクエリを実行し、対応する処理を実行する権限です。

Oracle Flashback QueryおよびOracle Flashback Versions Queryの場合

  • クエリ中に特定のオブジェクトへのアクセスを許可するには、それらのオブジェクトに READ または FLASHBACK 権限を付与します。
  • すべてのテーブルに対するクエリを許可するには、FLASHBACK ANY TABLE 権限を付与します。

Oracle フラッシュバック トランザクション クエリの場合

  • SELECT ANY TRANSACTION 権限を付与します。
  • Oracle Flashback Transaction問合せによって返されたUNDO SQLコードの実行を許可するには、特定の表に対するSELECT、UPDATE、DELETEおよびINSERT権限を付与します。

DBMS_FLASHBACK パッケージの場合

  • DBMS_FLASHBACK パッケージの機能へのアクセスを許可するには、DBMS_FLASHBACK に対する EXECUTE 権限を付与します。

フラッシュバックタイムトラベルに

特定のユーザーが表でフラッシュバック・タイムトラベルを有効にしたり、特定のフラッシュバック・アーカイブを使用できるようにするには、フラッシュバック・アーカイブに対する FLASHBACK ARCHIVE オブジェクト権限をそのユーザーに付与します。FLASHBACK ARCHIVE オブジェクト権限を付与するには、FLASHBACK ARCHIVE ADMINISTER システム権限を持つ SYSDBA システムとしてログインする必要があります。

これらのステートメントの実行を許可するには、FLASHBACK ARCHIVE ADMINISTER システム権限を付与します。

  • フラッシュバック アーカイブの作成
  • フラッシュバックアーカイブの変更
  • フラッシュバックアーカイブをドロップ

FLASHBACK ARCHIVE ADMINISTER システム権限を付与するには、SYSDBA としてログインする必要があります。

CREATE/ALTER FLASHBACK ARCHIVE を使用してデフォルトのフラッシュバック アーカイブを作成するには、SYSDBA としてログインする必要があります。

フラッシュバック・アーカイブが有効になっている表のフラッシュバック・アーカイブを無効にするには、SYSDBAとしてログインするか、または FLASHBACK ARCHIVE ADMINISTER システム権限を持っている必要があります。

Oracle フラッシュバック クエリの使用 (SELECT AS OF)

Oracle Flashback Query を使用するには、AS OF 句を指定した SELECT ステートメントを使用します。Oracle Flashback Query は、以前の既存のデータを取得します。クエリは、タイムスタンプまたはシステム変更番号 (SCN) によって過去の時間を明示的に参照します。その時点でコミットされた最新のデータを返します。

Oracle Flashback Query の用途は次のとおりです。

  • 失われたデータを回復するか、誤ってコミットされた変更を元に戻します。
    たとえば、行を誤って削除または更新してコミットした場合、その間違いをすぐに元に戻すことができます。
  • 現在のデータを以前の対応するデータと比較します。
    たとえば、日次レポートを実行して、昨日のデータ変更を表示できます。テーブル データの個々の行を比較したり、一連の行の交点や結合を見つけたりすることができます。
  • 特定の時間における取引データのステータスを確認します。
    たとえば、特定の日の口座残高を確認できます。
  • 选择在特定时间或用户定义的有效时间段内任何时间有效的数据。
    例如,您可以查找具有截至特定时间戳或指定有效时间段内指定开始和结束时间之间的有效员工信息的员工。(有关更多信息,请参阅时间有效性支持。)
  • 通过消除存储某些类型的时间数据的需要来简化应用程序设计。
  • Oracle 闪回查询让您可以直接从数据库中检索过去的数据。
  • 将打包的应用程序(例如报告生成工具)应用于过去的数据。
  • 为应用程序提供自助错误更正,从而使用户能够撤消和更正他们的错误。

SELECT AS OF后面可以接TIMESTAMP或SCN。TIMESTAMP可以是绝对时间或相对时间,例如:

  • 绝对时间:TO_TIMESTAMP(‘2004-04-04 09:30:00’, ‘YYYY-MM-DD HH:MI:SS’)
  • 相对时间:TIMESTAMP (SYSTIMESTAMP - INTERVAL ‘60’ MINUTE)

Oracle 闪回查询指南:

  • 您可以为每个表指定或省略该AS OF子句,并为不同的表指定不同的时间。如果指定的时间早于其创建时间,则查询将返回该表的零行,而不是导致错误。
  • 您可以在与 Oracle 闪回查询相同的会话中使用 AS OF查询子句来执行数据定义语言 (DDL) 操作(例如创建和截断表)或数据操作语言 (DML) 语句(例如 INSERT 和 DELETE)。
  • 要在影响数据库当前状态的 DDL 或 DML 语句中使用 Oracle 闪回查询的结果,请在 INSERT 或 CREATE TABLE AS SELECT 语句中使用 AS OF 子句。
  • 如果一个可能的 3 秒错误(最大值)对应用程序中的 Oracle 闪回查询很重要,请使用 SCN 而不是时间戳。 请参阅 Oracle 闪回技术通用指南
  • ビューを定義する SELECT ステートメントで AS OF 句を使用することにより、過去のデータを参照するビューを作成できます。
  • INTERSECT や MINUS などの自己結合または集合操作で AS OF 句を使用して、2 つの異なる時点でデータを抽出または比較できます。
  • クエリで AS OF 句を使用して、特定の時点で有効なデータを確認できます。

Oracle フラッシュバック バージョン クエリの使用

Oracle Flashback Versions Queryを使用して、特定の時間間隔中に存在した特定の行の異なるバージョンを取得します。COMMIT ステートメントが実行されるたびに行バージョンが作成されます。
注: CREATE TABLE ステートメントを実行した後、トランザクションがコミットされるまで少なくとも 15 秒待って、Oracle フラッシュバック バージョンのクエリがこれらのトランザクションを確実に反映するようにします。

SELECT ステートメントの VERSIONS BETWEEN 句を使用して、Oracle Flashback Versions クエリを指定します。構文は次のとおりです。

-- 其中start和end分别表示要查询的时间间隔的开始和结束的表达式。
VERSIONS BETWEEN { SCN | TIMESTAMP } start AND end

または:

-- 其中 user_valid_time 是指用户指定的有效时间段
-- 如 Temporal Validity Support 中所述。
VERSIONS PERIOD FOR user_valid_time [ BETWEEN TIMESTAMP start AND end ]

Oracle Flashback Versions Queryは、指定された間隔中の任意の時点で存在した行の各バージョンの行を含む表を返します。テーブルの各行には、行のバージョンに関するメタデータ疑似列が含まれており、データベースで特定の変更 (場合によっては誤って) がいつ、どのように発生したかが明らかになります。

次の表では、行バージョンに関するメタデータ疑似列について説明します。VERSIONS_* 疑似列には、トランザクション時のフラッシュバック バージョン クエリ (つまり、BETWEEN TIMESTAMP start AND end 句を含むクエリ) の値のみが含まれます。

疑似列名 説明
VERSIONS_STARTSCN
VERSIONS_STARTTIME
行バージョンが作成されたときの開始システム変更番号 (SCN) または TIMESTAMP。この疑似列は、行バージョンに反映された値がデータに最初に反映された時期を識別します。この疑似列を使用して、Oracle Flashback TableまたはOracle Flashback Queryの過去のターゲット時間を識別します。
この疑似列が NULL の場合、行バージョンは開始前に作成されました。
VERSIONS_ENDSCN
VERSIONS_ENDTIME
行バージョンの有効期限が切れたときの SCN または TIMESTAMP。
この疑似列が NULL の場合、行のバージョンはクエリの時点で最新であったか、または行が DELETE 操作に対応しています。
VERSIONS_XID 行バージョンを作成したトランザクションの識別子。
VERSIONS_OPERATION トランザクションによって実行される操作: I 挿入、D 削除、U 更新。バージョンは、挿入、削除、または更新された行のバージョンです。つまり、INSERT 操作の後の行、DELETE 操作の前の行、または UPDATE 操作の影響を受けた行です。
ユーザーが索引キーを更新する場合、Oracle Flashback Versions QueryはUPDATE操作をDELETEとINSERTの2つの操作として処理し、Dの後にI VERSIONS_OPERATIONが続く2つのバージョン行として表します。

指定された行バージョンは、その時刻 VERSIONS_START* からその時刻 VERSIONS_END* までは有効です。つまり、時刻 t が満たされますVERSIONS_START* <= t < VERSIONS_END*

以下は典型的なクエリです。

SELECT versions_startscn, versions_starttime,
       versions_endscn, versions_endtime,
       versions_xid, versions_operation,
       last_name, salary
  FROM employees
  VERSIONS BETWEEN TIMESTAMP
      TO_TIMESTAMP('2008-12-18 14:00:00', 'YYYY-MM-DD HH24:MI:SS')
  AND TO_TIMESTAMP('2008-12-18 17:00:00', 'YYYY-MM-DD HH24:MI:SS')
  WHERE first_name = 'John';

VERSIONS_XID をOracle Flashback Transaction Query (次の項で説明)とともに使用して、行の変更を元に戻すために必要なSQLや変更を担当するユーザーなど、このトランザクションのメタデータを検索できます。

Flashback Version Query では、IOT (Index Organized Tables) を使用したインデックスのみのアクセスのみが許可されますが、インデックスを使用した高速フル スキャンは許可されません。

Oracle フラッシュバック トランザクション クエリの使用

Oracle Flashback Transaction Queryを使用して、特定のトランザクションまたは特定の時間間隔のすべてのトランザクションのメタデータおよび履歴データを取得します。Oracle Flashback Transaction Queryは、静的データ・ディクショナリ・ビュー FLASHBACK_TRANSACTION_QUERY を問い合せます。その列については、『Oracle Databaseリファレンス』で説明されています。

UNDO_SQL 列には、トランザクションによって実行される DML 操作の論理的な逆である SQL コードが表示されます。多くの場合、このコードを使用して、トランザクション中に実行される論理ステップを逆にすることができます。ただし、UNDO_SQL コードが元のトランザクションのコードの正反対ではない場合があります。たとえば、UNDO_SQL INSERT 操作では、削除された行と同じ ROWID を持つ行をテーブルに再挿入することはできません。

このステートメントは、FLASHBACK_TRANSACTION_QUERY ビューに対して、トランザクション ID、操作、操作の開始と終了の SCN、操作を担当するユーザー、操作ロジックの逆を示す SQL コードなどのトランザクション情報をクエリします。

SELECT xid, operation, start_scn, commit_scn, logon_user, undo_sql
FROM flashback_transaction_query
WHERE xid = HEXTORAW('000200030000002D');

このステートメントは、Oracle Flashback Versions Query をサブクエリとして使用して、各行バージョンを行のデータ変更を担当する LOGON_USER に関連付けます。

SELECT xid, logon_user
FROM flashback_transaction_query
WHERE xid IN (
  SELECT versions_xid FROM employees VERSIONS BETWEEN TIMESTAMP
  TO_TIMESTAMP('2003-07-18 14:00:00', 'YYYY-MM-DD HH24:MI:SS') AND
  TO_TIMESTAMP('2003-07-18 17:00:00', 'YYYY-MM-DD HH24:MI:SS')
);

注: WHERE 句で XID を指定せずに FLASHBACK_TRANSACTION_QUERY をクエリすると、クエリは多くの無関係な行をスキャンし、パフォーマンスが低下します。

Oracle Flashbackバージョン問合せでのOracle Flashbackトランザクション問合せの使用

この例では、データベース管理者は次のことを行います。

DROP TABLE emp;
CREATE TABLE emp (
  empno   NUMBER PRIMARY KEY,
  empname VARCHAR2(16),
  salary  NUMBER
);
INSERT INTO emp (empno, empname, salary) VALUES (111, 'Mike', 555);
COMMIT;

DROP TABLE dept;
CREATE TABLE dept (
  deptno   NUMBER,
  deptname VARCHAR2(32)
);
INSERT INTO dept (deptno, deptname) VALUES (10, 'Accounting');
COMMIT;

これで、従業員用に 1 行、部門用に 1 行になりました。行バージョンに関しては、各テーブルには行の 1 つのバージョンがあります。誤ったトランザクションにより、表 emp から empno 111 が削除されたとします。

UPDATE emp SET salary = salary + 100 WHERE empno = 111;
INSERT INTO dept (deptno, deptname) VALUES (20, 'Finance');
DELETE FROM emp WHERE empno = 111;
COMMIT;

次に、トランザクションは empno 111 を新しい従業員名で emp テーブルに再挿入します。

INSERT INTO emp (empno, empname, salary) VALUES (111, 'Tom', 777);
UPDATE emp SET salary = salary + 100 WHERE empno = 111;
UPDATE emp SET salary = salary + 50 WHERE empno = 111;
COMMIT;

データベース管理者はアプリケーション エラーを検出し、問題を診断する必要があります。データベース管理者は、このクエリを発行して、emp テーブルの empno 111 に対応する行のバージョンを取得します。このクエリは、Oracle Flashback バージョンを使用して疑似列をクエリします。

SELECT versions_xid XID, versions_startscn START_SCN,
  versions_endscn END_SCN, versions_operation OPERATION,
  empname, salary
FROM emp
VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE
WHERE empno = 111;

結果は次のようになります。

XID               START_SCN    END_SCN O EMPNAME              SALARY
---------------- ---------- ---------- - ---------------- ----------
09001100B2200000   10093466            I Tom                     927
030002002B210000   10093459            D Mike                    555
0800120096200000   10093375   10093459 I Mike                    555
 
3 rows selected.

結果の表の行は、時間の降順でソートされます。3 行目は、表の作成時に表に挿入された表 emp の行のバージョンに対応します。2 番目の行は、誤ったトランザクションによって削除された emp の行に対応します。最初の行は、新しい従業員の名前を持つ emp の行の再挿入されたバージョンに対応します。

数据库管理员将事务 030002002B210000 识别为错误事务,并使用 Oracle 闪回事务查询来审计此事务所做的所有更改:

SELECT  xid, start_scn, commit_scn, operation, logon_user, undo_sql
FROM flashback_transaction_query
WHERE xid = HEXTORAW('030002002B210000');

结果类似于:

XID               START_SCN COMMIT_SCN OPERATION LOGON_USER
---------------- ---------- ---------- --------- ------------------------------
UNDO_SQL
--------------------------------------------------------------------------------
 
030002002B210000   10093452   10093459 DELETE    HR
insert into "HR"."EMP"("EMPNO","EMPNAME","SALARY") values ('111','Mike','655');
 
030002002B210000   10093452   10093459 INSERT    HR
delete from "HR"."DEPT" where ROWID = 'AAATjuAAEAAAAJrAAB';
 
030002002B210000   10093452   10093459 UPDATE    HR
update "HR"."EMP" set "SALARY" = '555' where ROWID = 'AAATjsAAEAAAAJ7AAA';
 
030002002B210000   10093452   10093459 BEGIN     HR
 
 
4 rows selected.

以上结果是正序的,实际对应之前的以下事务:

UPDATE emp SET salary = salary + 100 WHERE empno = 111;
INSERT INTO dept (deptno, deptname) VALUES (20, 'Finance');
DELETE FROM emp WHERE empno = 111;
COMMIT;

要查看错误事务和所有后续事务的详细信息,数据库管理员执行以下查询:

COLUMN operation FORMAT A9
COLUMN table_name FORMAT A10
COLUMN table_owner FORMAT A11

SELECT xid, start_scn, commit_scn, operation, table_name, table_owner
FROM flashback_transaction_query
WHERE table_owner = 'HR'
AND start_timestamp >=
  TO_TIMESTAMP ('2002-04-16 11:00:00','YYYY-MM-DD HH:MI:SS');

结果类似于:

XID               START_SCN COMMIT_SCN OPERATION TABLE_NAME TABLE_OWNER
---------------- ---------- ---------- --------- ---------- -----------
02000E0074200000   10093435   10093446 INSERT    DEPT       HR
030002002B210000   10093452   10093459 DELETE    EMP        HR
030002002B210000   10093452   10093459 INSERT    DEPT       HR
030002002B210000   10093452   10093459 UPDATE    EMP        HR
0800120096200000   10093374   10093375 INSERT    EMP        HR
09001100B2200000   10093462   10093466 UPDATE    EMP        HR
09001100B2200000   10093462   10093466 UPDATE    EMP        HR
09001100B2200000   10093462   10093466 INSERT    EMP        HR
 
8 rows selected.

注意:由于前面的查询没有在 WHERE 子句中指定 XID,它会扫描许多不相关的行,从而降低性能。

注意,为了使自行测试的结果完全与以上一样,需要完成Configuring Your Database for Oracle Flashback Technology一节中的设置,同时赋予hr用户相应的权限。否则会有微小的差异。

Using DBMS_FLASHBACK Package

DBMS_FLASHBACK 包提供与 Oracle 闪回查询相同的功能,但 Oracle 闪回查询有时更方便

DBMS_FLASHBACK 包如同时间机器:您可以让时钟倒转,像在较早的时间一样执行正常查询,然后回到现在。 由于您可以使用 DBMS_FLASHBACK 包对过去的数据执行查询,而无需特殊子句(例如 AS OF 或 VERSIONS BETWEEN),因此您可以重用现有的 PL/SQL 代码来更早地查询数据库。

您必须对 DBMS_FLASHBACK 包具有 EXECUTE 权限。

在 PL/SQL 代码中使用 DBMS_FLASHBACK 包:

  1. 通过调用 DBMS_FLASHBACK.ENABLE_AT_TIME 或 DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER 指定过去的时间。
  2. 执行常规查询(即没有特殊闪回功能语法(如 AS OF)的查询)。 不要执行 DDL 或 DML 操作。在指定的过去时间查询数据库。
  3. DBMS_FLASHBACK.DISABLE を呼び出して、現在に戻ります。
    DBMS_FLASHBACK.ENABLE_AT_TIME または DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER を再度呼び出す前に、DBMS_FLASHBACK.DISABLE を呼び出す必要があります。有効/無効のペアをネストすることはできません。

カーソルを使用してクエリ結果を格納するには、DBMS_FLASHBACK.DISABLE を呼び出す前にカーソルを開きます。結果を格納して DBMS_FLASHBACK.DISABLE をコールすると、次のことが可能になります。

過去に保存された結果を使用して INSERT または UPDATE 操作を実行し、現在のデータベースの状態を変更します。

現在のデータと過去のデータを比較します。DBMS_FLASHBACK.DISABLE を呼び出した後、2 番目のカーソルを開きます。最初のカーソルから取得して過去のデータを取得し、2 番目のカーソルから取得して現在のデータを取得します。過去のデータを一時テーブルに格納し、MINUS や UNION などの集合演算子を使用して、過去と現在のデータを比較または結合できます。

いつでも DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER をコールして、現在のシステム変更番号(SCN)を取得できます。DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER は、以前に DBMS_FLASHBACK.ENABLE が呼び出されたかどうかに関係なく、現在の SCN を返します。

フラッシュバック トランザクションの使用

DBMS_FLASHBACK.TRANSACTION_BACKOUT プロシージャは、データベースがオンラインのままである間に、トランザクションとそれに依存するトランザクションをロールバックします。この回復操作では、元に戻すデータを使用して、影響を受けたデータを元の状態に戻す補正トランザクションを作成および実行します。

ロールバックされるトランザクションには、次の制限が適用されます。

  • データベース テーブルの論理構造を変更する DDL 操作を実行することはできません。
  • ラージ オブジェクト (LOB) データ型は使用できません。
    • BFILE
    • BLOB
    • CLOB
    • NCLOB
  • 他们不能使用 LogMiner 不支持的功能。
    LogMiner 支持的功能取决于正在回滚事务的数据库的 COMPATIBLE 初始化参数的值。 默认值是最新主要版本的版本号。
    Flashback Transaction 继承了 LogMiner 对 SQL 数据类型的支持。 因此,如果 LogMiner 由于事务中不支持的 SQL 数据类型而失败,闪回事务也会失败。
    某些数据类型虽然受 LogMiner 支持,但不会生成撤消信息作为修改此类列的操作的一部分。 因此,闪回事务不支持包含这些数据类型的表。 这些包括具有 BLOB、CLOB 和 XML 类型的表。

事务依赖性是指在闪回事务的上下文中,事务 2 可以通过以下任何方式依赖于事务 1:

  • 写写依赖
    事务 1 更改了表的一行,随后事务 2 更改了同一行。
  • 主键依赖
    一个表在 c 列上有一个主键约束。 在表的一行中,c 列的值为 v。事务 1 删除了该行,随后事务 2 将一行插入到同一个表中,并将值 v 赋给 c 列。
  • 外键依赖
    在表b中,列b1对表a的列a1有一个外键约束。 事务 1 更改了 a1 中的值,随后事务 2 更改了 b1 中的值。

TRANSACTION_BACKOUT 过程的参数是:

  • 要回退的事务数
  • 要撤销的事务列表,按名称或 XID 标识
  • 时间hint,如果您通过名称识别交易
  • 指定早于任何事务开始的时间。
  • 下表中的Backout选项
选项 描述
CASCADE 以后序方式撤销指定的事务和所有相关事务(即,先撤销父事务,然后撤销子事务)。
没有CASCADE,如果没有指定任何依赖事务,就会出错。
NOCASCADE デフォルト。依存トランザクションを持たない指定されたトランザクションをキャンセルします。最初の関連トランザクションはエラーになり、*_FLASHBACK_TXN_REPORT に表示されました。
NOCASCADE_FORCE 関連するトランザクションを無視して、指定されたトランザクションをロールバックします。サーバーは、コミット時間とは逆の順序で、指定されたトランザクションの取り消し SQL ステートメントを実行します。
制約が壊れておらず、結果に満足している場合は、変更をコミットできます。そうでない場合は、ロールバックできます。
NONCONFLICT_ONLY 指定されたトランザクションの競合しない行への変更をキャンセルします。データベースは一貫性を保ちますが、トランザクションの原子性は失われます。

TRANSACTION_BACKOUT は、トランザクションの依存関係を分析し、DML 操作を実行し、レポートを生成します。TRANSACTION_BACKOUT は、トランザクションの取り消しの一部として実行する DML 操作をコミットしませんが、行とテーブルに必要なすべてのロックを正しい形式で保持し、他の依存関係がシステムに入るのを防ぎます。トランザクションの取り消しを永続的にするには、トランザクションを明示的にコミットする必要があります。

TRANSACTION_BACKOUT によって生成されたレポートを表示するには、静的データ ディクショナリ ビュー *_FLASHBACK_TXN_STATE および *_FLASHBACK_TXN_REPORT をクエリします。

静的データ ディクショナリ ビュー *_FLASHBACK_TXN_STATE は、トランザクションがアクティブであるか中止されているかを示します。このビューに取引が表示された場合、その取引はキャンセルされます。

*_FLASHBACK_TXN_STATEトランザクションを補うためにアトミックに維持されます。補正トランザクションが取り消されると、それが行ったすべての変更も取り消されます。*_FLASHBACK_TXN_STATE はこれを反映しています。たとえば、補正トランザクション ct がトランザクション t1 と t2 を元に戻す場合、t1 と t2 は *_FLASHBACK_TXN_STATE に表示されます。後で ct 自体が取り消されると、t1 と t2 の効果が復元され、t1 と t2 は *_FLASHBACK_TXN_STATE から消えます。

静的データ ディクショナリ ビュー *_FLASHBACK_TXN_REPORT は、ロールバックされた各トランザクションの詳細なレポートを提供します。

フラッシュバック タイム トラベルの使用

可以认为Flashback Time Travel和Flashback Data Archive是等同的,后者前者是基于后者的技术

闪回时间旅行提供了在表的生命周期内跟踪和存储事务更改的能力。

闪回时间旅行对于遵守记录阶段政策和审计报告很有用。

闪回存档(Flashback Archive)由一个或多个表空间或其中的一部分组成。 您可以有多个闪回存档。 如果您以 SYSDBA 身份登录,则可以为系统指定默认的 Fashback Archive。 闪回存档配置了保留时间。 闪回存档中存档的数据将保留创建闪回存档时指定的保留时间。

为特定表选择闪回存档时,请考虑表的数据保留要求以及您拥有 FLASHBACK ARCHIVE 对象特权的闪回存档的保留时间。

默认情况下,不为任何表启用闪回存档。 考虑为用户上下文跟踪和数据库加固启用闪回存档。

  • 用户上下文跟踪。 用于跟踪事务的元数据信息可以包括(如果启用该功能)用户上下文,这使得更容易确定哪个用户对表进行了哪些更改。
    要设置用户上下文级别(确定要保存多少用户上下文),请使用 DBMS_FLASHBACK_ARCHIVE.SET_CONTEXT_LEVEL 过程。 要访问上下文信息,请使用 DBMS_FLASHBACK_ARCHIVE.GET_SYS_CONTEXT 函数。
  • データベースの強化アプリケーションで一連のテーブルを関連付けて、1 つのコマンドですべてのテーブルでフラッシュバック アーカイブを有効にすることができます。また、データベースの強化により、1 つのコマンドですべてのテーブルをロックできるため、後でロックが解除されるまで、それらのテーブルに対する DML を防止できます。Database Hardening は、Flashback Time Travel を使用して、アプリケーションのセキュリティが重要なテーブルを追跡および保護することを容易にするように設計されています。
    データベースを強化するためにアプリケーションを登録するには、DBMS_FLASHBACK_ARCHIVE.REGISTER_APPLICATIONプロシージャを使用します。これについては、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

また、強制的なデジタル シュレッディング、履歴データへのアクセス、選択的なデータ リカバリ、監査など、さまざまなシナリオで Flashback Time Travel を使用することもできます。

回想タイムトラベルの制限

  • LONG データ型またはネストした表の列を持つ表では、フラッシュバック・アーカイブを有効にできません。
  • ネストした表、一時表、外部表、マテリアライズド・ビュー、拡張問合せ(AQ)表、混合パーティション表または表以外のオブジェクトでは、フラッシュバック・アーカイブを有効にできません。
  • フラッシュバック・アーカイブは、パーティションまたはサブパーティションの移動、分割、マージまたはマージ、表の移動、または LONG 列のLOB列への変換を行うDDL文をサポートしていません。
  • フラッシュバック アーカイブが有効になっているテーブルで制約 (外部キー制約を含む) を追加または有効にすると、ORA-55610 で失敗します。フラッシュバック・アーカイブが有効になっている表に対する制約(外部キー制約を含む)の削除または無効化のサポート。
  • 表でフラッシュバック・アーカイブを有効にした後、表にデータを挿入する前に少なくとも20秒待機し、表でフラッシュバック問合せを使用する前に最大5分待機することをお薦めします。
  • フラッシュバック・アーカイブの実表を削除するには、実表を削除する前に、実表でフラッシュバック・アーカイブを無効にする必要があります。フラッシュバック アーカイブを無効にすると履歴データが削除され、フラッシュバック アーカイブの関連付けを解除すると履歴データが保持されます。一方、実表の切り捨てはサポートされており、履歴データはフラッシュバック・アーカイブで引き続き使用できます。
  • 表でフラッシュバック・アーカイブが有効になっていて、自動UNDO管理(AUM)が無効になっている場合、表を変更しようとするとORA-55614エラーが発生します。
  • 表がフラッシュバック・タイムトラベルの予約語STARTSCN、ENDSCN、RID、XID、OP、OPERATIONのいずれかを列名として使用している場合、フラッシュバック・アーカイブを有効にできません。

20.9.1 フラッシュバック・アーカイブが有効な表でのDDL文

フラッシュバック・アーカイブは、次のDDL文のみをサポートしています:

  • 次のいずれかを実行する ALTER TABLE ステートメント:
    • 列の追加、削除、名前変更、または変更
    • 制約を追加、削除、または名前変更する
    • パーティションまたはサブパーティション操作の削除または切り捨て
  • テーブルステートメントを切り捨てます
  • テーブルの名前を変更する RENAME ステートメント

フラッシュバック・アーカイブは、パーティションまたはサブパーティションの移動、分割、マージまたはマージ、表の移動、または LONG 列のLOB列への変換を行うDDL文をサポートしていません。

たとえば、フラッシュバック・アーカイブが有効な表で次のDDL文を使用すると、エラーORA-55610が発生します:

  • INCLUDING DATA 句の有無にかかわらず、UPGRADE TABLE 句を含む ALTER TABLE ステートメント
  • パーティションまたはサブパーティション操作の移動または交換のための ALTER TABLE ステートメント
  • DROP TABLE ステートメント

フラッシュバック・アーカイブが有効な表でサポートされていないDDL文を使用する必要がある場合は、 DBMS_FLASHBACK_ARCHIVE.DISASSOCIATE_FBA プロシージャを使用して、実表とそのフラッシュバック・アーカイブの関連付けを解除します後でフラッシュバック・アーカイブを実表に再度関連付けるには、DBMS_FLASHBACK_ARCHIVE.REASSOCIATE_FBAプロシージャを使用します。さらに、フラッシュバック・アーカイブが有効になっている表を削除するには、最初に ALTER TABLE ... NO FLASHBACK ARCHIVE 句を使用して表のフラッシュバック・アーカイブを無効にする必要があります。

20.9.2 フラッシュバック・アーカイブの作成

CREATE FLASHBACK ARCHIVE 文を使用して、フラッシュバック アーカイブを作成できます。

CREATE FLASHBACK ARCHIVE ステートメントを使用してフラッシュバック アーカイブを作成し、次を指定します。

  • フラッシュバック アーカイブの名前
  • フラッシュバック・アーカイブの最初の表領域の名前
  • (オプション)最初の表領域でフラッシュバック・アーカイブが使用できる領域の最大量。
    デフォルトは無制限です。最初の表領域の領域割当ても無制限でないかぎり、この値を指定する必要があります。そうしないと、ORA-55621エラーが発生します。
  • 保存期間(表のフラッシュバック・アーカイブ・データの保存が保証される日数)
  • (オプション)フラッシュバック・アーカイブで維持される履歴表のデータ・ストレージを最適化するかどうかを指定するには、[NO] OPTIMIZE DATA を使用します。
    デフォルトでは、データを最適化しません。

SYSDBA としてログインしている場合は、これがシステムのデフォルトのフラッシュバック アーカイブであることも指定できます。このオプションを省略した場合でも、後でこのフラッシュバック アーカイブをデフォルトにすることができます。

フラッシュバック・アーカイブを使用する必要があるすべてのユーザーが、フラッシュバック・アーカイブ表領域で無制限の割当てを持つことをお薦めしますが、そうでない場合は、これらのユーザーに表領域で十分な割当てを付与する必要があります。

例:

CREATE FLASHBACK ARCHIVE DEFAULT fla1 TABLESPACE tbs1
  QUOTA 10G RETENTION 1 YEAR;
CREATE FLASHBACK ARCHIVE fla2 TABLESPACE tbs2 RETENTION 2 YEAR;

20.9.3 フラッシュバック・アーカイブの変更

ALTER FLASHBACK ARCHIVE ステートメントを使用すると、次のことができます。

  • フラッシュバック アーカイブの保存期間の変更
  • 一部またはすべてのデータを消去する
  • テーブルスペースを追加、変更、削除します。注: フラッシュバック アーカイブのすべてのテーブルスペースを削除すると、エラーが発生します。

SYSDBA としてログインしている場合は、ALTER FLASHBACK ARCHIVE 文を使用して、特定のファイルをシステムのデフォルトのフラッシュバック アーカイブにすることもできます。

例:

ALTER FLASHBACK ARCHIVE fla1 SET DEFAULT;
ALTER FLASHBACK ARCHIVE fla1 ADD TABLESPACE tbs3 QUOTA 5G;
ALTER FLASHBACK ARCHIVE fla1 ADD TABLESPACE tbs4;
ALTER FLASHBACK ARCHIVE fla1 MODIFY TABLESPACE tbs3 QUOTA 20G;
ALTER FLASHBACK ARCHIVE fla1 MODIFY TABLESPACE tbs1;
ALTER FLASHBACK ARCHIVE fla1 MODIFY RETENTION 2 YEAR;
-- 表空间 tbs2 未被删除。
ALTER FLASHBACK ARCHIVE fla1 REMOVE TABLESPACE tbs2;
ALTER FLASHBACK ARCHIVE fla1
  PURGE BEFORE TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' DAY);
ALTER FLASHBACK ARCHIVE fla1 PURGE BEFORE SCN 728969;

20.9.4 フラッシュバック・アーカイブの削除

DROP FLASHBACK ARCHIVE 文を使用して、フラッシュバック アーカイブを削除できます。

フラッシュバック アーカイブを削除すると、履歴データは削除されますが、表領域は削除されません。

例:

DROP FLASHBACK ARCHIVE fla1;

20.9.5 デフォルトのフラッシュバック・アーカイブの指定

CREATE または ALTER FLASHBACK ARCHIVE 文を使用して、デフォルトのフラッシュバック アーカイブを指定できます。

システムのデフォルトのフラッシュバック アーカイブは、独自のデフォルトのフラッシュバック アーカイブを持たないすべてのユーザーのデフォルトのフラッシュバック アーカイブです。

デフォルトでは、システムにはデフォルトのフラッシュバック アーカイブがありません。SYSDBAとしてログインしている場合、次のいずれかの方法でデフォルトのフラッシュバック アーカイブを指定できます。

  • ALTER FLASHBACK ARCHIVE 文の SET DEFAULT 句に、既存のフラッシュバック アーカイブの名前を指定します。例えば:
ALTER FLASHBACK ARCHIVE fla1 SET DEFAULT;
  • フラッシュバック アーカイブを作成するときは、CREATE FLASHBACK ARCHIVE ステートメントに DEFAULT を含めます。例えば:
CREATE FLASHBACK ARCHIVE DEFAULT fla2 TABLESPACE tbs1
  QUOTA 10G RETENTION 1 YEAR;

20.9.6 フラッシュバック・アーカイブの有効化と無効化

デフォルトでは、フラッシュバック アーカイブはすべてのテーブルで無効になっています。表に使用されるフラッシュバック・アーカイブに対する FLASHBACK ARCHIVE オブジェクト権限を持っている場合、その表のフラッシュバック・アーカイブを有効にできます。

テーブルのフラッシュバック アーカイブを有効にするには、CREATE TABLE または ALTER TABLE ステートメントに FLASHBACK ARCHIVE 句を含めます。FLASHBACK ARCHIVE 句では、表の履歴データを格納するフラッシュバック アーカイブを指定できます。デフォルトは、システムのデフォルトのフラッシュバック アーカイブです。存在しないフラッシュバックアーカイブを指定すると、エラーが発生します。

表でフラッシュバック・アーカイブが有効化されている場合に、別のフラッシュバック・アーカイブを使用して再度有効化しようとすると、エラーが発生します。

テーブルに対してフラッシュバック アーカイブを有効にすると、FLASHBACK ARCHIVE ADMINISTER システム権限を持っているか、SYSDBA としてログインしている場合にのみ無効にできます。テーブルのフラッシュバック アーカイブを無効にするには、ALTER TABLE ステートメントで NO FLASHBACK ARCHIVE を指定します。(これがデフォルトであるため、CREATE TABLE ステートメントで NO FLASHBACK ARCHIVE を指定する必要はありません。)

例:

CREATE TABLE employee (EMPNO NUMBER(4) NOT NULL, ENAME VARCHAR2(10),
  JOB VARCHAR2(9), MGR NUMBER(4)) FLASHBACK ARCHIVE;
CREATE TABLE employee (EMPNO NUMBER(4) NOT NULL, ENAME VARCHAR2(10),
  JOB VARCHAR2(9), MGR NUMBER(4)) FLASHBACK ARCHIVE fla1;
ALTER TABLE employee FLASHBACK ARCHIVE;
ALTER TABLE employee FLASHBACK ARCHIVE fla1;
ALTER TABLE employee NO FLASHBACK ARCHIVE;

20.9.7 フラッシュバック・アーカイブ・データの表示

静的データ・ディクショナリ・ビューで、フラッシュバック・アーカイブ・ファイルに関する情報を表示できます。

意見 説明
*_FLASHBACK_ARCHIVE フラッシュバック アーカイブ ファイルに関する情報の表示
*_FLASHBACK_ARCHIVE_TS フラッシュバック・アーカイブ・ファイルの表領域を表示
*_FLASHBACK_ARCHIVE_TABLES フラッシュバック・アーカイブが有効になっている表に関する情報の表示

20.9.8 データベース間でのフラッシュバック・アーカイブ・データのトランスポート

FLASHBACK_ARCHIVE_MIGRATEパッケージおよびOracleトランスポータブル表領域機能を使用して、フラッシュバック・アーカイブの実表をその履歴とともに別のデータベースにエクスポートおよびインポートできます。

DBMS_FLASHBACK_ARCHIVE_MIGRATE このパッケージが存在する任意のバージョンのデータベースから、フラッシュバック タイムトラベルをサポートする任意のバージョンのデータベースに、フラッシュバック アーカイブ対応のテーブルを移行できます。

20.9.9 フラッシュバック時間旅行のシナリオ

シナリオ: フラッシュバック タイム トラベルを使用してデジタル シュレッディングを実装する
あなたの会社は、10 年後に Taxes テーブルへの履歴データの変更を "シュレッド" (削除) したいと考えています。Taxes テーブルのフラッシュバック アーカイブを作成したときに、10 年の保存期間を指定しました。

CREATE FLASHBACK ARCHIVE taxes_archive TABLESPACE tbs1 RETENTION 10 YEAR;

税金トランザクションの履歴データが 10 年以上経過すると、消去されます。(納税申告書自体、および 10 年未満の取引履歴データは削除されません。)

シナリオ: フラッシュバック タイム トラベルを使用して履歴データにアクセスする
テーブル inventory から年の初めにすべてのアイテムの在庫を取得し、終了時にテーブル stock_data からポートフォリオの各シンボルの在庫を取得できるようにする必要があります。年中特定日営業価格。

CREATE FLASHBACK ARCHIVE DEFAULT fla1 TABLESPACE tbs1
  QUOTA 10G RETENTION 5 YEAR;
ALTER TABLE inventory FLASHBACK ARCHIVE;
ALTER TABLE stock_data FLASHBACK ARCHIVE;
-- 要检索 2007 年初所有项目的库存
SELECT product_number, product_name, count FROM inventory AS OF
  TIMESTAMP TO_TIMESTAMP ('2007-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS');
-- 要在 2007 年 7 月 23 日收盘时检索投资组合中每个代码的股票价格
SELECT symbol, stock_price FROM stock_data AS OF
  TIMESTAMP TO_TIMESTAMP ('2007-07-23 16:00:00', 'YYYY-MM-DD HH24:MI:SS')
  WHERE symbol IN my_portfolio;

シナリオ: Flashback Time Travel を使用したレポートの生成
ユーザーが、過去 5 年間に保存されたデータのテーブルの Investments からレポートを生成できるようにします。
先ほどのシーンと何ら変わりはないようです。

CREATE FLASHBACK ARCHIVE DEFAULT fla2 TABLESPACE tbs1
  QUOTA 20G RETENTION 5 YEAR;
ALTER TABLE investments FLASHBACK ARCHIVE;
SELECT * FROM investments AS OF
  TIMESTAMP TO_TIMESTAMP ('2006-12-31 16:00:00', 'YYYY-MM-DD HH24:MI:SS')
  WHERE name = 'LISA';

シナリオ: Flashback Time Travel を使用した監査
健康保険会社は診療所を監査する必要があります。

CREATE FLASHBACK ARCHIVE DEFAULT fla4 TABLESPACE tbs1
  QUOTA 100G RETENTION 10 YEAR;
ALTER TABLE Billings FLASHBACK ARCHIVE;
-- 2007 年 5 月 1 日,客户在某些诊断和测试中被收取了错误的费用。 
-- 要查看截至 2007 年 5 月 1 日的记录,公司使用以下查询:
SELECT date_billed, amount_billed, patient_name, claim_Id,
  test_costs, diagnosis FROM Billings AS OF TIMESTAMP
  TO_TIMESTAMP('2007-05-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS');

シナリオ: フラッシュバック タイム トラベルを使用したデータの復元
エンド ユーザーは、データベース内で以前にコミットされたエラーのあるトランザクションから回復します。エラーのあるトランザクションの元に戻すデータは使用できなくなりますが、必要な履歴情報はフラッシュバック アーカイブで使用できるため、フラッシュバック クエリはシームレスに機能します。

リサは、製品がよく売れているソフトウェア開発グループを管理しています。2007 年 11 月 3 日、彼女は 2 年以上の実務経験を持つ 3 レベルの従業員全員に 10% の昇給と 4 レベルへの昇進を与えることを決定しました。Lisa は、彼女の人事担当者である Bob に変更を依頼します。

HR Web アプリケーションを使用して、Bob は従業員テーブルを更新し、Lisa の第 3 レベルの従業員に 10% の昇給と第 4 レベルへの昇進を与えます。その後、Bob はその日の仕事から帰宅しましたが、契約で 2 年間の実務経験要件を無視していることに気づきませんでした。数日後、リサはボブが更新を完了したかどうかを確認し、グループの全員が昇給したことを確認しました! 彼女はすぐにボブに電話して、間違いを正すように頼んだ。

最初、Bob は、バックアップを取らずに従業員テーブルを以前の状態に復元する方法はないと考えました。次に、従業員表でフラッシュバック・アーカイブが有効になっていることを思い出しました。

まず、彼は、彼の後に従業員テーブルを変更したトランザクションが他にないことを確認します。トランザクション クエリのコミット タイムスタンプは、2 日前のボブのトランザクションに対応しています。

次に、ボブはこれらのステートメントを使用して、employee テーブルを誤って変更する前の状態に復元します。

DELETE EMPLOYEE WHERE MANAGER = 'LISA JOHNSON';
INSERT INTO EMPLOYEE
  SELECT * FROM EMPLOYEE
    AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '2' DAY)
      WHERE MANAGER = 'LISA JOHNSON';

Oracle Flashbackテクノロジの一般的なガイドライン

フラッシュバック手法を使用する場合は、次のベスト プラクティスを考慮してください。

  • 表でフラッシュバック・アーカイブを有効にする前に、表でフラッシュバック問合せを発行しないでください。はい、テーブルで DML 操作を実行する前に、フラッシュバック アーカイブを有効にします。
-- 在此示例中,操作序列将返回 a=1 的行。 
-- 这可能看起来像一个不正确的结果,为避免这种情况,您必须在插入任何行之前启用闪回存档。
CREATE TABLE foo (a NUMBER);
VAR scn NUMBER;
BEGIN 
   SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMEBR INTO :scn FROM DUAL;
END;
INSERT INTO foo VALUES (1);
COMMIT;
ALTER TABLE foo FLASHBACK ARCHIVE;
UPDATE foo SET a=2 WHERE a=1;
COMMIT;
SELECT * FROM foo AS OF SCN :scn;
  • DBMS_FLASHBACK.ENABLE および DBMS_FLASHBACK.DISABLE プロシージャは、制御しないSQLコードに対して使用するか、複数の連続する問合せで同じ過去の時間を使用する場合に使用します。
  • 便宜上、作成するSQLコードにはOracle Flashback Query、Oracle Flashback Version QueryまたはOracle Flashback Transaction Queryを使用してください。たとえば、Oracle Flashback Query は柔軟性が高く、単一のクエリで結果を比較および保存できます。
  • 後でフラッシュバック機能を使用するために SCN を取得するには、DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER を使用します。
  • クエリで使用するために過去の時間を計算または取得するには、関数の戻り値をタイムスタンプまたは SCN パラメータとして使用します。たとえば、SYSTIMESTAMP 関数の値に INTERVAL 値を加算または減算します。
  • Oracle Flashback Query、Oracle Flashback Version Query、およびOracle Flashback Transaction Queryをローカルまたはリモートで使用します。リモート Oracle フラッシュバック クエリの例は次のとおりです。
SELECT * FROM employees@some_remote_host AS OF 
    TIMESTAMP (SYSTIMESTAMP - INTERVAL '60' MINUTE);
  • データベースの一貫性を確保するには、過去のデータをクエリする前に COMMIT または ROLLBACK 操作を実行します。
  • すべてのフラッシュバック処理では、問合せ時に有効な設定ではなく、各国語やキャラクタ・セットなどの現在のセッション設定が使用されることに注意してください。
  • テーブルの構造を変更する DDL (列の削除/変更、テーブルの移動、パーティションの削除、テーブル/パーティションの切り捨て、制約の追加など) は、テーブルの既存の取り消しデータを無効にすることに注意してくださいそのような DDL が実行される前のある時点からデータを取得しようとすると、エラー ORA-01466 が発生します。テーブルのストレージ属性 (PCTFREE、INITRANS、MAXTRANS など) を変更する DDL 操作は、UNDO データを無効にしません。
  • 正確な時刻に過去のデータをクエリするには、SCN を使用します。タイムスタンプを使用する場合、実際のクエリ時間は、指定した時間より最大 3 秒早くなる場合があります。Oracle DatabaseはSCNを内部で使用し、3秒単位でタイムスタンプにマップします。
    たとえば、SCN 値 1000 と 1005 が、それぞれ午前 8:41 と午前 8:46 のタイムスタンプにマップされているとします。8:41:00 から 8:45:59 AM までのクエリは SCN 1000 にマップされ、8:46 AM の Oracle Flashback Query は SCN 1005 にマップされます。したがって、DDL操作(表の作成など)より後の時間を指定すると、Oracle DatabaseはDDL操作の直前にSCNを使用し、エラーORA-01466が発生する場合があります。
  • 動的パフォーマンス (V$) ビューから過去のデータを取得することはできません。このようなビューに対するクエリは、現在のデータを返します。
  • *_TABLES などの静的データ ディクショナリ ビューで、過去のデータに対してクエリを実行できます。
    注: 静的データ ディクショナリ ビューを使用して過去のデータを取得できない場合は、対応するベース テーブルをクエリしてデータを取得できます。ただし、実表は正規化されており、ほとんどのデータは暗号化された形式で格納されているため、実表を直接使用することはお薦めしません。
  • 您可以通过在创建或更改闪回存档历史表时指定 OPTIMIZE DATA 来为闪回存档维护的历史表启用数据存储优化。
    OPTIMIZE DATA 通过使用以下任何功能优化历史表中的数据存储,默认是不优化历史表中数据的存储。:
    • Advanced Row Compression
    • Advanced LOB Compression
    • Advanced LOB Deduplication
    • Segment-level compression tiering
    • Row-level compression tiering
  • 创建 VPD 策略后,请考虑为闪回存档历史表创建等效策略。

Performance Guidelines for Oracle Flashback Technology

  • 使用 DBMS_STATS 包为 Oracle 闪回查询中涉及的所有表生成统计信息。 保持最新的统计数据。 Oracle 闪回查询使用基于成本的优化器,它依赖于这些统计信息。

  • 最小化必须访问的撤消数据量。 使用查询选择使用索引的过去数据的小集合,而不是扫描整个表。 如果必须扫描全表,请向查询添加并行提示。
    I/O 中的性能成本是在不在缓冲区高速缓存中的数据和撤消块中进行分页的成本。 CPU 使用的性能成本是将撤消信息应用于受影响的数据块的成本。 在对最近的更改进行操作时,闪回操作受 CPU 限制。
    Oracle 建议您有足够的缓冲区缓存,以便归档程序的版本查询在缓冲区缓存中找到撤消数据。 缓冲区高速缓存访问明显快于磁盘访问。

  • 如果在跟踪表上执行非常大的事务(例如影响超过 100 万行),请将大池大小设置得足够高(至少 1 GB)以使并行查询不必从 SGA 分配新块。

  • Oracle Flashback Versions クエリでは、インデックス構造が使用されます。Oracle Databaseは、索引変更およびデータ変更のUNDOデータを保持します。インデックス ルックアップに基づく Oracle Flashback Edition クエリのパフォーマンスは、他の方法で必要となる完全なテーブル スキャンよりも桁違いに高速です。

  • Oracle Flashback Transaction Query では、xid 列の型は RAW(8) です。xid 列に基づいて作成されたインデックスを利用するには、HEXTORAW 変換関数 HEXTORAW(xid) を使用します。

  • マテリアライズド ビューに対する Oracle Flashback Query は、クエリ リライトの最適化を利用しません。

Oracle Flashback Technologyのマルチテナント・コンテナ・データベースの制限事項

次のOracle Flashback Technology機能は、マルチテナント・コンテナ・データベース(CDB)では使用できません:

  • 共有UNDOモードのCDBは、フラッシュバック トランザクション クエリをサポートしていません。ネイティブの元に戻すモードでのみサポートされています。
  • CDB は、フラッシュバック トランザクションのロールバックをサポートしていません。

フラッシュバック データベースと復元ポイントの使用

詳細については、『データベース バックアップおよびリカバリ ガイド:フラッシュバック データベースおよび復元ポイントの使用』の第 7 章を​​参照してください。

RMAN を使用して、全体的なデータ保護戦略の一部として復元ポイントを構成、監視、および維持します。

この章では、フラッシュバック データベースと復元ポイントについて説明します。全体的なデータ保護戦略の一部として、これらの機能の構成、監視、および保守について説明します。

注意: フラッシュバック・データベースと通常および保証付きのリストア・ポイントを使用したリカバリ・シナリオの詳細は、第18章: フラッシュバックおよびデータベースのポイント・イン・タイム・リカバリの実行を参照してください。

7.1 フラッシュバック・データベース、リストア・ポイントおよび保証されたリストア・ポイントの概要

Oracle Flashback DatabaseおよびRecovery Pointsは関連するデータ保護機能であり、指定された時間枠内で論理データの破損またはユーザー・エラーが原因で発生した問題を修正するために、時間内にデータを巻き戻すことができます。

これらの機能は、ポイント イン タイム リカバリのより効率的な代替手段を提供し、リカバリ前にデータベースをバックアップする必要がありません。この効果は、データベースのポイント イン タイム リカバリ (DBPITR)に似ています。フラッシュバック データベースと復元ポイントは、従来のデータベース リカバリの状況だけでなく、データベースのアップグレード、アプリケーションの展開、およびテスト データベースを迅速に作成および再作成する必要があるテスト シナリオでも役立ちます。Flashback Database は、Data Guard のフェイルオーバー後に障害が発生したプライマリ データベースを再構築するための効率的な代替手段も提供します

復元ポイントは、フラッシュバック データベースおよびその他のメディア リカバリ操作に関連する機能を提供します。特に、システム変更番号(SCN)で作成された保証付きリストア・ポイントにより、フラッシュバック・データベースを使用してデータベースをこのSCNまで巻き戻すことができます。復元ポイントとフラッシュバック データベースを個別に、または一緒に使用できます。

Flashback Database は、RMAN および SQL を介して FLASHBACK DATABASE としてアクセスできます。どの言語でも、論理データの破損やユーザー エラーからデータベースを迅速に復旧できます。次の例では、指定した SCN または復元ポイントにデータベースを返します。

FLASHBACK DATABASE TO RESTORE POINT 'before_upgrade';
FLASHBACK DATABASE TO SCN 202381;

7.1.1 フラッシュバック・データベースについて

フラッシュバック データベースは、従来のポイント イン タイム リカバリと実質的に似ています。これにより、データベースを最近の状態に復元できます。フラッシュバック・データベースは、データファイルをバックアップからリストアする必要がなく、アーカイブREDOログから適用する必要がある変更が少ないため、ポイント・イン・タイム・リカバリよりもはるかに高速です。

データ・ファイルが無傷であれば、フラッシュバック・データベースを使用して、データベースに対するほとんどの不要な変更をリカバリできます。データベースを以前のインカネーション状態に戻し、ALTER DATABASE OPEN RESETLOGS ステートメントの効果を元に戻すことができます。フラッシュバック・データベースを使用したデータベースの巻き戻し」では、 FLASHBACK DATABASE コマンドを使用してデータベースの変更を元に戻す方法について説明しています。

化身の定義は次のとおりです。

A separate version of a database. The incarnation of the database changes when you open it with the RESETLOGS option, but you can recover backups from a prior incarnation so long as the necessary redo is available.

闪回数据库使用自己的日志记录机制,创建闪回日志并将它们存储在快速恢复区中。 如果闪回日志可用,则只能使用闪回数据库。 要利用此功能,您必须提前设置数据库以创建闪回日志。

要启用闪回数据库,您需要配置一个快速恢复区并设置一个闪回保留目标。 此保留目标指定您可以使用闪回数据库倒带数据库的时间。

从那时起,数据库会定期将每个数据文件中每个更改块的图像复制到闪回日志中。 这些块图像以后可以重复使用,以在捕获日志的任何时刻重建数据文件内容。

当您使用闪回数据库将数据库倒回到过去的目标时间时,该命令会确定哪些块在目标时间之后更改并从闪回日志中恢复它们。 数据库恢复紧接在目标时间之前的每个块的版本。 然后数据库使用重做日志重新应用在将这些块写入闪回日志后所做的更改。

磁盘或磁带上的重做日志必须在闪回日志跨越的整个时间段内可用。 例如,如果闪回保留目标是 1 周,那么您必须确保可以访问包含过去一周所有更改的联机和归档重做日志。 实际上,重做日志通常需要比闪回保留目标长得多的时间来支持时间点恢复。

7.1.2 About Flashback Database Window

当前有足够的闪回日志数据支持FLASHBACK DATABASE 命令的SCN 范围称为闪回数据库窗口。 闪回数据库窗口不能延伸到比可用闪回日志中最早的 SCN 更远的地方。

您不能将闪回日志备份到快速恢复区之外的位置。 要增加保留足够闪回日志以满足闪回数据库窗口的可能性,您可以增加快速恢复区中的空间。

如果快速恢复区不够大,无法容纳闪回日志和归档重做日志等文件以及保留策略所需的其他备份,则数据库可能会从最早的 SCN 向前删除闪回日志,以便为其他文件腾出空间。 因此,闪回数据库窗口可能比闪回保留目标更短,具体取决于快速恢复区的大小、必须保留的其他备份以及需要多少闪回日志数据。 闪回保留目标是一个目标,不能保证闪回数据库可用

如果因为闪回数据库窗口不够长而无法使用 FLASHBACK DATABASE,那么通常可以使用数据库时间点恢复 (DBPITR) 来获得类似的结果。 保证还原点是确保您可以使用闪回数据库返回到特定时间点或保证闪回窗口大小的唯一方法

注意:某些数据库操作,例如删除表空间,无法使用闪回数据库来逆转。 有关详细信息,请参阅“闪回数据库的限制”。

7.1.3 Limitations of Flashback Database

由于闪回数据库的工作原理是撤消对运行命令时存在的数据文件的更改,因此它有一定的局限性。

  • 闪回数据库只能撤消 Oracle 数据库对数据文件所做的更改。 它不能用于修复介质故障,或从意外删除的数据文件中恢复。
  • 您不能单独使用闪回数据库来检索丢失的数据文件。 如果将数据库闪回到数据库中存在删除的数据文件的时间,则只会将数据文件条目添加到控制文件中。 只能通过使用 RMAN 完全恢复和恢复数据文件来恢复丢失的数据文件。
  • 如果从备份中恢复或重新创建数据库控制文件,则所有累积的闪回日志信息都将被丢弃。 您不能使用 FLASHBACK DATABASE 返回到恢复或重新创建控制文件之前的时间点。
  • 将闪回数据库与正在进行 NOLOGGING 操作的目标时间一起使用时,块损坏很可能发生在受 NOLOGGING 操作影响的数据库对象和数据文件中。 例如,如果您在 NOLOGGING 模式下执行直接路径 INSERT 操作,并且该操作从 2005 年 4 月 3 日的 9:00 运行到 9:15,您稍后使用闪回数据库返回到目标时间 09:07 在那一天,由直接路径 INSERT 更新的对象和数据文件可能会在闪回数据库操作完成后留下块损坏。
    如果可能,请避免使用目标时间或 SCN 与 NOLOGGING 操作重合的闪回数据库。 此外,在任何 NOLOGGING 操作后立即对受影响的数据文件执行完整或增量备份,以确保操作后可恢复到时间点。 如果您希望在直接路径 INSERT 等操作期间使用闪回数据库返回到某个时间点,请考虑在 LOGGING 模式下执行该操作。

7.1.4 About Normal Restore Points

创建普通还原点会将还原点名称分配给 SCN 或特定时间点。

因此,还原点用作此 SCN 的书签或别名。 在执行您可能必须撤消的任何操作之前,您可以创建一个正常的还原点。 控制文件存储还原点的名称和 SCN。

如果您使用闪回功能或时间点恢复,则可以使用还原点的名称而不是时间或 SCN。 以下命令支持使用还原点:

  • RMAN 中的 RECOVER DATABASE 和 FLASHBACK DATABASE 命令
  • SQL中的FLASHBACK TABLE语句

创建一个正常的还原点消除了提前手动记录 SCN 或事后使用闪回查询等功能确定正确的 SCN。

普通还原点是轻量级的。 控制文件可以维护数千个正常还原点的记录,对数据库性能没有显着影响。 如果不手动删除,正常还原点最终会脱离控制文件,因此它们不需要持续维护。

7.1.5 About Guaranteed Restore Points

与普通还原点一样,保证还原点在恢复操作中充当 SCN 的别名。 一个主要区别是保证还原点永远不会超出控制文件的范围,必须显式删除

通常,您可以将保证还原点用作 SCN 的别名,并使用任何适用于正常还原点的命令。 除非另有说明,否则有关在何处以及如何使用正常还原点的信息也适用于保证还原点。

有保证的还原点可确保您可以使用闪回数据库将数据库倒回到还原点 SCN 处的状态,即使禁用了闪回日志的生成???。 如果启用闪回日志记录,则保证还原点强制将闪回数据库所需的闪回日志保留到最早保证还原点之后的任何 SCN。 因此,如果启用闪回日志记录,您可以将数据库倒回到连续统一体中的任何 SCN,而不是仅倒回到单个 SCN。

注意:如果禁用闪回日志记录,那么您不能直接将数据库闪回到保证还原点和当前时间之间的 SCN。 但是,您可以先闪回到保证还原点,然后恢复到保证还原点和当前时间之间的 SCN。

如果恢复区有足够的磁盘空间来存储所需的日志,那么您可以使用有保证的还原点将整个数据库倒回几天或几周前的已知良好状态。 与闪回数据库一样,即使是 NOLOGGING 操作(如直接加载插入)的影响也可以通过有保证的还原点来逆转。

注意:适用于闪回数据库的限制也适用于保证还原点。 例如,删除表空间可以防止将受影响的数据文件闪回到保证的还原点。 有关详细信息,请参阅“闪回数据库的限制”。 另外,当数据库中有保证还原点时,数据库兼容性参数不能设置为更高的数据库版本。 尝试这样做会导致错误。 存在此限制是因为闪回数据库目前无法逆转使用兼容性初始化参数增加数据库版本的影响。

実際、保証された復元ポイントは、ストレージ スナップショットに代わる便利な方法です。

ストレージ スナップショットは、大規模なデータベースの更新やアプリケーションのパッチやアップグレードなどの危険な操作の前に、データベースを保護するためによく使用されます。スナップショットを作成したり、データベースを複製して操作をテストしたりする代わりに、プライマリ データベースまたはフィジカル スタンバイ データベースに保証付きの復元ポイントを作成できます。必要なフラッシュバック ログを確実に保持する必要がある場合は、危険な操作を実行できます。

7.1.6 マルチテナント環境での復元ポイントの概要

プラガブル データベース (PDB) に正常で保証された復元ポイントを作成できます。PDB 復元ポイントには、それらを定義する PDB からのみアクセスできます。

PDB復元ポイント

PDBリストア・ポイントは、特定のプラガブル・データベース(PDB)内のある時点またはSCNへのブックマークです。作成されたPDBにのみ適用され、そのPDBでの操作にのみ適用されます。PDB復元ポイントは、作成された時点でのPDBサブインカネーションを表します。

PDB 復元ポイントは、通常の復元ポイントまたは保証された復元ポイントのいずれかです。保証されたPDBリストア・ポイントは、PDBをこのリストア・ポイントにフラッシュバックできることを保証します。

PDBリストア・ポイントを使用して、フラッシュバック・データベース操作またはそれが作成されたPDBのみのポイント・イン・タイム・リカバリを実行できます。

注: 保証された PDB 復元ポイントを作成するには、慎重に検討する必要があります。そのような復元ポイントは、マルチテナント コンテナー データベース (CDB) で必要なフラッシュバック ログの再利用を妨げるからです。これは、フラッシュ・リカバリ領域の領域が不足する可能性があるため、CDB の操作に影響を与える可能性があります。

PDB 復元ポイントのクリーンアップ

クリーンなPDBリストア・ポイントは、PDBがシャットダウンされ、PDBに未処理のトランザクションがない場合に作成されるPDBリストア・ポイントです。クリーンな PDB 復元ポイントは、共有 UNDO を使用する CDB でのみ使用できます。

Clean PDB 还原点可以是正常还原点或保证还原点。 使用 CREATE CLEAN RESTORE POINT 命令显式创建干净的 PDB 还原点。 对于使用共享撤消的 CDB,如果 PDB 已关闭且没有未完成的事务,则创建的任何 PDB 还原点都将标记为干净的 PDB 还原点。

如果您预计可能需要将 PDB 倒回到特定时间点,例如,恢复到应用程序升级之前的状态,那么建议您创建一个干净的 PDB 保证还原点。

对于使用共享撤消的 CDB,对干净 PDB 还原点的闪回数据库操作比对 SCN 或其他非干净 PDB 还原点的还原点的闪回数据库操作更快。 这是因为 RMAN 在对干净的 PDB 还原点执行闪回操作时不需要还原任何备份。

PDB 还原点的命名空间
每个可插拔数据库 (PDB) 都有自己的还原点命名空间。 因此,您可以在多个 PDB 中定义同名的 PDB 还原点。

在多租户环境中,当您在 PDB 中使用还原点名称或用于 PDB 操作时,该名称首先被解释为相关 PDB 的 PDB 还原点。 如果未找到具有指定名称的 PDB 还原点,则将其解释为 CDB 还原点。

7.2 About Logging for Flashback Database and Guaranteed Restore Points

闪回数据库和保证还原点的日志记录涉及在应用更改之前捕获数据文件块的图像。 FLASHBACK DATABASE 命令可以使用这些图像将数据文件返回到它们以前的状态。

正常闪回日志记录和保证恢复点日志记录之间的主要区别在于何时记录块以及是否可以删除日志以响应快速恢复区的空间压力。 这些差异会影响日志的空间使用和数据库性能。

您的可恢复性目标部分决定了是为闪回数据库启用日志记录,还是使用有保证的还原点,或者两者兼而有之。 这些功能在性能和空间使用方面的影响,无论是单独使用还是一起使用,也会影响您的决定。

7.2.1 Guaranteed Restore Points and Fast Recovery Area Space Usage

某些规则决定了快速恢复区中空间的使用。

当您创建有保证的还原点时,无论是否启用完整的闪回数据库日志记录,您都必须监视快速恢复区中的可用空间。 “管理快速恢复区中闪回日志的空间”解释了如何监控快速恢复区磁盘空间使用情况。

以下规则管理快速恢复区中闪回日志的创建、保留、覆盖和删除:

  • 如果快速恢复区有足够的空间,则在必要时创建闪回日志以满足闪回保留目标。
  • 如果闪回日志足够旧以至于不再需要满足闪回保留目标,则可以重新使用或删除闪回日志。
  • 如果数据库必须创建闪回日志,而快速恢复区已满或没有磁盘空间,则重新使用最旧的闪回日志。
    注意:重用最旧的闪回日志会缩短闪回数据库窗口。 如果由于磁盘空间不足而重复使用足够多的闪回日志,则可能无法满足闪回保留目标。
  • 如果快恢复区已满,则根据快恢复区规则可回收的归档重做日志会被快恢复区自动删除,为其他文件腾出空间。 在这种情况下,任何需要使用该重做日志文件以使用 FLASHBACK DATABASE 的闪回日志也将被删除。
    根据快速恢复区规则,当满足以下条件之一时,文件是可回收的:(1)该文件被报告为已过时且闪回数据库不需要。 例如,文件在 DB_FLASHBACK_RETENTION_TARGET 参数之外。(2) 文件已备份到磁带。
  • 快速恢复区中的文件如果需要满足保证的还原点,则不符合删除或重新使用的条件。 但是,满足保证还原点所需的存档重做日志在备份到磁盘或磁带后可能会被删除。 当您使用 RMAN FLASHBACK DATABASE 命令时,如果满足指定保证还原点所需的归档重做日志在快速恢复区中不可用,则从备份中还原它们。
    保留闪回日志和满足保证还原点所需的其他文件,以及满足备份保留策略所需的文件,可能导致快速恢复区完全填满。 如果您的快速恢复区已满,请参阅“响应满的快速恢复区”。

警告:如果由于保留策略和保证还原点的要求而没有文件符合从快速恢复区删除的条件,则数据库会像遇到磁盘已满情况一样执行。 在许多情况下,这会导致您的数据库停止。 请参阅“响应满的快速恢复区”。

7.2.2 About Logging for Guaranteed Restore Points with Flashback Logging Disabled

假设您在禁用闪回数据库日志记录时创建有保证的还原点。 在这种情况下,当数据文件块在保证恢复点之后第一次被修改时,数据库会在闪回日志中存储修改前的块映像。 因此,闪回日志会在创建保证还原点时保留每个更改的数据块的内容。 以后对同一个块的修改不会导致内容再次被记录,除非在最后一次修改块之后创建了另一个有保证的还原点,或者后续的闪回数据库操作已经恢复了块的原始内容。 当您使用闪回数据库将数据库多次还原到同一个还原点时,通常的做法是每次删除并重新创建保证的还原点。 这将删除旧的闪回日志,并确保不超过快速恢复区的空间配额。

这种记录方法具有以下重要后果:

  • FLASHBACK DATABASE 可以使用块映像在保证还原点时重新创建数据文件内容。
  • 同じデータを繰り返し変更するワークロードの場合、ディスク領域の使用率は通常のフラッシュバック ロギングよりも低くなる可能性があります。変更された各ブロックが 1 回だけ記録されるため、必要なスペースが少なくて済みます挿入数が少ないアプリケーションでは、このディスク領域の節約によるメリットが得られる場合があります。この利点は、大量または大量のインサートを使用するアプリケーションではあまりありません。フラッシュバック・データベースのロギングを有効にしないと、保証されたリストア・ポイントのロギングのパフォーマンス・オーバーヘッドも低くなる可能性があります。

あなたの主な目標が、保証された復元ポイントが作成された時点までデータベースを復元できるようにすることだとしましょう。この場合、通常は、フラッシュバック ロギングをオフにして、保証された復元ポイントのみを使用する方が効率的ですたとえば、週末にデータベース ホストでアプリケーションのアップグレードを実行するとします。アップグレードの開始時に、保証された復元ポイントを作成できます。アップグレードが失敗した場合は、FLASHBACK DATABASE コマンドを使用して変更を元に戻します。

7.2.3 保証付きリストア・ポイントが定義されたフラッシュバック・データベースのロギングについて

フラッシュバック データベースが有効で、1 つ以上の保証付き復元ポイントが定義されている場合、データベースは通常のフラッシュバック ロギングを実行します。

この場合、リカバリ領域には、現在と現在最も古い定義済の保証済リカバリ・ポイントの間の任意の時点にフラッシュバックするために必要なフラッシュバック・ログが保持されます。フラッシュバック ログは、保証を満たすために必要な場合でも、スペース不足のために削除されません。

フラッシュバック ロギングでは、パフォーマンスのオーバーヘッドが発生します。データベースのアクティビティ パターンによっては、フラッシュ リカバリ領域で大きなスペース不足が発生することもあります。したがって、フラッシュ・リカバリ領域で使用される領域を監視する必要があります。

7.3 フラッシュバック データベースと復元ポイントの前提条件

为确保闪回数据库的成功运行和保证还原点,您必须首先设置一些关键的数据库选项。
Flashback Database
在启用闪回数据库之前配置以下数据库设置:

  • 您的数据库必须在 ARCHIVELOG 模式下运行,因为归档日志用于闪回数据库操作。
  • 您必须启用快速恢复区,因为闪回日志只能存储在快速恢复区中。
  • 对于 Oracle Real Application Clusters (Oracle RAC) 数据库,快速恢复区必须在集群文件系统或 ASM 中。
  • 要在 CDB 中创建还原点,COMPATIBLE 初始化参数必须设置为 12.1.0 或更高版本。

Guaranteed Restore Points
要使用有保证的还原点,数据库必须满足以下附加先决条件:必须将 COMPATIBLE 初始化参数设置为 10.2.0 或更高。

注意:在使用普通还原点之前没有需要设置的特殊先决条件。

Restore Points in PDBs
要在可插拔数据库 (PDB) 中创建还原点,COMPATIBLE 初始化参数必须设置为 12.2.0 或更高版本。

7.4 Using Normal and Guaranteed Restore Points

您可以创建、监控和删除正常和保证还原点。

7.4.1 Creating CDB Restore Points

要在多租户容器数据库 (CDB) 中创建或保证还原点,请使用 CREATE RESTORE POINT SQL 命令。 提供还原点的名称并指定它是保证还原点还是普通还原点(默认)。

要创建 CDB 还原点:

  1. 确保满足闪回数据库和还原点的先决条件中描述的先决条件。
  2. 以具有 SYSDBA 或 SYSBACKUP 权限的普通用户身份将 SQL*Plus 连接到根目录。
  3. 确保 CDB 已打开或已挂载。 如果 CDB 已挂载,则它必须已完全关闭(除非它是物理备用数据库)。
  4. 运行 CREATE RESTORE POINT 语句创建 CDB 还原点
CREATE RESTORE POINT cdb_before_upgrade;
CREATE RESTORE POINT cdb_grp_before_upgrade GUARANTEE FLASHBACK DATABASE;

7.4.2 Creating PDB Restore Points

您可以使用 CREATE RESTORE POINT SQL 语句在可插拔数据库 (PDB) 中创建正常 PDB 还原点、保证 PDB 还原点或清洁 PDB 还原点。

您可以在连接到 PDB 或根目录时创建 PDB 还原点。 当 PDB 使用共享撤消时,只有当 PDB 没有任何未完成的事务时,您才能创建一个干净的还原点。

要在连接到 PDB 时创建 PDB 还原点:

  1. 确保满足闪回数据库和还原点的先决条件中描述的先决条件。
  2. 以普通用户或具有 SYSDBA 或 SYSBACKUP 权限的本地用户身份将 SQL*Plus 连接到 PDB。
  3. 如果您在使用共享撤消的 CDB 中创建干净的 PDB 还原点,则必须关闭 PDB。
  4. 如果多租户容器数据库 (CDB) 处于挂载状态,那么它一定一直处于关闭状态(除非它是物理备用数据库)。
  5. 将当前容器设置为 PDB。
  6. 使用 CREATE RESTORE POINT 命令创建 PDB 还原点。

要在连接到 CDB 时创建 PDB 还原点:

  1. 确保满足闪回数据库和还原点的先决条件中描述的先决条件。
  2. 以具有 SYSDBA 或 SYSBACKUP 权限的普通用户身份将 SQL*Plus 连接到目标数据库的根目录。
  3. 如果您在使用共享撤消的 CDB 中创建干净的 PDB 还原点,则必须关闭 PDB。
  4. 包含 PDB 的 CDB 可以打开或装载。 如果安装了 CDB,那么它必须一直关闭(除非它是物理备用数据库)。
  5. 将当前容器设置为根
  6. 使用带有 FOR PLUGGABLE DATABASE 子句的 CREATE RESTORE POINT 命令创建 PDB 还原点

7.4.3 LIST コマンドを使用した復元ポイントの一覧表示

LIST コマンドを使用して、特定の復元ポイントまたは RMAN リポジトリに認識されているすべての復元ポイントを一覧表示します。

例:

-- SQL Plus
LIST RESTORE POINT restore_point_name;
LIST RESTORE POINT ALL;
-- RMAN
LIST RESTORE POINT ALL;

注: LIST コマンドは、PDB インカネーション番号や復元ポイントが PDB 復元ポイントであるかどうかなどの詳細を表示しません。マルチテナント環境での復元ポイントの詳細を表示するには、次のセクションを参照してください: V$RESTORE_POINT ビューを使用して復元ポイントを一覧表示します。

7.4.4 V$RESTORE_POINTビューを使用したリストア・ポイントのリスト表示

V$RESTORE_POINT 制御ファイル ビューを使用して、CDB 復元ポイントと PDB 復元ポイントを含む、現在定義されているすべての復元ポイント (通常および保証) に関する情報を取得できます。

V$RESTORE_POINT ビューには、LIST RESTORE POINT コマンドでは表示されないマルチテナント環境の復元ポイントに関する追加情報が含まれています。これには、PDB 復元ポイントを作成したプラガブル データベース (PDB) インカネーション、および復元ポイントが PDB 復元ポイントかクリーンな PDB 復元ポイントかなどの詳細が含まれます。

例:

SELECT name, guarantee_flashback_database, pdb_restore_point, clean_pdb_restore_point, pdb_incarnation#, storage_sizeFROM v$restore_point;

NAME                         GUARANTEE_  PDB_RESTORE_POINT  CLEAN_PDB_RESTORE_POINT  STORAGE_SIZE
--------                     ----------  ----------------   -----------------------  ------------
CDB_GRP_BEFORE_PATCH            YES         NO                  NO                     84586
PDB_GRP_BEFORE_UPGRADE_TEMP     YES         YES                 NO                      4562
CDB_RP1                         NO          NO                  NO                         0
PDB1_BEFORE_PATCHING            NO          YES                 NO                         0
MYPDB_CLEAN_GRP_BEFORE_UPGRADE  NO          YES                 YES                        0    

通常の復元ポイントの場合、STORAGE_SIZE はゼロです。保証された復元ポイントの場合、STORAGE_SIZE は、その復元ポイントへの FLASHBACK DATABASE を保証するために必要なログを保持するためにバインドされたフラッシュ リカバリ領域内のディスク領域のおおよそのバイト数を示します。

7.4.5 復元ポイントの削除

DROP RESTORE POINT SQL*Plus ステートメントを使用して、既存の復元ポイントが不要であることが確実な場合、または既存の復元ポイントの名前を使用して復元ポイントを作成する場合に、復元ポイントを削除できます。

SQL> DROP RESTORE POINT before_app_upgrade;
Restore point dropped.

同じステートメントを使用して、通常の復元ポイントと保証された復元ポイントを削除します。

注: 通常の復元ポイントは、明示的に削除されていなくても、最終的には制御ファイルから期限切れになります。制御ファイル内の復元ポイントの保存を管理するルールは次のとおりです。

  • 最新の 2048 個の復元ポイントは、その経過時間に関係なく、常に制御ファイルに保持されます。
  • CONTROL_FILE_RECORD_KEEP_TIME の値 (デフォルトは 7) よりも新しい復元ポイントは、定義されている復元ポイントの数に関係なく保持されます。

不满足这些条件中的任何一个的正常还原点可能会在控制文件之外老化。

保证还原点永远不会超出控制文件的期限。 它们一直存在,直到它们被明确删除。

7.5 Using Flashback Database

要对目标数据库使用闪回日志记录,您必须启用闪回数据库。 可以遵循某些准则以确保闪回数据库的最佳性能。

7.5.1 Enabling Flashback Database

使用 ALTER DATABASE 命令启用闪回数据库。

要启用闪回日志记录:

  1. 按照“启用快速恢复区”中的描述配置恢复区。
  2. 确保数据库实例已打开或已挂载。 如果实例已挂载,则数据库必须干净地关闭,除非它是物理备用数据库。 其他 Oracle Real Application Clusters (Oracle RAC) 实例可以处于任何模式。
  3. (可选)将 DB_FLASHBACK_RETENTION_TARGET 设置为所需闪回窗口的长度(以分钟为单位),默认是1440分钟,即1天。
ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=4320 SCOPE=BOTH; # 3 days
  1. 为整个数据库启用闪回数据库功能
ALTER DATABASE FLASHBACK ON;
  1. (可选)禁用特定表空间的闪回日志记录。如果禁用表空间的闪回数据库,则必须在运行闪回数据库之前使其数据文件脱机。
    默认情况下,为所有永久表空间生成闪回日志。 您可以通过禁用特定表空间的闪回日志记录来减少开销,如以下示例所示:
ALTER TABLESPACE tbs_3 FLASHBACK OFF;
-- ALTER TABLESPACE tbs_3 FLASHBACK ON;

当您在数据库打开时启用闪回数据库时,该命令极有可能无法获得所需的内存。 如果该命令因此而失败,请稍后重试该命令或在关闭并重新启动实例后重试。

当您在物理备用数据库上启用闪回数据库时,您可以闪回备用数据库。 备库闪回数据库在Data Guard环境下有一些应用。

7.5.2 Disabling Flashback Database Logging

使用 ALTER DATABASE 命令禁用闪回数据库。

在处于装载或打开状态的数据库实例上,发出以下命令:

ALTER DATABASE FLASHBACK OFF;

7.5.3 最適なフラッシュバック・データベースのパフォーマンスのための環境の構成

フラッシュバック ログを維持すると、 DB インスタンスのオーバーヘッドが比較的制限されます変更されたブロックは、処理とI/Oのオーバーヘッドを制限するために、比較的まれな間隔でメモリーからフラッシュバック・ログに書き込まれます。

フラッシュバック・データベースが有効な大規模な本番データベースで良好なパフォーマンスを実現するには、次のことをお薦めします:

  • できればオペレーティング システムのファイル キャッシュを使用せずに、フラッシュ リカバリ領域に高速なファイル システムを使用します。
    通常、データベースによってフラッシュ・リカバリ領域に作成されるファイル(フラッシュバック・ログを含む)は非常に大きくなります。オペレーティング システムのファイル キャッシュは、多くの場合、これらのファイルには効果がなく、実際には読み取りと書き込みの CPU オーバーヘッドが増加する可能性があります。したがって、自動ストレージ管理 (ASM) など、オペレーティング システムのファイル キャッシュを回避するファイル システムを使用することをお勧めします。
  • フラッシュ リカバリ領域を保持するファイル システムに十分なディスク スピンドルを構成します。
    大規模な本番データベースの場合、データベースがフラッシュバック ログに効率的に書き込むために必要なディスク スループットをサポートするために、複数のディスク スピンドルが必要になる場合があります。
  • フラッシュ リカバリ領域を保持するために使用されるストレージ システムに不揮発性 RAM がない場合は、ストライプ化されたストレージ ボリュームでファイル システムを構成してみてください。
    128 KB などの比較的小さいストライプ サイズを使用します。この手法により、フラッシュバック ログへの各書き込みを複数の軸に分散できるため、パフォーマンスが向上します。
  • 大規模なデータベースの場合、初期化パラメータ LOG_BUFFER を 8 MB 以上に設定します。

Flashback Databaseのロギングのオーバーヘッドは、データベースのワークロードにおける読み取りと書き込みの組み合わせによって異なります。書き込み集中型のワークロードがある場合、フラッシュバック データベース ロギングは、データベースの変更をすべてログに記録する必要があるため、コストがかかります。問合せはデータを変更しないため、フラッシュバック・データベースのロギング・アクティビティには影響しません。

7.5.4 フラッシュバック・データベースがパフォーマンスに与える影響の監視

システム上のフラッシュバック・データベースのワークロードを監視するために使用できるデータ分析方法がいくつかあります。

  • AWR レポート
    自動ワークロード リポジトリ (AWR) は、データベースの問題検出と自己調整のためにパフォーマンス統計を収集、処理、および維持することにより、データベース統計を自動的に収集します。Flashback Databaseを有効化してパフォーマンスへの影響を監視する前後で、 AWRレポートを比較できます
  • AWR スナップショット
    AWR スナップショットを表示して、フラッシュバック ロギングによるシステムの使用状況を特定できます。たとえば、RVWR によるフラッシュバック buf の解放が最上位の待機イベントである場合、Oracle Database がすぐにフラッシュバック ログに書き込めなくなることがわかります。したがって、場合によっては「フラッシュバック・データベースのパフォーマンスを最適化するための環境の構成」で説明されている手法を使用して、フラッシュ・リカバリ領域で使用されるファイル・システムおよび記憶域をチューニングする必要があります。
  • V$FLASHBACK_DATABASE_STATビュー ビューには、
    V$FLASHBACK_DATABASE_STATデータベースによって記録されたフラッシュバック データのバイト数が表示されます。ビューの各行には、累積された統計 (通常は 1 時間以上) が表示されます。FLASHBACK_DATA 列と REDO_DATA 列は、間隔中に書き込まれたフラッシュバック データと REDO データのバイト数をそれぞれ示し、DB_DATA 列は、読み書きされたデータ ブロックのバイト数を示します。FLASHBACK_DATA 列と REDO_DATA 列は順次書き込みに対応し、DB_DATA 列はランダムな読み取りと書き込みに対応します。
  • V SYSSTAT ビュー シーケンシャル I/O とランダム I/O の違いにより、I/O オーバーヘッドのより良い指標は、フラッシュバック ログに対して発行された I/O 操作の数です。次の表は、V SYSSTAT ビューを示しています。シーケンシャル I/O とランダム I/O には違いがあるため、I/O オーバーヘッドのより良い指標は、フラッシュバック ログに対して発行された I/O 操作の数です。下の表は、VSYSSTAT视图由于顺序I/O和随机I/O之间的差异,I/O开销的更好指示是为闪回日志发出的I/O操作数。下表显示的VSYSSTAT 统计信息可以告诉您实例为各种目的发出的 I/O 操作数。
列名 列含义
Physical write I/O request 写数据块发出的写操作数
Physical read I/O request 为读取数据块发出的读取操作数
Redo writes 为写入重做日志而发出的写操作数
Flashback log writes 为写入闪回日志而发出的写操作数
Flashback log write bytes 从此实例写入的闪回数据库数据的总大小(以字节为单位)

7.5.5 About Flashback Writer (RVWR) Behavior with I/O Errors

当启用闪回或有保证的还原点时,后台进程RVWR将闪回数据写入快速恢复区的闪回数据库日志中。

如果 RVWR 遇到 I/O 错误,则预期会出现以下行为:

  • 如果定义了任何有保证的还原点,那么当 RVWR 遇到 I/O 错误时实例将失败。
  • 如果未定义保证还原点,则当 RVWR 遇到 I/O 错误时,实例不受影响。 请注意以下情况:
    • 在主数据库上,Oracle 数据库会在数据库打开时自动禁用闪回数据库。 所有现有的交易和查询不受影响。 对于单实例和 Oracle RAC 数据库,此行为是预期的。
    • 在物理或逻辑备用数据库上,RVWR 似乎已停止响应,定期重试 I/O。 这最终可能会导致逻辑备用数据库或物理备用数据库的托管恢复挂起。 (Oracle 数据库不会导致备用实例失败,因为它不希望导致主数据库在最大保护模式下失败。)要解决此问题,您可以发出 SHUTDOWN ABORT 或 ALTER DATABASE FLASHBACK OFF 命令。

执行闪回和数据库时间点恢复

参见备份和恢复指南第18章Performing Flashback and Database Point-in-Time Recovery

RMAN 使您能够查询不需要的数据库更改,并根据 Oracle 闪回技术和数据库备份选择并执行适当的恢复策略。

在备份和恢复指南第30章:30 Performing User-Managed Database Flashback and Recovery描述了用户管理的Flashback Database,但没看出来和本章描述的有何区别:

A user-managed backup and recovery strategy means a method that does not depend on RMAN. Use the flashback features of Oracle Database in a user-managed backup and recovery strategy.

在备份和恢复指南第2.8节,有一个快速指南可以参看。

18.1 Oracle FlashbackテクノロジとデータベースのPoint-in-Timeリカバリの概要

この概要では、Oracle Flashback TechnologyおよびデータベースのPoint-in-Timeリカバリの目的と基本概念について説明します。

18.1.1 フラッシュバックおよびデータベースのPoint-in-Timeリカバリの目的

特定の状況では、ポイント イン タイム リカバリまたはフラッシュバック機能を使用して、データベースまたはデータベース オブジェクトを前の時点の状態に戻すことができます。

いくつかの典型的な状況は次のとおりです。

  • ユーザーのエラーまたは破損により、目的のデータが削除されたり、破損したデータが導入されたりする可能性があります。たとえば、ユーザーまたは DBA が誤って 1 つ以上のテーブルの内容を削除または更新したり、アプリケーションの更新中にまだ必要なデータベース オブジェクトを削除したり、実行中に失敗した一括更新を実行したりする可能性があります。
  • データベースのアップグレードが失敗したか、アップグレード スクリプトでエラーが発生しました。
  • 必要なすべての REDO ログまたは増分バックアップがないため、メディア障害後のデータベースの完全復旧は成功しません。

18.1.2 ポイント・イン・タイム・リカバリおよびフラッシュバック機能について

データベースのポイント イン タイム リカバリ(DBPITR)およびフラッシュバック機能を使用すると、データベースを以前の特定の時点に復元できます。

DBPITR は、不要なデータベース変更に対する最も基本的なソリューションです。使用可能なすべての REDO を使用しないか、データベースへのすべての変更を完全に回復しないため、不完全な回復と呼ばれることがあります。この場合、データベース バックアップ全体を復元してから、REDO ログまたは増分バックアップを適用して、不要な変更の前の時点までのすべての変更を再作成します。

不要なデータベースの変更が広範囲に及んでいて、特定のテーブルスペースに限られている場合は、テーブルスペースのポイント イン タイム リカバリ (TSPITR) を使用して、影響を受けていないテーブルスペースを利用可能な状態のまま、それらのテーブルスペースを以前のシステム変更番号に戻すことができます。

不要なデータベース変更が特定のテーブルまたはテーブル パーティションに限定されている場合は、以前に作成した RMAN バックアップを使用して、それらのオブジェクトのみを不要な変更が発生する前の時点に戻すことができます。

Oracle 数据库还提供了一组统称为闪回技术的特性,支持查看过去的数据状态,以及及时来回回绕数据,而无需从备份中恢复数据库。 根据对数据库的更改,闪回技术通常可以更快地恢复不需要的更改,并且对数据库可用性的影响更小。

对于多租户环境,数据库时间点恢复 (DBPITR) 和闪回操作之间可能存在某些依赖关系。

对于使用本地撤消的可插拔数据库 (PDB),DBPITR 和闪回操作彼此独立。

从 Oracle Database 21c 开始,您可以对同一数据库化身中的孤立 PDB 化身或祖先数据库化身中的孤立 PDB 化身执行 PDB 闪回或时间点恢复操作。 在一个 CDB 中,您可以同时执行闪回或 PITR 多个 PDB 到不同的数据库和具有当前数据库祖先化身的 PDB 化身。

18.1.3 Basic Concepts of Database Point-in-Time Recovery

DBPITR 在物理层面上工作,将数据文件返回到过去目标时间的状态。

在 RMAN DBPITR 操作中,您指定目标 SCN、日志序列、还原点或时间。 RMAN 从目标时间之前创建的备份恢复数据库,然后应用增量备份和日志来重新创建数据文件备份时间和恢复终点之间的所有更改。 当终点指定为 SCN 时,数据库应用重做日志并在每个重做线程或指定的 SCN 之后停止,以先发生者为准。 当结束点被指定为一个时间时,数据库内部为指定的时间确定一个合适的SCN,然后恢复到这个SCN。

如果您的备份策略设计得当并且您的数据库以 ARCHIVELOG 模式运行,那么 DBPITR 几乎在所有情况下都是一个选项。 给定一个目标 SCN,数据文件可以从备份中恢复,并且无需用户干预即可高效恢复。 然而,RMAN DBPITR 有以下缺点:

  • 您不能将选定的对象返回到它们之前的状态,只能返回整个数据库
  • 您的整个数据库在 DBPITR 期间不可用
  • DBPITR 可能很耗时,因为 RMAN 必须恢复所有数据文件。 此外,RMAN 可能需要恢复重做日志和增量备份来恢复数据文件。 如果备份在磁带上,则此过程可能需要更长的时间。

您可以对一个或多个 PDB 执行时间点恢复 (PITR)。 在 PITR 操作之前创建的备份仍然有效,并且可以在发生介质故障时使用。

在 PDB PITR 操作期间,PDB 的所有数据文件都在原地恢复。 如果 CDB 使用共享撤消,则 UNDO 表空间无法就地恢复,因为它由 CDB 中的所有 PDB 共享。 因此,RMAN 将 UNDO、SYSTEM 和 SYSAUX 表空间恢复到辅助目标,然后使用撤消信息将 PDB 恢复到目标时间。

配置快速恢复区后,RMAN 在 PDB PITR 期间将其用作辅助目标。 如果未配置快速恢复区,则使用 AUXILIARY DESTINATION 子句指定用于存储辅助数据库文件的位置。 如果快速恢复区没有足够的空间来恢复根表空间和撤消表空间,请使用 AUXILIARY DESTINATION 子句指定备用位置。

在 Data Guard 环境中,为了让备用数据库跟随主数据库(其中 PDB 已还原到特定时间点),您可能需要闪回整个备用数据库、还原 PDB 或闪回 PDB。

18.1.4 Basic Concepts of Flashback Technology

在大多数可用的情况下,Oracle 数据库的闪回特性比介质恢复更有效。 您可以使用它们来调查数据库过去的状态。

18.1.4.1 About Physical Flashback Features Useful in Backup and Recovery

Oracle 闪回数据库是 DBPITR 最有效的替代方案

与其他闪回功能不同,它在物理层面上运行并将当前数据文件恢复为过去某个时间的内容。 结果类似于 DBPITR 的结果,包括 OPEN RESETLOGS,但闪回数据库通常更快,因为它不需要您恢复数据文件,并且与介质恢复相比只需要有限的重做应用。

闪回数据库需要快速恢复区。 要为闪回数据库启用日志记录,您必须设置 DB_FLASHBACK_RETENTION_TARGET 初始化参数并发出 ALTER DATABASE FLASHBACK ON 语句。

在正常操作期间,数据库会定期将数据文件块的旧图像写入闪回日志。 闪回日志是按顺序写入的,通常是批量写入的。 在某些方面,闪回日志就像一个连续的备份。 数据库在恢复区自动创建、删除和调整闪回日志的大小。 不归档闪回日志。 您只需要了解闪回日志即可监控性能并确定恢复区的磁盘空间分配。

当您执行闪回数据库操作时,数据库使用闪回日志来访问过去版本的数据块,并且还使用归档重做日志中的一些数据。 因此,您无法在发现故障后启用闪回数据库,然后使用闪回数据库来回溯此故障。 您可以使用有保证的还原点的相关功能在固定时间点保护数据库的内容,例如在有风险的数据库更改之前。

如果在所需的少量重做应用期间遇到任何不可恢复的操作,则会导致逻辑损坏的数据块。 当访问此类块时,这会导致 Oracle 错误。

マルチテナント・コンテナ・データベース(CDB)全体または特定のプラガブル・データベース(PDB)に対してフラッシュバック・データベース操作を実行できます。

注: root でのみフラッシュバックすることはできません。CDB全体をフラッシュバックする必要があります。

CDB全体のフラッシュバック・データベースを使用すると、CDB全体(すべてのPDBを含む)を前の時点に巻き戻すことができます。ターゲット時刻は、システム変更番号 (SCN)、ログ シーケンス番号、復元ポイント、または時刻で指定できます。

PDBのフラッシュバック・データベースを使用すると、そのPDBでの論理データの破損またはユーザー・エラーが原因で発生した不要な変更を元に戻すことができます。Flashback Database が特定の PDB で実行されている間、他の PDB は開いたまま実行できます。

目的の目標時点は、PDB 復元ポイント、CDB 復元ポイント、SCN、または時間式によって指定されます。PDBでのCDBリストア・ポイントへのフラッシュバック操作は、PDBでのCDBインカネーションのリストア・ポイントSCNへのフラッシュバック操作と同等です。一般に、PDB の場合、PDB 復元ポイントへのフラッシュバックは、CDB 復元ポイントへのフラッシュバックよりも正確です。これは、PDB 復元ポイントが、作成された時点での PDB 子インカネーションを表すためです。

単一のPDBで複数のフラッシュバック操作を実行できます。ただし、PDB をフラッシュバックできるのは、その祖先インカネーションの 1 つだけです。PDB は、データベース インカネーション全体の過去のインカネーションとの互換性を常に維持する必要があります。

PDBでフラッシュバック・データベース操作を実行した後でも、PDBバックアップは引き続き有効です。これらのバックアップを使用して、メディア障害が発生した場合にリカバリを実行できます。このタイプの PDB リカバリは、データベース リセット ログと PDB リセット ログを介してリカバリできます。

プライマリ・データベースで同じ操作を実行した後、フィジカル・スタンバイ・データベースのPDBでフラッシュバック・データベース操作を実行することもできます。

18.1.4.2 バックアップおよびリカバリに役立つ論理フラッシュバック機能について

論理フラッシュバック機能は、テーブルとその内容を過去の時点に復元するために使用されます。

論理プロパティは次のとおりです。

  • 闪回表
    您可以将一个表或一组表恢复到指定的较早时间点,而无需使数据库的任何部分脱机。 在许多情况下,闪回表消除了执行更复杂的时间点恢复操作的需要。 闪回表在恢复表的同时自动维护关联的属性,例如当前索引、触发器和约束,而不需要您查找和恢复特定于应用程序的属性。

  • 闪回DROP
    您可以反转 DROP TABLE 语句的效果。

除了 Flashback Drop 之外的所有逻辑闪回特性都依赖于撤销数据。 主要用于为 SQL 查询和回滚事务提供读取一致性,撤消记录包含重建数据所需的信息,因为它存在于过去的时间并检查自过去时间以来的更改记录。

闪回丢弃依赖于一种称为回收站的机制,数据库使用该机制来管理丢弃的数据库对象,直到它们占用的空间被新数据需要为止。 没有分配给回收站的固定空间量,也不能保证丢弃的对象在回收站中保留多长时间。 根据系统活动,丢弃的对象可能会在回收站中保留数秒或数月。

18.1.4.3 About Undo and Flashback Database Operations for PDBs

多租户容器数据库 (CDB) 可以使用共享撤消或本地撤消。 RMAN 用于执行闪回数据库操作的技术取决于 CDB 撤消配置的类型。

当 CDB 使用本地撤消时,在可插拔数据库 (PDB) 上执行闪回数据库操作非常简单,因为只需要修改与该 PDB 相关的数据文件

共有UNDOを使用するCDBでは、一連の表領域がすべてのPDBで共有されます。複数のPDBからのUNDOデータは、単一のデータ・ブロック内であっても、UNDO表領域に混在する場合があります。したがって、Recovery ManagerがPDBでフラッシュバック・データベース操作を実行すると、自動的に補助インスタンスを使用して共有UNDO表領域とルート内の一部の表領域がリストアされ、必要な時点までデータがリストアされます。このプロセスには、比較的少量のデータのバックアップの復元が含まれる場合があります。PDBでクリーンなPDBリストア・ポイントに対してフラッシュバック・データベース操作を実行する場合、補助インスタンスまたはリストア・バックアップは必要ありません。

デフォルトでは、補助インスタンスは高速リカバリ領域に作成されます。FLASHBACK DATABASE コマンドで AUXILIARY DESTINATION 句を使用して、補助インスタンスの別の場所を指定できます。

18.1.5 CDBでのREDO破損の管理について

Recovery Manager は、PDB 内のデータ・ブロックの REDO 破損を管理する方法を提供します。

まれに、マルチテナント コンテナー データベース (CDB) の REDO ログが破損することがあります。この場合、影響を受けるデータ ブロックが 1 つのプラガブル データベース (PDB) にのみ存在する場合は、次のいずれかを実行できます。

  • 破損前の時点までPDBでフラッシュバック操作を実行し、RESETLOGSを使用してPDBを開きます
  • PDBの実行時点を破損前の時点に復元し、RESETLOGSを使用してPDBを開きます

プライマリでこれらの手順のいずれかを実行した後、 PDB で PITR またはフラッシュバックを実行した後にスタンバイがプライマリに従うようにするために必要な手順を実行する場合、このプライマリのスタンバイも破損REDOをスキップできます。

18.2 フラッシュバック表による表の巻き戻し

Flashback Table は、リストアされたバックアップの代わりに、UNDO テーブルスペースの情報を使用してテーブルを取得します。表のフラッシュバック操作が発生すると、新しい行が削除され、古い行が再挿入されます。表のフラッシュバックを実行している間、残りのデータベースは引き続き使用できます。

テーブルを前の時点に巻き戻すには:

18.2.1 フラッシュバック表の前提条件

フラッシュバック表操作を実行するには、表がフラッシュバックに適格であり、操作を実行するユーザーが必要な権限を持っている必要があります。

フラッシュバック テーブル機能を使用するには、次の権限が必要です。

  • FLASHBACK ANY TABLE システム権限が付与されているか、テーブルに対する FLASHBACK オブジェクト権限が必要です。
  • テーブルに対する READ または SELECT、INSERT、DELETE、および ALTER 権限が必要です。
  • テーブルを復元ポイントにフラッシュバックするには、SELECT ANY DICTIONARY または FLASHBACK ANY TABLE システム権限、または SELECT_CATALOG_ROLE ロールが必要です。

オブジェクトがフラッシュバックに適格であるためには、次の前提条件を満たす必要があります。

  • オブジェクトには、クラスタに属する表、マテリアライズド・ビュー、アドバンスト・キューイング(AQ)表、静的データ・ディクショナリ表、システム表、リモート表、オブジェクト表、ネストした表、または個々の表パーティションまたはサブパーティションのカテゴリを含めることはできません。
  • 表の構造は、現在時刻とターゲット・フラッシュバック時刻の間で変更してはなりません
    次のデータ定義言語 (DDL) 操作は、テーブルの構造を変更します: テーブルのアップグレード、移動、または切り捨て、テーブルへの制約の追加、クラスターへのテーブルの追加、列の変更または削除、追加、削除、マージ、パーティションの分割、マージ、または切り捨て サブパーティション (範囲パーティションの追加を除く)​​。
  • 表で行移動を有効にする必要があります。これは、フラッシュバックが発生してから行IDが変更されたことを示します。
    この制限が存在するのは、アプリケーションがフラッシュバックの前にROWIDを格納する場合、それらのROWIDがフラッシュバック後に同じ行に対応するという保証がないためです。アプリケーションがROWIDに依存している場合、フラッシュバック表は使用できません。
  • UNDO 表領域内の UNDO データは、フラッシュバックのターゲット時間 (SCN) を満たすために十分な時間をさかのぼる必要があります。
    表のフラッシュバックを実行できるポイントは、UNDO保存期間(リサイクルされるまでUNDOデータが保持される最小時間)および表スペースの特性によって決まります。元に戻すデータには、変更前のデータ ブロックに関する情報が含まれています。フラッシュバック操作では、元に戻す操作を使用して元のデータを再作成します。
    フラッシュバック表の操作でUNDO情報が保持されるようにするために、UNDO表領域のUNDO_RETENTIONパラメータを86400秒(24時間)以上に設定することをお薦めします。

注: FLASHBACK TABLE ... TO BEFORE DROP は、Flashback Table ではなく Flashback Drop 機能を使用するため、これらの前提条件の対象ではありません。

18.2.2 フラッシュバック表操作の実行

1 つ以上のテーブルでフラッシュバック テーブル機能を使用するには、ターゲット時間または SCN を指定して FLASHBACK TABLE SQL ステートメントを使用します。

  1. 「フラッシュバック表の前提条件」で説明されている前提条件を満たしていることを確認してください。
  2. (オプション) Flashback Tableの操作中にデータベース・トリガーを有効に保つには、Flashback Table中にトリガーを有効に保つを参照してください。
  3. 通常のユーザー、または SYSDBA または SYSBACKUP 権限を持つローカル ユーザーとして、SQL*Plus をテーブルを含む PDB に接続します。現在のデータベース(CDB)のSCNを識別します。
  4. テーブルを に戻す時刻、SCN、または復元ポイントを識別します。
-- 查询还原点
SELECT NAME, SCN, TIME FROM V$RESTORE_POINT;
  1. テーブルを指定されたターゲットに巻き戻すのに十分な元に戻すデータが存在することを確認します。
-- 如果设置了 UNDO_RETENTION 初始化参数,并且开启了撤销保留保证(在undo表空间上设置)
-- 则可以用以下查询确定撤消数据保留多长时间
SELECT NAME, VALUE/60 MINUTES_RETAINED
FROM   V$PARAMETER
WHERE  NAME = 'undo_retention';
  1. フラッシュバック表で巻き戻されたすべてのオブジェクトで行の移動が有効になっていることを確認してください
ALTER TABLE hr.temp_employees ENABLE ROW MOVEMENT;
  1. フラッシュバックする表が他の表に依存しているかどうかを判別します。依存関係がある場合は、これらの表もフラッシュバックするかどうかを決定します
SELECT other.owner, other.table_name
FROM   sys.all_constraints this, sys.all_constraints other
WHERE  this.owner = schema_name
AND    this.table_name = table_name
AND    this.r_owner = other.owner
AND    this.r_constraint_name = other.constraint_name
AND    this.constraint_type='R';
  1. フラッシュバックするオブジェクトに対して FLASHBACK TABLE ステートメントを実行します。
    注: タイムスタンプから SCN へのマッピングは常に正確であるとは限りません。FLASHBACK TABLE 文でタイムスタンプを使用する場合、表がフラッシュバックされる時間は、 TO_TIMESTAMP に指定された時間と最大で約 3 秒異なる場合があります。正確な時点が必要な場合は、時間の代わりに SCN を使用してください。
  2. 必要に応じて、テーブルをクエリしてデータを調べます。

デフォルトでは、データベースは、表のフラッシュバック操作を実行する前に、影響を受ける表のトリガーを無効にします。操作後、データベースはトリガーを操作前の状態(有効または無効)に戻します。

テーブルのフラッシュバック中にトリガーを有効に保つには、ENABLE TRIGGERS 句を FLASHBACK TABLE ステートメントに追加します。

18.3 フラッシュバック・ドロップを使用したDROP TABLE操作の巻き戻し

FLASHBACK TABLE ... TO BEFORE DROP ステートメントを使用して、ごみ箱からオブジェクトを取得できます。

18.3.1 フラッシュバック・ドロップについて

Flashback Drop は、DROP TABLE 操作の効果を逆にします。フラッシュバック ドロップは、ポイント イン タイム リカバリなど、この状況で使用できる他のリカバリ メカニズムよりも高速であり、ダウンタイムが発生したり、最近のトランザクションが失われたりすることはありません。

テーブルが削除されても、データベースはテーブルに関連付けられたスペースをすぐには削除しません。代わりに、テーブルの名前が変更され、関連するオブジェクトと共にごみ箱に入れられます。ごみ箱オブジェクトのシステム生成名は一意です。他のオブジェクトを照会できるのと同じように、ごみ箱内のオブジェクトを照会できます

フラッシュバック操作は、ごみ箱から表を取得します。削除されたテーブルを取得する場合、テーブルの元のユーザー指定の名前またはシステム生成の名前を指定できます。

テーブルを削除すると、テーブルはすべての依存オブジェクトと共にごみ箱に移動します同様に、Flashback Drop を実行すると、通常はオブジェクトがまとめて取得されます。ごみ箱からテーブルを復元すると、インデックスなどの依存オブジェクトは元の名前に戻らず、システムによって生成されたごみ箱名が保持されます。Oracle Databaseは、表に定義されたすべての索引(ビットマップ結合索引を除く)、および表に定義されたすべてのトリガーおよび制約(他の表を参照する参照整合性制約を除く)を取得します。

索引などの一部の依存オブジェクトは、スペース不足のためにリサイクルされた可能性があります。この場合、再利用された依存オブジェクトはごみ箱から取得できません。

18.3.2 フラッシュバック・ドロップの前提条件

フラッシュバック削除操作を実行する前に、前提条件を満たす必要があります。

Flashback Drop および Recycle Bin に関する操作に必要なユーザー権限は次のとおりです。

  • DROP
    オブジェクトに対する DROP 権限を持つすべてのユーザーは、オブジェクトを削除してごみ箱に入れることができます。
  • FLASHBACK TABLE ... TO BEFORE DROP
    このステートメントの権限は、DROP の権限にリンクされています。つまり、オブジェクトを削除できるユーザーは、フラッシュバック削除を実行して、ごみ箱から削除されたオブジェクトを取得できます。

  • ごみ箱をクリアするためのPURGE権限は、DROP 権限に関連付けられています。DROP TABLE、DROP ANY TABLE、または PURGE DBA_RECYCLE_BIN 権限を持つすべてのユーザーは、ごみ箱からオブジェクトをパージできます。
  • ごみ箱内の READ または SELECT および FLASHBACK オブジェクト
    ユーザーは、ごみ箱内のオブジェクトをクエリするには、ごみ箱内のオブジェクトに対する READ または SELECT および FLASHBACK 権限を持っている必要があります。オブジェクトが削除される前にオブジェクトに対する READ または SELECT 権限を持っていたユーザーは、ごみ箱内のオブジェクトに対する READ または SELECT 権限を引き続き持ちます。これらのオブジェクトはデータベースの過去の状態からのものであるため、ごみ箱内のオブジェクトを問い合せるには、ユーザーに FLASHBACK 権限が必要です。

ごみ箱からオブジェクトを取得するには、オブジェクトが次の前提条件を満たしている必要があります。

  • ごみ箱は、システム以外のローカル管理のテーブルスペースにのみ適用されます。表が非システムのローカル管理表領域にあるが、1 つ以上の依存セグメント (オブジェクト) がディクショナリ管理表領域にある場合、それらのオブジェクトはごみ箱によって保護されます。
  • ファイングレイン監査 (FGA) および仮想プライベート データベース (VPD) ポリシーが定義されているテーブルは、ごみ箱によって保護されません。
  • パーティション化された索引構成表は、ごみ箱によって保護されません。
  • 領域再利用操作中に、ユーザーまたはOracleデータベースが PURGE コマンドを使用して表をパージしないでください。

18.3.3 フラッシュバック・ドロップ操作の実行

FLASHBACK TABLE ... TO BEFORE DROP ステートメントを使用して、ごみ箱からオブジェクトを復元します。ごみ箱内のテーブルの名前または元のテーブル名を指定できます。

SHOW RECYCLEBIN;
SELECT object_name AS recycle_name, original_name, type FROM recyclebin;
SELECT * FROM  "BIN$gk3lsj/3akk5hg3j2lkl5j3d==$0";
-- 注意:如果您有必要的权限,那么您也可以对回收站中的表使用闪回查询
-- 但只能使用回收站名称而不是原始表名称。 您不能对回收站中的对象使用数据操作语言 (DML) 或 DDL 语句。
FLASHBACK TABLE "BIN$gk3lsj/3akk5hg3j2lkl5j3d==$0" TO BEFORE DROP;
FLASHBACK TABLE "BIN$gk3lsj/3akk5hg3j2lkl5j3d==$0" TO BEFORE DROP 
  RENAME TO hr.emp_demo;
SELECT INDEX_NAME FROM USER_INDEXES WHERE  TABLE_NAME = 'EMPLOYEE_DEMO';
ALTER INDEX "BIN$JKS983293M1dsab4gsz/I249==$0" RENAME TO I_EMP_DEMO;
-- 如果检索到的表在放入回收站之前具有引用约束,则重新创建它们。
-- 此步骤必须手动执行,因为回收站不会保留表上的引用约束。

元の名前が同じ複数のオブジェクトを作成および削除できます。廃棄されたオブジェクトはすべてごみ箱に保管されます。
原則として、オブジェクト名は同じですが、ごみ箱ではオブジェクトの名前が異なります。また、オブジェクトは作成時間によって決定できます。

または、この元の名前を持つ最近削除されたテーブルが元の名前のごみ箱から最初に取得されるため、個別に返信することもできます。

18.4 フラッシュバック・データベースを使用したデータベースの巻き戻し

Flashback Database は、データベースを以前の時点の状態に戻すことで、不要な変更を元に戻します。

18.4.1 Prerequisites of Flashback Database

闪回数据库的工作原理是撤消对运行命令时存在的数据文件的更改。 必须满足先决条件才能执行闪回数据库操作。

要使用 FLASHBACK DATABASE 命令将数据库内容返回到闪回窗口内的时间点,您的数据库必须先前已配置闪回日志记录。 要将数据库返回到有保证的还原点,您必须事先定义有保证的还原点

请注意以下重要先决条件:

  • 当前没有数据文件丢失或损坏。 您只能使用 FLASHBACK DATABASE 倒回 Oracle 数据库对数据文件所做的更改,而不是修复介质故障。
  • 您不是要从意外删除的数据文件中恢复或撤消对数据库名称的更改。
  • 您没有尝试使用 FLASHBACK DATABASE 返回到恢复或重新创建控制文件之前的时间点。 如果从备份中恢复或重新创建数据库控制文件,则所有累积的闪回日志信息都将被丢弃。
  • 您没有尝试使用 FLASHBACK DATABASE 来撤消兼容性更改。

18.4.2 Performing a Flashback Database Operation

您可以使用 FLASHBACK DATABASE 命令将整个多租户容器数据库 (CDB) 倒回到过去的某个时间点。

本主题介绍执行数据库闪回的基本技术,使用时间表达式、正常或保证还原点的名称或 SCN 指定所需的目标时间点。 它做出以下假设:

  • 您正在将数据库倒回到当前数据库化身中的某个时间点。
  • FLASHBACK DATABASE 命令中使用的 SCN 指的是数据库化身的直接祖先路径中的 SCN。 如果先前使用 RESETLOGS 选项打开数据库后未放弃化身,则该化身位于此路径中。

对整个 CDB 执行闪回数据库操作:

  1. 确保满足“闪回数据库的先决条件”中描述的先决条件。
  2. 将 SQL*Plus 连接到目标 CDB 并确定 FLASHBACK DATABASE 命令所需的 SCN、还原点或时间点
-- 获取闪回数据库窗口中最早的SCN
SELECT OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME
FROM V$FLASHBACK_DATABASE_LOG;
-- 获取当前的SCN
SELECT CURRENT_SCN FROM V$DATABASE;
-- 查询可用的保证还原点
SELECT NAME, SCN, TIME, DATABASE_INCARNATION#,
       GUARANTEE_FLASHBACK_DATABASE
FROM   V$RESTORE_POINT
WHERE  GUARANTEE_FLASHBACK_DATABASE='YES';
 
NAME                   SCN TIME                  DATABASE_INCARNATION# GUA
--------------- ---------- --------------------- --------------------- ---
BEFORE_CHANGES     5753126 04-MAR-12 12.39.45 AM                     2 YES

-- 注意:如果闪回窗口没有足够远地回溯到过去以达到所需的目标时间,
-- 并且如果您在所需的时间没有保证的还原点,那么您可以通过使用数据库时间点恢复
  1. 一致关闭数据库,确保它没有被任何实例打开,然后挂载它
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
  1. 重复此过程步骤 2 中的查询

数据库关闭时会生成一些闪回日志记录数据。 如果由于快速恢复区的空间压力而删除了闪回日志,那么您的目标 SCN 可能无法访问。
5. 以具有 SYSDBA 或 SYSBACKUP 权限的普通用户身份连接到 root
6. 要查看预配置的通道,请运行 RMAN的SHOW 命令。因为在闪回操作期间,RMAN 可能需要从备份中恢复归档的重做日志。

SHOW ALL;
  1. 运行FLASHBACK DATABASE命令对整个CDB执行闪回操作到指定时间点。您可以使用 SCN、时间表达式或 CDB 还原点来指定目标时间。
  2. 在 SQL*Plus 中以只读方式打开 CDB 并运行一些查询来验证数据库内容
ALTER DATABASE OPEN READ ONLY;

如果您对数据库的状态感到满意,则从第 9 步结束该过程。如果您对数据库的状态不满意,请跳至第 10 步。

  1. 如果您对结果满意,则执行以下互斥操作之一
-- 操作A
-- 通过使用 RESETLOGS 选项打开数据库,使数据库可用于更新。
SHUTDOWN IMMEDIATE
STARTUP MOUNT
ALTER DATABASE OPEN RESETLOGS;
-- 注意:执行此 OPEN RESETLOGS 操作后,将放弃 FLASHBACK DATABASE 的目标 SCN 之后对数据库的所有更改。 
-- 您可以使用“将数据库倒带到一个被遗弃的化身分支中的一个 SCN”中的技术,将数据库返回到该 SCN 范围,同时它们仍保留在闪回窗口中。

-- 操作B
-- 使用 Oracle Data Pump Export 对状态已损坏的对象进行逻辑备份。
-- 然后,使用 RMAN 将数据库恢复到当前时间:
RECOVER DATABASE;
-- 此步骤通过将重做日志中的所有更改重新应用到数据库并将其返回到最近的 SCN 来取消闪回数据库的影响。
-- 重新打开数据库读/写后,您可以使用数据泵导入实用程序导入导出的对象。
  1. 如果您发现您使用了错误的还原点、时间或 SCN 进行闪回,则挂载数据库并执行以下互斥选项之一
-- 操作A
-- 如果您选择的目标时间在过去还不够远,则使用另一个 FLASHBACK DATABASE 命令将数据库倒回更远的时间
FLASHBACK DATABASE TO SCN 42963;  #earlier than current SCN 

-- 操作B
-- 如果您选择的目标 SCN 距离过去太远,则使用 RECOVER DATABASE UNTIL 将数据库及时前移到所需的 SCN:
RECOVER DATABASE UNTIL SCN 56963; #later than current SCN 

-- 操作C
-- 如果要完全取消 FLASHBACK DATABASE 命令的影响,则可以使用不带 UNTIL 子句或 SET UNTIL 命令的 RECOVER DATABASE 命令执行数据库的完全恢复:
RECOVER DATABASE;
-- RECOVER DATABASE 命令将所有更改重新应用到数据库,将其返回到最近的 SCN。
  1. 打开 PDB,因为打开 CDB 时不会自动打开 PDB
ALTER PLUGGABLE DATABASE ALL OPEN;
ALTER PLUGGABLE DATABASE my_pdb OPEN;

18.4.3 Performing a Flashback Database Operation for PDBs

您可以使用 FLASHBACK DATABASE 命令对单个可插拔数据库 (PDB) 执行闪回数据库操作。 仅修改与该 PDB 相关的数据文件。 CDB 中的其余 PDB 不受影响,可以使用。

本主题介绍执行 PDB 闪回的基本技术,使用时间表达式、正常或保证还原点的名称或 SCN 指定所需的目标时间点。 它做出以下假设:

  • 您正在将 PDB 倒回到当前数据库化身中的某个时间点。
  • FLASHBACK DATABASE 命令中使用的 SCN 是指 PDB 化身的直接祖先路径中的 SCN。

PDBに対してフラッシュバック・データベース操作を実行するには:

  1. 「RMAN を使用したデータベース接続の確立」の説明に従って、SYSDBA または SYSBACKUP 権限を持つ通常のユーザーとして root に接続します。
  2. CDBがオンになっていることを確認してください
  3. Flashback Databaseコマンドに必要なSCN、リストア・ポイントまたは時点の決定
  4. フラッシュバック・データベース操作を実行する必要があるPDBが閉じていることを確認してください。他の PDB を開いて実行できます
  5. 指定したPDBで目的の時点までフラッシュバック・データベース操作を実行します
FLASHBACK PLUGGABLE DATABASE my_pdb TO SCN 24368 AUXILIARY DESTINATION '+data';
FLASHBACK PLUGGABLE DATABASE my_pdb TO RESTORE POINT before_appl_changes AUXILIARY DESTINATION '/temp/aux_dest';
FLASHBACK PLUGGABLE DATABASE my_pdb TO TIME "TO_DATE('03/20/15','MM/DD/YY')";
  1. 共有UNDOを使用するPDBの場合、オプションで AUXILIARY DESTINATION 句を含めて、フラッシュバック・データベース操作の一部としてリストアされるデータファイルを格納する補助インスタンスの場所を指定できます。この句を省略した場合、補助インスタンスはフラッシュ・リカバリ領域に作成されます。
  2. RESETLOGS で PDB を開く
ALTER PLUGGABLE DATABASE my_pdb OPEN RESETLOGS;

18.4.4 PDBでの祖先または孤立したインカネーションへのフラッシュバック操作の実行

少し。

18.4.5 フラッシュバック・データベースの監視

データ・ディクショナリ・ビューには、フラッシュバック・データベースを監視するための情報が含まれています。

Flashback Database を使用してデータベースを過去のターゲット時刻に巻き戻す場合、Flashback Database は、ターゲット時刻の後に変更されたブロックを判別し、フラッシュバック ログからそれらを復元します。これは復元フェーズと呼ばれます。このフェーズが完了すると、Flashback DatabaseはREDOログを使用して、ブロックがフラッシュバック・ログに書き込まれた後に加えられた変更を再適用します。これを回復期と呼びます

リカバリ・フェーズ中のフラッシュバック・データベースの進行状況は、 V$SESSION_LONGOPS ビューを問い合せることで監視できます。opname はフラッシュバック データベースです。TOTALWORK 列の下には、読み取る必要があるフラッシュバック ログのメガバイト数が表示されます。次の例の SOFAR 列には、現在読み取られているメガバイト数がリストされています。

-- Tracking Flashback Database Progress - Restore Phase

SQL> SELECT sofar, totalwork, units FROM v$session_longops WHERE opname = 'Flashback Database';
 
SOFAR  TOTALWORK  UNITS
-----  ---------- --------------------------------
   17          60 Megabytes

リカバリ・フェーズ中のフラッシュバック・データベースの進行状況は、ビュー V$RECOVERY_PROGRESS を問い合せることで監視できます。

18.5 データベースのポイント・イン・タイム・リカバリの実行

少し。

18.6 アプリケーションPDBのポイント・イン・タイム・リカバリの実行

少し。

18.7 スパース・データベースのポイント・イン・タイム・リカバリの実行

少し。

18.8 フラッシュバックおよびデータベースのポイント・イン・タイム・リカバリのシナリオ

少し。

おすすめ

転載: blog.csdn.net/stevensxiao/article/details/128784141