同期ライトスルー(SWT)キャッシュ・グループ

同期ライトスルー(SWT)キャッシュ・グループでは、TimesTenキャッシュ表にコミットされた変更が、キャッシュされたOracle Database表に自動的に同期して伝播されるというキャッシュ動作が実行されます。

図4-7を参照してください。

SWTキャッシュ・グループをサポートしているのは、TimesTen Classicのみです。

ノート:

SWTキャッシュ・グループにキャッシュされているOracle Database表では、DML文を実行することは避けてください。実行すると、エラー状態になる場合があります。「SWTキャッシュ・グループの使用の制限」を参照してください。

図4-7 同期ライトスルー・キャッシュ・グループ

図4-7の説明が続きます。
「図4-7 同期ライトスルー・キャッシュ・グループ」の説明

TimesTenデータベースでのトランザクションのコミットは、Oracle Databaseでのコミットと同期して実行されます。アプリケーションによってTimesTenデータベースでトランザクションがコミットされると、このトランザクションは、TimesTenで処理される前にOracle Databaseで処理されます。Oracle DatabaseとTimesTenデータベースの両方でトランザクションが完了するまで、アプリケーションはブロックされます。

トランザクションがOracle Databaseでのコミットに失敗した場合、アプリケーションはTimesTenでトランザクションをロールバックする必要があります。Oracle Databaseトランザクションのコミットが成功し、TimesTenトランザクションのコミットが失敗した場合、SWTキャッシュ・グループ内のキャッシュ表は、キャッシュされたOracle Database表と同期化されなくなります。

ノート:

伝播された更新をコミットする際に、TimesTenデータベースとOracleデータベースの両方でコミットが発生する仕組みにおける動作およびエラー状態は、「PROPAGATEキャッシュ表属性」で説明されているPROPAGATEキャッシュ属性を持つユーザー管理キャッシュ・グループに対するのと同じコミット・プロセスです。

キャッシュされたOracle Database表とキャッシュ表を手動で再同期化するには、ttCachePropagateFlagSet組込みプロシージャをコールして更新の伝播を無効にしてから、TimesTenでトランザクションのコミットが失敗した原因となった問題を修正した後、TimesTenデータベースでトランザクションを再発行します。次に、ttCachePropagateFlagSet組込みプロシージャをコールして、更新の伝播を再度有効化します。また、付随するキャッシュ・グループをリロードすることによって、キャッシュされたOracle Database表とキャッシュ表を再同期化することもできます。

次に、サンプルのSWTキャッシュ・グループにキャッシュされるOracle Database表の定義の例を示します。Oracle Database表は、スキーマ・ユーザーsalesが所有しています。

CREATE TABLE product
(prod_num    VARCHAR2(6) NOT NULL PRIMARY KEY,
 name        VARCHAR2(30),
 price       NUMBER(8,2),
 ship_weight NUMBER(4,1));

Oracleキャッシュ管理ユーザーcacheadminには、キャッシュ・グループの作成時に特定の権限を付与する必要があります。SWTキャッシュ・グループの場合、必要な権限は、キャッシュされた表に対するSELECTINSERTUPDATEおよびDELETE権限です。この例では、表はsales.product表です。

様々なアクティビティに必要なすべての権限は、「キャッシュ処理のキャッシュ管理ユーザーに必要な権限」を参照してください。

Oracle Databaseで、管理者として次の権限を付与します:

SQL> GRANT SELECT, INSERT, UPDATE, DELETE ON sales.product TO cacheadmin;

TimesTenデータベースの場合:

TimesTenキャッシュ管理ユーザーとして接続します。SWTキャッシュ・グループを作成するには、CREATE SYNCHRONOUS WRITETHROUGH CACHE GROUP文を使用します。

次の文では、sales.product表をキャッシュする同期ライトスルー・キャッシュ・グループtop_productsが作成されます:

CREATE SYNCHRONOUS WRITETHROUGH CACHE GROUP top_products
FROM sales.product
 (prod_num    VARCHAR2(6) NOT NULL,
  name        VARCHAR2(30),
  price       NUMBER(8,2),
  ship_weight NUMBER(4,1),
  PRIMARY KEY(prod_num));

TimesTenは、SWTキャッシュ・グループの処理を管理する場合、接続文字列に指定された現在のユーザーの資格証明を使用してOracle Databaseに接続します。現在のユーザーの資格証明は、PwdWallet接続属性で示されるOracleウォレット、またはUIDPWDおよびOraclePwd接続属性で指定できます。SWTキャッシュ・グループ処理を管理する場合、TimesTenは、ttCacheUidPwdSet組込みプロシージャを使用して登録されたOracleキャッシュ管理ユーザー名とパスワードを使用してOracle Databaseに接続しません。「接続時のキャッシュ管理ユーザー資格証明の指定」および「キャッシュ管理ユーザーの名前およびパスワードの登録」を参照してください。