0) { obj.className = "imgborder_on"; } } } function hideImage(obj) { if (obj.className.substr(0, 10) == "imgborder_") { obj.src = eyeglass.src; obj.className = "imgborder_off"; } } function showAllImages() { imgs = document.images; for (i=0; i < imgs.length; i++) { showImage(imgs[i]); } } function hideAllImages() { imgs = document.images; for (i=0; i < imgs.length; i++) { hideImage(imgs[i]); } } //-->

Flashback Transactionを使用したトランザクションの取り消し

目的

このチュートリアルでは、Flashback Transactionを使用して、データベースのトランザクションを取り消す方法について説明します。

所要時間

約20分

トピック

このチュートリアルでは、以下のトピックについて説明します。

 概要
 前提条件
 テスト環境の作成
 WAW依存性を持つトランザクションの取消し
 クリーンアップ
 まとめ

スクリーンショットの表示

 このアイコンの上にカーソルを置くと、すべてのスクリーンショットがロードし、表示されます。 (警告:すべてのスクリーンショットが同時にロードされるため、ご使用のインターネット接続によってはレスポンス・タイムが遅くなる場合があります。)

注:各手順に関連したスクリーンショットのみを表示する場合は、それぞれの手順にあるアイコンの上にカーソルを置いてください。 スクリーンショットをクリックすると、非表示になります。

概要

Flashback Transaction Back-Outについて

Flashback Transaction Back-Outは、データベースがオンラインの状態でターゲット・トランザクションとその従属トランザクションをロールバックする論理的なリカバリ・オプションです。 従属トランザクションは、トランザクションでターゲット・トランザクションによって変更されたデータを変更するWAW(Write After Write)関係、またはトランザクションでターゲット・トランザクションによって削除された主キー値を再挿入する主キーの制約関係と関連します。 Flashback Transactionは、UNDOおよびUNDOブロック用に生成されたREDOを利用して、影響を受けたデータを元の状態に戻す補完トランザクションを作成および実行します。

トピック・リストに戻る

前提条件

このチュートリアルを始める前に、次の手順を完了してください。

1.

チュートリアル『 Oracle Database 11gのLinuxへのインストール』に従って、データベースをインストールします。

2.

作業ディレクトリ(wkdir)に flatxn.zipファイルをダウンロードして解凍します。

トピック・リストに戻る

テスト環境の作成

テスト環境の設定とこのOracle by Example(OBE)のトランザクションの作成には、以下の手順を実行します。

1.

作業ディレクトリへ移動し、 SYSユーザーとして flatxn_archivelog.sh スクリプトを実行します。

./flatxn_archivelog.sh

このスクリプトは、 HR ユーザーのロックを解除し、 ARCHIVELOGモードを有効にします。

 

2.

SQL*Plusで、 SYSユーザーとしてデータベースに接続し、 flatxn_setup1.sql スクリプトを実行します。

sqlplus / as sysdba
@flatxn_setup1.sql


このセットアップ・スクリプトは、フラッシュバックしてトランザクションを取り消すため、データベースおよび HRユーザーを設定します。 ALTER DATABASEおよび GRANTコマンドに注意してください。

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

3.

スクリプトが HR ユーザーとしてデータベースに接続されます。また、5つの行を挿入する最初のテスト・トランザクションが作成されます。

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

 

4.

スクリプトは、挿入された2つの行を更新する2つ目のテスト・トランザクションを作成します。 これによって、Write After Write(WAW)依存性が作成されます。 トランザクションが従属トランザクションによって挿入または更新される行を更新または削除する場合、WAW依存性が存在します。

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

 

5.

スクリプトは、3つの行(そのなかの1行は前のトランザクションで更新された行)を更新する3つ目のトランザクションを作成します。 このアクションによって、別のWAW依存性が作成されます。

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

 

5.

スクリプトは、トランザクション1で挿入された行を更新する4つ目のトランザクションを作成します。このアクションによって、別のWAW依存性が作成されます。

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

 

6.

最後に、スクリプトが SYS ユーザーとしてデータベースに接続され、アーカイブ・ログが切り替えられます。 Flashback Transactionには、REDO分析の開始に少なくとも1つのアーカイブ・ログが必要です。

[Enter]を押して、スクリプトを終了します。

 

トピック・リストに戻る

WAW依存性を持つトランザクションの取消し

トランザクションは、WAW依存性を持つことができます。つまり、前のトランザクションで挿入または更新された行データがトランザクションで更新または削除されます。 ここでは、不正な変更を発生させるWAW依存と不適切なトランザクションを取り消します。 以下の手順を実行します。

1.

以下のURLを入力して、Oracle Enterprise Manager Database Controlにログインします(<hostname>をlocalhostまたは特定のホスト名に変更します)。

                                           
https://<hostname>:1158/em
                                        

 

2.

Oracle Enterprise Managerにログインするには、以下の詳細を入力し、「 Login」をクリックします。

ユーザー名: SYS
パスワード: oracle
接続ユーザー: SYSDBA

 

3.

HR.REGIONS表に不適切なトランザクションの変更が含まれると仮定し、完全な表データを参照します。 「 Schema」タブ・ページをクリックします。

次に、「 Tables」をクリックします。

 

4.

HRスキーマ・ユーザーに属するすべての表を参照するには、 Schemaフィールドに HR と入力し、「 Go」ボタンをクリックします。

 

5.

HR表が表示されます。 最初に HR.REGIONS表を選択し、 Actionsドロップダウン・リストから「 View Data」を選択します。 Actionsドロップダウンの横の「 Go」ボタンをクリックして、 HR.REGIONS表のデータを参照します。

 

6.

表の内容を参照すると、赤いボックスに行が含まれていないことがわかります。 「 OK」をクリックします。

 

7.

表のリストに戻ります。 HR.REGIONS 表を選択し、 Actionsドロップダウン・リストから「 Flashback Transaction」を選択します。次に、Actionsの横の「 Go」ボタンをクリックします。

 

8.

問合せ条件を確認します。 誤った変更が行われたと思われる期間を指定できます。 この例では、デフォルトの期間をそのまま使用します。 「 Next」をクリックします。

指定期間のREDOログが処理され、Processing: Mining Transactionsウィンドウが表示されます。

 

9.

Flashback Transaction: Select Transactionページで、2つの地域を更新するトランザクションのTransaction IDのリンクを選択します。

 

10.

Select Transaction: Show Detailsページで、不正な UPDATEコマンドを確認し、「 OK」をクリックします。

 

11.

Next」をクリックして、従属トランザクションの識別および必要なすべての変更の取消しを行います。

Processing: Flashback Transactionウィンドウが表示されます。

 

12.

Flashback Transaction: Show Dependenciesページで、最初のTransaction IDリンクをクリックします

 

13.

Show Dependencies: Detailsページで、補完トランザクションを確認します。 補完トランザクションは実行されていません。 REGION10の更新が" [exec=no]"になっています。これは、従属トランザクションが存在するので実行されないことを意味します。すべての従属トランザクションを実行しない要求を行って、次の手順でこれを修正します。 「 OK」をクリックします。

 

14.

Flashback Transaction: Show Dependenciesページで、「 Change Recovery Option」をクリックします。

 

15.

Show Dependencies: Change Recovery Optionページで、不正な従属トランザクションの変更も取り消す「 Cascade」を選択し、「 OK」をクリックします。

Processing: Flashback Transactionウィンドウが表示されます。

 

16.

Flashback Transaction: Show Dependenciesウィンドウで、「 Next」をクリックします。

 

17.

情報を確認し、「 Finish」をクリックします。

 

18.

Flashback Transactionが正常に実行されました。 「 OK」をクリックします。

 

19.

HR.REGIONS表に含まれる内容を参照できます。 HR.REGIONS 表を選択し、Actionsドロップダウン・リストから「 View Data」を選択します。次に、「 Go」をクリックします。

 

20.

トランザクション2とトランザクション4のWAW依存性がないため、トランザクション2と3が取り消され、トランザクション4(REGION_NAMEがまだ"Still called Venus"に設定されています)が残ります。

 

トピック・リストに戻る

クリーンアップ

以下の手順を実行して、環境をクリーンアップできます。

1.

SQL*Plusセッションで、 flatxn_cleanup1.sqlスクリプトを実行します。

 

2.

アーカイブ・ログをオフにするには、 flatxn_cleanup.shを実行します。 次のコマンドを実行します。

                                           
./flatxn_cleanup.sh
                                        

 

トピック・リストに戻る

まとめ

このチュートリアルでは、WAW依存性を持つトランザクションを取り消す方法について学習しました。

トピック・リストに戻る

 このアイコンの上にカーソルを置くと、すべてのスクリーンショットが非表示になります。

 

 

 

 

 

 

 

 


Copyright (c) Oracle Corporation 2007 All Rights Reserved
Oracle Corporation発行の「Backing Out Transactions with Flashback」の翻訳版です。

この文書はあくまで参考資料であり、 掲載されている情報は予告なしに変更されることがあります。 万一、誤植などにお気づきの場合は、オラクル社までお知らせください。 オラクル社は本書の内容に関していかなる保証もしません。 また、本書の内容に関連したいかなる損害についても責任を負いかねます。

Oracleはオラクル社の登録商標です。
その他の会社名および製品名は、 あくまでその製品および会社を識別する目的にのみ使用されており、 それぞれの所有者の商標または登録商標です。