ブロック・ストレージ・データベースに対するトランザクション・ロギングと再実行の使用方法

ブロック・ストレージ・データベースを、復元されたデータベースより後の状態に回復するには、トランザクション・ロギングを使用可能にする必要があります。トランザクションを実行すると、Essbaseは、操作パラメータをログ・ストアに書き込みます。バックアップされたデータベースを復元した後で、Essbase管理者役割を持つユーザーは、ロギングされているトランザクションのリストを表示し、これを再実行し、キャプチャされなかったデータを回復できます。

表5に、トランザクション・ロギングが有効な場合にEssbaseでロギングされるトランザクションをカテゴリ別にリストします。

表5. ロギングされるカテゴリ別トランザクションのリスト

カテゴリ

トランザクション

計算

  • デフォルトまたはサーバー側の計算を実行します。

  • クライアント側の計算を実行

データ・ロード

  • 複数のソースからEssbaseサーバーにデータをインポート

  • ロードされているデータをすべてクリアし、アウトラインを空にリセットします。

  • ロードされているデータをすべてクリアします。

  • クライアント側のデータ・ロードを実行します。

ロックと送信

Smart Viewからのデータでデータベース・セルを更新

各トランザクションのロギングされる操作パラメータは異なります。表6は、3つの代表的なトランザクションについて記録された操作パラメータを示しています。

表6. 特定のトランザクションのロギングされるパラメータの例

トランザクション

ロギングされるパラメータ

クライアント側の計算を実行

  • 要求を送信したユーザー

  • 開始時間

  • 終了時間

  • シーケンスID

  • リクエスト・タイプ

  • ランタイム代替変数およびその値を含む計算スクリプトの内容[1]

複数のソースからEssbaseサーバーにデータをインポート

  • 要求を送信したユーザー

  • 開始時間

  • 終了時間

  • シーケンスID

  • リクエスト・タイプ

  • ルール・ファイルの名前と場所

  • データ・ファイルの名前と場所

  • SQL接続情報(SQLソースの場合)

  • データ・ファイルとルール・ファイルがクライアント・コンピュータにある場合、そのファイルはReplayディレクトリにアーカイブされます。ディレクトリ・パスが、再実行操作で使用するためにロギングされます。

    Essbaseは、アーカイブされるデータ・ファイルとルール・ファイルのファイル名について一意の名前を自動的に生成します。たとえば、98761234.txt98761234.rulなどです。

Smart Viewからのデータでデータベース・セルを更新

  • 要求を送信したユーザー

  • 開始時間

  • 終了時間

  • シーケンスID

  • リクエスト・タイプ

  • 変更されたセルについてのEssbase追跡情報

1 ランタイム代替変数を含む計算スクリプトをログに記録するときに、ランタイム代替変数の値がスクリプトとともにログに記録されます。ログに記録された計算スクリプトが再実行されるときに、ログに記録された値がランタイム代替変数に保持されます。

注意:

Replayは予約語なので、ブロックまたは集約ストレージ・データベースの名前として使用できません。以前にデータベースに「replay」という名前を付けていた場合、トランザクション・ロギングと再実行の機能を使用可能にする前に、データベース名を変更しておく必要があります。

トランザクション・ロギングを使用可能にする

トランザクション・ロギングは、サーバー、アプリケーション、またはデータベース・レベルで使用可能にできます。

トランザクション・ロギングを使用可能にするには、Essbaseがトランザクション・ログ・ストアを書き込む一元管理された場所を指定する必要があります。この場所は、Essbaseサーバー上の既存のディレクトリである必要があります。

TRANSACTIONLOGLOCATION構成設定をessbase.cfgファイルに追加します。文の構文:

TRANSACTIONLOGLOCATION [appname [dbname]] LOGLOCATION NATIVE ENABLE | DISABLE

注意:

NATIVE引数は予約フィールドなので、変更しないでください。ログの場所については、ARBORPATHディレクトリまたはディスク・ボリュームが置かれているディスク以外の物理ディスクを使用することをお薦めします。

LOGLOCATION内に、Essbaseは、トランザクション・ロギングを使用可能にするアプリケーションとデータベースに対応するサブディレクトリを次の構造で作成します:

LOGLOCATION/appname/dbname

たとえば、次の文により、Sampleアプリケーションに関連付けられているすべてのデータベースのトランザクション・ロギングが使用可能になります:

TRANSACTIONLOGLOCATION Sample /Oracle/trlog NATIVE ENABLE

Sample.Basicデータベースのトランザクションがロギングされる場合、ログ・ストアは次の場所に書き込まれます:

/Oracle/trlog/Sample/Basic

トランザクション・ロギングを使用可能にするデータベース数に応じて、一元管理するトランザクション・ログの場所を複数用意することが必要になることもありますが、ログの場所は、最小限にすることをお薦めします。

また、複数のTRANSACTIONLOGLOCATION文を使用することによって、よりグローバルなレベルでトランザクション・ロギングを使用可能にし、同時に、より詳細なレベルでロギングを使用不可にすることができます。こうしたオーバーライドを有効にするには、essbase.cfgファイルで、よりグローバルな使用可能文を、より詳細な使用不可文の前に置く必要があります。

次に例を示します:

  • 最初の文で、Essbaseサーバー上のアプリケーションと、それらの関連データベースすべてのトランザクション・ロギングを使用可能にし、2つ目の文で、特定のアプリケーション(Sample)に関連付けられているすべてのデータベースのトランザクション・ロギングを使用不可にしています:

    TRANSACTIONLOGLOCATION /Oracle/trlog NATIVE ENABLE
    TRANSACTIONLOGLOCATION Sample /Oracle/trlog NATIVE DISABLE
  • 最初の文で、アプリケーション・レベル(Sample)でトランザクション・ロギングを使用可能し、2つ目の文で、そのアプリケーションにおける特定のデータベース(Basic)のトランザクション・ロギングを使用不可にしています:

    TRANSACTIONLOGLOCATION Sample /Oracle/trlog NATIVE ENABLE
    TRANSACTIONLOGLOCATION Sample Basic /Oracle/trlog NATIVE DISABLE

注意:

トランザクション・ロギングが使用可能になっているアプリケーションまたはデータベースをコピーしたり、それらの名前を変更したりする場合、その前に、コピーまたは名前変更後のアプリケーションまたはデータベースに対してトランザクション・ロギングを使用可能にし、ソースのアプリケーションおよびデータベースに対して指定したものと同じLOGLOCATIONを指定する必要があります。

トランザクションの再実行の構成

ロギングされたトランザクションの再実行を可能にするために、Essbaseは、データ・ロードとルール・ファイルのアーカイブ・コピーをARBORPATH/app/appname/dbname/Replayに作成します。

デフォルトでは、Essbaseは、クライアント・データ・ロード用のデータ・ロードとルール・ファイルのみアーカイブします。

アーカイブされるデータ型を変更するには、TRANSACTIONLOGDATALOADARCHIVE構成設定をessbase.cfgファイルに追加します。文の構文:

TRANSACTIONLOGDATALOADARCHIVE [appname [dbname]] [OPTION]

有効なOPTION引数値:

  • CLIENT - (デフォルト)クライアント・データ・ロード用のデータ・ロードとルール・ファイルをアーカイブします。

  • SERVER - サーバー上のデータ・ロードとルール・ファイルおよびSQLサーバーのデータ・ロードをアーカイブします。

    注意!

    サーバーのデータ・ロードは、サーバー上のReplayディレクトリにアーカイブされているデータ・ロードとルール・ファイルを使用して再実行されます。これらのファイルの名前は変更しないでください。また、データベース・ロードとルール・ファイルのコンテンツが、再実行操作前に変更されていた場合、再実行中、変更されたデータが使用されます。したがって、回復したデータベース内のデータは元のデータと同じにはなりません。

  • SERVER_CLIENT - サーバー・データとクライアント・データをアーカイブします。

  • NONE - データはアーカイブされません。

    NONEを選択し、クライアント・データを使用する場合、Essbaseは、データ・ロードを再実行できません。トランザクションを回復するには、残りのトランザクションを再実行する前に、手動でクライアント・データをロードする必要があります。

    注意!

    サーバー・データまたはSQLデータを使用する場合で、データまたはルール・ファイルがReplayディレクトリにアーカイブされていないとき(たとえば、SERVERオプションまたはSERVER_CLIENTオプションを使用していない場合)、Essbaseは、データ・ソース内のデータを使用して再実行します。つまり、そのデータはロードされた元のデータと同じ場合と異なる場合があります。

たとえば、次の文では、Essbaseサーバー上のすべてのデータベースのサーバー・データとクライアント・データをアーカイブします:

TRANSACTIONLOGDATALOADARCHIVE SERVER_CLIENT

ロギングされたトランザクションの表示

管理者は、ロギングされたトランザクションのリストと、各トランザクションに関連付けられている情報を表示できます。次の時間以降にロギングされたトランザクションのリストを表示するように指定できます:

  • 指定時間

  • 前回の再実行要求が実行された時間、または最後にバックアップが復元された時間(後に発生した方)

ロギングされたトランザクションを表示するには、次のツールを使用します:

ツールトピック場所
Administration Servicesブロック・ストレージ・データベースのロギングされたトランザクションの表示に関する説明Oracle Essbase Administration Servicesオンライン・ヘルプ
MaxLquery databaseOracle Essbaseテクニカル・リファレンス

管理サービス・コンソールでは、「トランザクションの表示」コマンドを使用して、図3 ロギングされたトランザクションのリストに示すような、トランザクションのリストを表示できます。次の属性でリストをソートできます:

  • シーケンスID

  • ユーザー名

  • 開始時間

  • 終了時間

  • リクエスト・タイプ

図3.ロギングされたトランザクションのリスト

この図は、Administration Servicesコンソールに記録されたトランザクションを示しています。

トランザクションのリストをソートできますが、トランザクションの再実行は、シーケンスIDと同じ順序で行う必要があります。

query database MaxL文をlist transactions文法で使用することにより、リストの出力をMaxLシェル・ウィンドウに表示する(デフォルト)か、指定したファイルに書き込むかを指定できます。文の構文:

query database appname.dbname list transactions [after TIME [[force] write to file FILE-NAME]]];

たとえば、次の文では、前回の再実行要求が実行された後、または最後にバックアップが復元された時間より後(後で発生した方)にロギングされたSample.BasicデータベースのトランザクションがMaxLシェル・ウィンドウに表示されます:

query database Sample.Basic list transactions;

ファイルへの出力は、ログ情報を他のツールで処理する場合に便利です。たとえば、ファイルのコンテンツをリレーショナル・データベースにインポートし、ツールを使用して、情報を分析できます。

write to file文法を使用すると、リストの出力は、Essbaseサーバー・コンピュータ上のカンマ区切りファイルに書き込まれます。Essbaseサーバー上の既存のディレクトリへの完全パスと、出力ファイル名を指定します。出力ファイル名のみが指定されている場合は、EssbaseはファイルをARBORPATH/appに書き込みます。

既存の出力ファイルに書き込む場合は、force文法を使用して、ファイルを上書きします。

たとえば、次の文では、2009年11月20日の12:20:00以降にロギングされたSample.Basicデータベースのトランザクションが、Sample.Basicデータベース・ディレクトリ内のCSVファイルに書き込まれます:

query database Sample.Basic list transactions after '11_20_2009:12:20:00' write to file EPM_ORACLE_HOME/products/Essbase/EssbaseServer/app/Sample/Basic/listoutput.csv';

ロギングされたトランザクションの再実行のユーザー・セキュリティの構成

ロギングされたトランザクションを再実行する際、デフォルトでは、Essbaseは、最初にトランザクションを実行したユーザーのセキュリティ設定を使用します。そのユーザーが存在しなくなっていたり、そのユーザーのユーザー名が変更されていた場合は、再実行操作は失敗します。明示的に行う場合、または元のユーザーの設定を使用できない場合に、再実行操作を行う管理者のセキュリティ設定を使用するには、essbase.cfg内のREPLAYSECURITYOPTION n構成設定を使用します。nの値と指定されるセキュリティ設定は次のとおりです:

  • 1 - (デフォルト) トランザクションを最初に実行したユーザー

  • 2 - 再実行操作を行う管理者

  • 3 - トランザクションを最初に実行したユーザー

    そのユーザーが存在しないか、そのユーザーのユーザー名が変更されている場合は、再実行操作を行う管理者のセキュリティ設定が使用されます。

ロギングされたトランザクションの再実行

管理者のみがトランザクションを再実行できます。次の条件に基づいて、ロギングされたトランザクションを再実行できます:

  • 指定された時間の後にロギングされたトランザクション

  • 前回の再実行要求が実行された後、または最後にバックアップが復元された時間より後(後に発生した方)にロギングされたトランザクション

  • シーケンスIDの範囲に基づいて選択されるトランザクション

ロギングされる各トランザクションには、トランザクションが実行された順序を示すシーケンスIDが割り当てられます。再実行後に復元されたデータの整合性を確保するために、Essbaseは、トランザクションが実行された順序でトランザクションを再実行します。たとえば、計算の前にデータ・ロードが行われていた場合、データ・ロードの前に計算を再実行すると、正しい結果が生成されません。したがって、このような場合はデータ・ロード・トランザクションを再実行してから計算トランザクションを再実行する必要があります。

シーケンスIDの順序は、複数の再実行コマンドをまたいで追跡されます。あるトランザクションが再実行されると、それ以降は、それより大きいシーケンスIDのトランザクションしか再実行できません。たとえば、シーケンスIDが1、2、3のトランザクションを再実行した後は、シーケンスIDが4以上のトランザクションのみ再実行できます。

復元操作の後で実行およびロギングされたトランザクションは、シーケンスIDを使用して再実行しないかぎり、再実行されません。データベースを復元した後、バックアップ後から復元前までにロギングされた、データベースを完全に回復するのに必要なトランザクションを再実行することをお薦めします。これで、新しいトランザクションを実行できるようになります。

注意:

そのトランザクション結果がデータベースの回復に必要ないと確信できるトランザクションについては再実行を省略できます。たとえば、まったく同じデータを2回ロードしている場合、そのデータ・ロードは1回再実行するだけで済みます。

ロギングされたトランザクションを再実行するには、次のツールを使用します:

ツールトピック場所
Administration Servicesブロック・ストレージ・データベースのロギングされたトランザクションの再実行に関する説明Oracle Essbase Administration Servicesオンライン・ヘルプ
MaxLalter databaseOracle Essbaseテクニカル・リファレンス

再実行機能は、管理サービス・コンソールを使用した場合でもMaxLを使用した場合でも同じです。

再実行するトランザクションを選択するには、シーケンスIDの範囲をカンマ区切り文字列で入力します。範囲は、1つ以上のトランザクションで構成されます:

  • トランザクションが1つの場合: n to n。たとえば、1 to 1

  • トランザクションが複数の場合: x to y。たとえば、20 to 100

管理サービス・コンソールでは、「トランザクションの再実行」コマンドを使用します。

MaxLでは、alter database文をreplay transactions文法で使用します。構文:

alter database appname.dbname replay transactions [after TIME] [using sequence_id_range COMMA-SEPARATED_RANGE];

たとえば、次の文では、Sample.Basicデータベース内のシーケンスID 1から10、および20から100のトランザクションが再実行されます:

alter database Sample.Basic replay transactions using sequence_id_range 1 to 10,20 to 100;

トランザクション・ログ・ストアとアーカイブされている再実行データ・ファイルの除去

定期的に、トランザクション・ログ・ストアと、Replayディレクトリ内のファイルを除去して、Essbaseサーバー上の使用可能なディスク・スペースを増やす必要があります。

トランザクション・ログ・ストア: 一度に1つのデータベースのトランザクション・ログ・ストアを除去することをお薦めします。ログ・ストアは、TRANSACTIONLOGLOCATION構成設定で指定したログの場所の下にあるサブディレクトリにあります。たとえば、Sample.Basicデータベースのログの場所が/Oracle/trlogである場合は、/Oracle/trlog/Sample/Basicのコンテンツを削除します

トランザクション・ロギングを使用可能にするを参照してください。

Replay ディレクトリ: トランザクションを再実行した後、再実行したトランザクションに関連付けられているデータ・ファイルとルール・ファイルを、ARBORPATH/app/appname/dbname/Replayディレクトリから除去できます(トランザクションの再実行の構成を参照)。Replayディレクトリ内のすべてのファイルを削除するか、次のガイドラインに従って、除去するファイルを選択できます:

  • 古いファイルから順にデータ・ファイルとルール・ファイルを除去します。

  • 一番新しいアーカイブ・ファイルより後のタイムスタンプのデータ・ファイルとルール・ファイルは除去しないでください。

注意:

トランザクション・ロギングと再実行に関連付けられているファイルは、データベースのバックアップを何度か行った後に削除することをお薦めします。

パーティション・データベースを使用したトランザクション・ロギングと再実行

パーティション・データベースからトランザクションのロギングと再実行を行う場合は、次のガイドラインに従います:

  • パーティション・コマンド(たとえば、同期化コマンド)はロギングされないので、再実行できません。データベースを回復するときは、ロギングされているトランザクションを再実行してから、同じパーティションの変更を古いものから順に手動で行う必要があります。

  • パーティション・データベースを使用していたり、計算スクリプトで@XREF関数を使用している場合は、ソース・データベースとターゲット・データベース間で、古いものから順に、ロギングされているトランザクションを正しく選択して、再実行する必要があります。

    注意:

    ソース・データベースとターゲット・データベースを同時にバックアップおよび復元します。パーティション・データベースのバックアップと復元を参照してください。