Flashback Data Archiveの使用
このチュートリアルでは、Flashback Data Archiveの作成、監視、およびメンテナンス方法を紹介します。Flashback Data Archiveは、表内の行に対するすべてのトランザクション変更を追跡し、格納します。 ここでは、"不正なトランザクション"を作成した後、UPDATEコマンドを使用して元の行のリカバリを行います。
約20分
このチュートリアルでは、以下のトピックについて説明します。
このアイコンの上にカーソルを置くと、すべてのスクリーンショットがロードし、表示されます。 (注意: すべてのスクリーンショットが同時にロードされるため、ご使用のインターネット接続によってはレスポンス・タイムが遅くなる場合があります。)
注: 各手順に関連したスクリーンショットのみを表示する場合は、それぞれの手順にあるアイコンの上にカーソルを置いてください。 スクリーンショットをクリックすると、非表示になります。
Flashback Data Archiveは、レコードのライフ・サイクル中、レコードに対するすべてのトランザクション変更を自動的に追跡および格納する機能です。 また、"as of"クエリーを使用した履歴データへのシームレスなアクセスも提供しており、 UNDOデータよりも長期のフラッシュバック機能を提供します。 Flashback Data Archiveは、コンプライアンス報告、監査レポート、データ分析、および意思決定支援に使用できます。

トピック・リストに戻る
このチュートリアルを始める前に、次の手順を完了してください。
| 1. |
チュートリアルOracle Database 11gのLinuxへのインストールに従って、データベースをインストールします。 |
| 2. |
flada.zipファイルを作業ディレクトリ(wkdir)にダウンロードして解凍します。
注: このOracle by Example(OBE)で提供するファイルは、Linux環境を前提としています。 Windows環境で作業する場合、flada_setup.sqlとflada_tbs2.sqlの2つのファイルを変更する必要があります。 両方のファイルのCREATE TABLESPACEコマンドで、データファイル指定をWindowsのファイル名形式に変更してください。 |
トピック・リストに戻る
この項では、以下の2種類の役割を果たします。
- SYSDBAとして、このOBE用の作業環境をセットアップし、HRユーザーにFlashback Data Archive管理者として必要な権限を付与します。
- Flashback Data Archive管理者として、以下のタスクを実行します。
- Flashback Data Archiveを作成します。
- HR.EMPLOYEES表に対する履歴追跡を有効化します。
- 誤ったDMLを生成します。
- SELECTコマンドとUPDATEコマンドで、Flashback Data Archiveに関連する句を使用して、誤ったDMLの表示と修正を行います。
HR.EMPLOYEES表に対するすべてのトランザクション変更を追跡して格納するため、Flashback Data Archiveを作成、構成、および使用します。 以下の手順を実行します。
| 1. |
SQL*PlusでSYSユーザーとしてデータベースに接続し、ファイルを保存したディレクトリからflada_setup.sqlスクリプトを実行します。
sqlplus / as sysdba
@flada_setup.sql
セットアップ・スクリプトにより小さな表領域が作成され、HRパスワードを使用してHRユーザーがアンロックされます。 デフォルトでは、パスワードの大文字と小文字を区別する必要があります。

|
| 2. |
Flashback Data Archiveの作成、維持、削除を行う管理者権限をHRユーザーに付与するため、SYSユーザーとして次のコマンドを実行します。
GRANT FLASHBACK ARCHIVE ADMINISTER TO hr;
|
| 3. |
SQL*Plusで、パスワードHRを使用してhrユーザーとして接続します。 注: パスワードは大文字で入力する必要があります。
connect hr/HR

|
| 4. |
Flashback Data Archiveを作成するため、次のコマンドを実行します。
CREATE FLASHBACK ARCHIVE fla1
TABLESPACE fla_tbs1
QUOTA 10M
RETENTION 1 YEAR
/

領域の要件は、選択した保存期間および追跡対象表のアクティビティによって異なります。
|
| 5. |
EMPLOYEES表に対してFlashback Data Archiveを有効化するため、次のコマンドを実行します。
ALTER TABLE hr.employees
FLASHBACK ARCHIVE fla1
/

|
| 6. |
Fox氏の給与を表示した後、これが1000ドルずつ3回増加するため、flada_dml.sqlスクリプトを実行します。 これにより、Flashback Data Archiveにアクティビティが作成されます。
@flada_dml.sql

[Enter]を押して続行します。

上のスクリーンショットで元の給与を確認します。 [Enter]を押して、スクリプトの次のステップへと進みます。

上のスクリーンショットで更新がコミットされたことを確認します。 [Enter]を押して、スクリプトの次のステップへと進みます。

[Enter]を押して続行します。

上のスクリーンショットで、Fox氏の誤った現在の給与を確認します。[Enter]を押してスクリプトを終了します。
|
| 7. |
Flashback Data Archiveが作成された後は、あらゆる時点におけるレコードを表示できます。 "作成"時間の問合せを実行する例として、"Flashback Data Archiveに関するデータ・ディクショナリ情報の表示"レッスンを参照してください。
Flashback Data Archiveを作成してから、誤ったDMLを実行するまでの間の時間を選択します。 その時点でのFox氏の給与レコードを表示するため、次の問合せを実行します('10' MINUTEを選択した履歴日付で置き換えてください。書式例:'50' SECOND、'10' DAY、'5' MONTH)。
SELECT employee_id, last_name, salary
FROM hr.employees
AS OF TIMESTAMP
(SYSTIMESTAMP - INTERVAL '10' MINUTE)
WHERE last_name = 'Fox'
/

注:Flashback Data Archiveが作成されるより以前の時間を指定した場合、以下のようなエラー・メッセージが表示される場合があります。 指定する間隔を短縮して、再度実行してください。
ORA-01466: unable to read data - table definition has changed
|
| 8. |
EXPLAIN PLANを参照すると、Flashback Data Archiveが利用されていることが確認できます。 次のスクリプトを実行します。
@flada_explainplan
flada_explainplan.sqlスクリプトに含まれる内容は、以下のとおりです。
set echo on
explain plan for
SELECT employee_id, last_name, salary
FROM hr.employees
AS OF TIMESTAMP
(SYSTIMESTAMP - INTERVAL '10' MINUTE)
WHERE last_name = 'Fox'
/
set echo off
@$ORACLE_HOME/rdbms/admin/utlxpls

|
| 9. |
ここで、先程の更新が誤っていたことに気付きます。 選択した履歴日付(例:10分前)の元の値に戻すため、次のコマンドを実行します('10' MINUTEを選択した履歴日付で置き換えてください)。
UPDATE hr.employees
SET salary =
(SELECT salary FROM hr.employees
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' MINUTE)
WHERE last_name = 'Fox')
WHERE last_name = 'Fox'
/

上のスクリーンショットで、10分前の値に戻すために、UPDATEコマンドで履歴行が使用されていることが確認できます (このテスト環境では分単位の履歴日付を使用しますが、 本番環境では、DAY、MONTH、YEARを使用する場合があります)。
|
トピック・リストに戻る
ここでもまた、以下の2種類の役割を果たします。
- SYSDBAとして、使用できるデータ・ディクショナリ・ビューを表示し、Flashback Data Archiveが作成された時間に対する問合せを実行します。 次に、Flashback Data Archiveが使用する表領域を表示してから、Flashback Data Archiveが使用する表名と内部の"履歴"表名に対する問合せを実行します。
- Flashback Data Archive管理者であるHRとして、使用できるデータ・ディクショナリ・ビューを表示します。
Flashback Data Archiveに関するメタデータを表示するには、次の手順に従います。
| 1. |
SQL*Plusセッションで、SYSユーザーとしてデータベースに接続します。
connect / as sysdba
|
| 2. |
使用できるデータ・ディクショナリ・ビューを表示するため、flada_list1.sqlファイルを実行します。
@flada_list1.sql

[Enter]を押して続行します。

[Enter]を押して、スクリプトの次のステップへと進みます。

|
| 3. |
DBA_FLASHBACK_ARCHIVEデータ・ディクショナリ・ビューを使用して、Flashback Data Archiveが作成された時間に対する問合せを実行します。 [Enter]を押して、スクリプトの次のステップへと進みます。

[Enter]を押して続行します。

|
| 4. |
[Enter]を押して、DBA_FLASHBACK_ARCHIVE_TSデータ・ディクショナリ・ビューに対してDESCRIBEを実行します。

[Enter]を押して、Flashback Data Archiveが使用する表領域を表示します。
[Enter]を押して続行します。

|
| 5. |
[Enter]を押して、DBA_FLASHBACK_ARCHIVEデータ・ディクショナリ・ビューに対してDESCRIBEを実行します。

[Enter]を押して、Flashback Data Archiveの表名、所有者名、および内部"履歴"表名に対する問合せを実行します。

[Enter]を押して続行します。

|
| 6. |
[Enter]を押して、HRユーザーとしてデータベースに接続し、このユーザーが使用できるデータ・ディクショナリ・ビューを表示します。

[Enter]を押して続行します。

[Enter]を押して、スクリプトを終了します。 |
トピック・リストに戻る
その他のFlashback Data Archiveメンテナンス・タスクを実行するには、以下の手順を実行します。
| 1. |
SQL*Plusで、HRユーザーとしてデータベースに接続します。
sqlplus hr/HR
|
| 2. |
保存期間が終了すると、Flashback Data Archiveのデータは自動的に消去されます。 しかし、次のコマンドを使用して明示的にデータを消去することもできます。
ALTER FLASHBACK ARCHIVE fla1
PURGE BEFORE TIMESTAMP
(SYSTIMESTAMP - INTERVAL '2' MINUTE)
/
2分前より古いデータが消去されます。
|
| 3. |
flada_tbs2.sqlスクリプトを実行して、追加で10MBの表領域を作成します。
@flada_tbs2.sql

|
| 4. |
HRユーザーとして、5MBのFLA_TBS2表領域をFLA1 Flashback Data Archiveに追加します。 次のコマンドを実行します。
connect hr/HR
ALTER FLASHBACK ARCHIVE fla1
ADD TABLESPACE fla_tbs2
QUOTA 5M
/

|
| 5. |
特定のFlashback Data Archiveに含まれるすべての表には、同じ保存期間が設定されます。 FLA1 Flashback Data Archiveの保存期間を2年に変更するには、次のコマンドを実行します。
ALTER FLASHBACK ARCHIVE fla1
MODIFY RETENTION 2 YEAR
/

|
| 6. |
HR.EMPLOYEES表のFlashback Data Archiveを無効にするには、次のコマンドを実行します。
ALTER TABLE hr.employees NO FLASHBACK ARCHIVE
/

|
| 7. |
FLA1 Flashback Data Archiveを削除するには、次のコマンドを実行します。
DROP FLASHBACK ARCHIVE fla1
/

Flashback Data Archiveを削除すると、内部の改ざん防止履歴表も削除されます。 監査とセキュリティ上の要件により、この内部表を直接削除することはできません。
Flashback Data Archiveを削除しても、Flashback Data Archiveが格納されている表領域は削除されません。これは、表領域に別のデータが含まれる場合があるためです。
|
トピック・リストに戻る
このOBEを終了するか、またはFlashback Data Archiveの作成と使用からやり直す場合、以下の手順に従います。
| 1. |
SQL*Plusセッションで、SYSユーザーとしてデータベースに接続します。
connect / as sysdba
|
| 2. |
表領域を削除し、HRユーザーをロックするため、flada_cleanup.sqlスクリプトを実行します。
@flada_cleanup.sql
|
トピック・リストに戻る
このチュートリアルで学習した内容は、次のとおりです。
 |
Flashback Data Archiveの作成と使用 |
 |
Flashback Data Archiveに関するデータ・ディクショナリ情報の表示 |
 |
Flashback Data Archiveの変更 |
トピック・リストに戻る
このアイコンの上にカーソルを置くと、すべてのスクリーンショットが非表示になります。
|