同期ライトスルー(SWT)キャッシュ・グループ
同期ライトスルー(SWT)キャッシュ・グループでは、TimesTenキャッシュ表にコミットされた変更が、キャッシュされたOracle Database表に自動的に同期して伝播されるというキャッシュ動作が実行されます。
図4-7を参照してください。
SWTキャッシュ・グループをサポートしているのは、TimesTen Classicのみです。
ノート:
SWTキャッシュ・グループにキャッシュされているOracle Database表では、DML文を実行することは避けてください。実行すると、エラー状態になる場合があります。「SWTキャッシュ・グループの使用の制限」を参照してください。
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キャッシュ・グループの場合、必要な権限は、キャッシュされた表に対するSELECT
、INSERT
、UPDATE
および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ウォレット、またはUID
、PWD
およびOraclePwd
接続属性で指定できます。SWTキャッシュ・グループ処理を管理する場合、TimesTenは、ttCacheUidPwdSet
組込みプロシージャを使用して登録されたOracleキャッシュ管理ユーザー名とパスワードを使用してOracle Databaseに接続しません。「接続時のキャッシュ管理ユーザー資格証明の指定」および「キャッシュ管理ユーザーの名前およびパスワードの登録」を参照してください。