ヘッダーをスキップ
Oracle® OLAP DMLリファレンス
11gリリース2 (11.2)
B61346-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

ACQUIRE

アナリティック・ワークスペースがマルチライタ・モードでアタッチされる場合、ACQUIREコマンドは指定されたオブジェクトを取得および再同期化(オプション)し、それらのオブジェクトの変更内容が更新およびコミットされるようにします。

構文

ACQUIRE {acquired_noresync_objects | RESYNC [CASCADE] -

resync_objects [WAIT] } [CONSISTENT WITH [CASCADE] consistency_objects [WAIT]]

ここで、resync_objectsの構文は次のとおりです。

resynch_objname [FOR DELETE | [WITH [CASCADE]|WITHOUT] RELATIONS]] , ...

パラメータ

acquired_noresync_objects

再同期化せずに読取り/書込みモードでアクセスする1つ以上の変数、リレーション、値セット、ディメンション名のカンマで区切られたリスト。

パーティション変数の個々のパーティションを指定するには、次の構文を使用します。

variable_name (PARTITION partition_name [, PARTITION partition_name ]...)

この方法でオブジェクトを取得すると、オブジェクトに対して行われた読取り専用の変更がすべて保存されます。この方法で取得された変数およびディメンションは、UPDATE文を使用して更新できます。

partition_name

オブジェクトの取得先となるパーティションの名前。

RESYNC

指定したオブジェクトの最新の世代を、独自に加えた変更内容をすべて廃棄して読取り/書込みモードで取得するように指定します。

CASCADE
resync_objname

読取り/書込みモードでアクセスして再同期化する変数、リレーション、値セットまたはディメンションの名前。

パーティション変数の個々のパーティションを指定するには、次の構文を使用します。

variable_name (PARTITION partition_name [, PARTITION partition_name ]...)

WAIT

WAITを指定しない場合、他のユーザーがresync_objects内のオブジェクトのいずれかを読取り/書込みモードで取得していると、ACQUIRE文の実行に失敗します。WAITを指定した場合、Oracle OLAPはresync_objectsのすべてのオブジェクトが読取り/書込みモードで取得可能になるか、タイムアウトになるまで待機します。

CONSISTENT WITH

追加のオブジェクトが読取り専用モードでアクセス可能となるように指定します。指定したオブジェクトがすでに他のユーザーにより取得されている場合のACQUIRE文の動作を指定し、ACQUIRE文の実行に成功した場合は指定したオブジェクトを再同期化します。

consistency_objects [WAIT]

読取り専用モードで取得する1つ以上の変数、リレーション、値セットまたはディメンション名のカンマで区切られたリスト。

パーティション変数の個々のパーティションを指定するには、次の構文を使用します。

variable_name (PARTITION partition_name [, PARTITION partition_name ]...)

WAITを指定しない場合、consistency_objects内のオブジェクトのいずれかが読取り/書込みモードで他のユーザーにより取得されていると、ACQUIRE文の実行に失敗します。WAITキーワードを指定した場合、consistency_objectsのオブジェクトのうち、読取り/書込みモードで他のユーザーにより取得されているオブジェクトがなくなるか、タイムアウトするまでOracle OLAPがACQUIRE文の実行を待機します。

使用上の注意

一貫性の理解

CONSISTENT WITH句を含むACQUIRE文は、ある面ではACQUIRE文とRELEASE文の組合せと考えることができます。

ACQUIRE [avar...] RESYNC [rvar ...] cvar ... [WAIT]
RELEASE cvar ...

違いは、ACQUIRE CONSISTENT WITH文の実行は、ユーザーにcvar変数を取得する十分な権限がなくても成功するという点です。

障害およびエラー処理

ACQUIRE文のすべての句が成功しなければ、ACQUIRE文は失敗します。そのため、要求されたオブジェクトのすべてが取得されるか、まったく取得されないかのどちらかになります。

読取り/書込みモードでオブジェクトを取得できるのは一度に1ユーザーのみです。オブジェクトは、最初に読取り専用モードで取得した後、別のユーザーが読取り専用モードで同じオブジェクトを取得していなければ、そのオブジェクトを先に解放することなく読取り/書込みモードで取得できます。ただし、他のユーザーが読取り専用モードでオブジェクトを取得している場合、そのユーザーがオブジェクトを解放しないかぎり、同じオブジェクトを読取り/書込みモードで取得することはできません。指定したオブジェクトが他のユーザーにより取得された場合か、指定したオブジェクトの読取り専用の世代がオブジェクトの最新の世代ではない場合、ACQUIRE文が失敗します。

また、RESYNC句またはCONSISTENT句にWAITを指定した場合は、ACQUIRE文の完了に時間がかかることがあります。待機中に、取得リストの一部の変数が、他の変数が取得されるにもかかわらず解放されることがあります。ACQUIRE文がタイムアウト・エラーで失敗する原因となるデッドロックが発生する可能性もあります。

デッドロックによる問題を回避するには、ACQUIRE文およびRELEASE文をコーディングする順番に注意して、適切なエラー処理ルーチンを含めてください。

例9-1 オブジェクトの取得、更新および解放

マルチライタ・アタッチ・モードの従来の使用法では、2人のユーザーが同じアナリティック・ワークスペース内にある異なる2つのオブジェクトを変更できます。たとえば、アナリティック・ワークスペースに2つの変数actualsおよびbudgetがあるとします。ユーザーAがactualsを変更し、ユーザーBがbudgetを変更しようとします。この場合、アナリティック・ワークスペースをマルチライタ・モードでアタッチした後、各ユーザーは必要な変数を取得して必要な変更を行い、変更を更新およびコミットしてから、ワークスペースをデタッチするか、取得した変数を解放します。

ユーザーAは次の文を実行します。

AW ATTACH myworkspace MULTI
ACQUIRE actuals
... make modifications
UPDATE MULTI actuals
COMMIT
RELEASE actuals
AW DETACH myworkspace

一方で、ユーザーBは同時に次の文を実行します。

AW ATTACH myworkspace MULTI
ACQUIRE budget
... make modifications
UPDATE MULTI budget
COMMIT
RELEASE budget
AW DETACH myworkspace

例9-2 オブジェクトの取得および再同期化

B1およびB2という2人のユーザーが、どちらもbudgetのwhat-if分析で変更を行う必要があり、その結果が適切であった場合に自分の担当部分のbudgetを修正するとします。どちらのユーザーも、別のユーザーが同時にbudgetにアクセスする必要があるかどうか、またはbudgetに永続的な変更を行う必要があるかどうかがわかりません。そのため、what-if分析の変更を行う際に他のユーザーをブロックしたくないと考えます。

この場合、アナリティック・ワークスペースをマルチライタ・モードでアタッチした後、両方のユーザーがbudgetを取得せずにそれぞれのwhat-if計算を実行します。その後でwhat-if分析の変更を永続的にすることを決定したら、budgetを非同期化モードで取得します。取得に成功したら、budgetを更新して変更内容をコミットします。次のOLAP DML文は、この使用例を示しています。

AW ATTACH myworkspace MULTI
...perform what-if computations
ACQUIRE budget
...maybe make some additional final changes
UPDATE MULTI budget
COMMIT
RELEASE budget
AW DETACH myworkspace

ただし、最初の取得に成功しなかった場合、ユーザーは再同期化モードで再度budgetの取得を試みます(待機を要求する場合もあります)。再同期化モードでの取得に成功した場合、変更内容を再作成し(関連する数字の一部が変更された可能性があるため)、次に各ユーザーのアナリティック・ワークスペースを更新およびコミットします。次のOLAP DML文は、この使用例を示しています。

AW ATTACH myworkspace MULTI
... perform what-if computations
ACQUIRE budget
...maybe make some additional final changes
UPDATE MULTI budget
COMMIT
RELEASE budget
AW DETACH myworkspace
AW ATTACH myworkspace MULTI
...perform what-if computations 
ACQUIRE budget --> failed
ACQUIRE RESYNC budget WAIT
...determine that the changes are still needed
...make changes to make permanent
UPDATE MULTI budget
COMMIT
RELEASE budget
AW DETACH myworkspace

例9-3 一貫性を保持する場合のオブジェクトの取得

場合によっては、一部のオブジェクトの相互の一貫性を保持する必要があります。その場合、マルチライタ・モードでの特別の注意が必要となります。

ユーザーB1およびユーザーB2の2人のユーザーがどちらもbudgetを変更する必要があり、budgetinvestmentとの一貫性を保持する必要がある場合に、別のユーザー(ユーザーI)がinvestmentを変更する必要があるとします。この使用例では、どのユーザーもbudgetinvestmentの両方を変更する必要はありませんが、すべてのユーザーは自分がbudgetまたはinvestmentのどちらかを取得する際に、budgetまたはinvestmentが他のユーザーによりその時点で取得されていないことを確認する必要があります。この条件を満たすため、次のサンプル・コードに示すように、各ユーザーがCONSISTENT WITH句を含むACQUIRE文を発行する必要があります。すべてのユーザーは、CONSISTENT句にリストされているオブジェクトが、必要な場合はACQUIRE文により再同期化される場合があることを認識しておく必要があります。

たとえば、ユーザーB1は次のOLAP DML文を発行します。

AW ATTACH myworkspace MULTI
... perform what-if computations
ACQUIRE budget CONSISTENT WITH investment
... maybe make some additional final changes
UPDATE MULTI budget
COMMIT
RELEASE budget, investment
AW DETACH myworkspace

ユーザーB2は、次のOLAP DML文を発行します。

AW ATTACH myworkspace MULTI
... perform what-if computations 
ACQUIRE budget CONSISTENT WITH investment --> failed
ACQUIRE RESYNC budget CONSISTENT WITH investment WAIT
... determine that the changes are still needed
... make changes to make permanent
UPDATE MULTI budget
COMMIT
RELEASE budget, investment
AW DETACH myworkspace

ユーザーIは、次のOLAP DML文を発行します。

AW ATTACH myworkspace MULTI
ACQUIRE investment CONSISTENT WITH budget --> failed
ACQUIRE RESYNC investment CONSISTENT WITH budget WAIT
... make changes to investment
UPDATE MULTI investment
COMMIT
RELEASE budget, investment
AW DETACH myworkspace