READONLYキャッシュ・グループおよび一部のUSERMANAGEDキャッシュ・グループは、AUTOREFRESH機能を使用してOracle更新をTimesTenキャッシュに自動的に伝播されます。
キャッシュ・グループには、完全自動リフレッシュまたは増分自動リフレッシュのいずれかを設定できます(「AUTOREFRESHキャッシュ・グループ属性」を参照)。増分自動リフレッシュ用に設定した場合、TimesTenでは、キャッシュ・グループで指定された各Oracle実表に対して、トリガー、ログ表などのオブジェクトを作成する必要があります。トリガーは、Oracle実表で挿入、更新および削除処理を行うたびに起動されます。また、更新されたレコードの主キーをログ表に記録します。TimesTenキャッシュ・エージェントは、定期的にログ表で更新キーを検索し、更新されたOracle実表を結合して最新の更新のスナップショットを取得します。
自動リフレッシュに必要なOracleオブジェクトは、AUTOREFRESH INCREMENTAL属性が設定されたキャッシュ・グループの作成時に自動的にインストールされます(「Oracleオブジェクトの自動インストール」を参照)。また、Oracleオブジェクトを手動でインストールして、限定されたOracle権限を持つユーザーのみが、トリガーを使用するキャッシュ・グループを作成できるようにすることもできます(「Oracleオブジェクトの手動インストール」を参照)。
Oracleオブジェクトをインストールする前に、次のタスクを実行する必要があります。
TimesTenは、各キャッシュ管理ユーザーに対して次の表を作成します。ここで、versionは、TimesTenの内部バージョン番号です。
TimesTenは、キャッシュ・グループの各表に対して次のオブジェクトを作成します。ここで、numberは元のOracle表のオブジェクトID、versionはTimesTenの内部バージョン番号です。
オブジェクト | 説明 |
TT_version_number_L | Oracle表に対して行われた変更を記録するための変更ログ表。 |
TT_version_number_T | 変更ログ表に変更を記録するためのトリガー。トリガーは、キャッシュされた表で挿入、削除、更新が行われると起動されます。 |
AWTキャッシュ・グループの場合は、追加のOracleオブジェクトが必要です。TT_version_REPPPEERSという表がOracle上に作成され、状態およびOracleに最後に適用された文が追跡されます。この表は、CREATE ASYNCHRONOUS WRITETHROUGH CACHE GROUP文によって自動的に作成されます。このOracle表は、AWTキャッシュ・グループが作成される前に手動で作成することもできます。「AWTキャッシュ・グループ用のOracleオブジェクトの手動インストール」を参照してください。
AWTキャッシュ・グループがアクティブ・スタンバイ・ペアのレプリケーション・スキームの一部である場合は、そのアクティブ・スタンバイ・ペアの作成時に、TT_version_REPACTIVESTANDBYという表がOracle上に自動的に作成されます。
TimesTenは、次の表のユーザーPUBLICに対してSELECT、INSERT、UPDATEおよびDELETE権限を付与します。
この項の後半では、次の内容について説明します。
TimesTenで、Oracleオブジェクトを自動的にインストールするようにするには、Oracleオブジェクトの自動作成に必要なすべての権限がキャッシュ管理ユーザーに付与されていることを確認します。「Oracleユーザーの作成および権限の設定」を参照してください。Oracleオブジェクトは、PAUSEDまたはONの状態でキャッシュ・グループが作成されるか、またはキャッシュ・グループの状態がPAUSEDまたはONに変更されると、自動的に作成されます。
例3.26に、TimesTenで、READONLYキャッシュ・グループ用のOracleオブジェクトを自動的にインストールする方法を示します。
> ttIsql cgDSN
Command> call ttCacheUidPwdSet('testuser','mypsswrd');
Command> call ttCacheStart();
Command> CREATE READONLY CACHE GROUP readcache
FROM
user1.readtab
(a NUMBER NOT NULL PRIMARY KEY, b VARCHAR2(31));
例3.27に、TimesTenで、AWTキャッシュ・グループ用のOracleオブジェクトを自動的にインストールする方法を示します。
> ttIsql cgDSN
Command> call ttCacheUidPwdSet('testuser','mypsswrd');
Command> call ttCacheStart();
Command> CREATE ASYNCHRONOUS WRITETHROUGH CACHE GROUP writecache
FROM user1.writetab (a NUMBER NOT NULL PRIMARY KEY,
b VARCHAR2(31));
Oracleオブジェクトの自動インストールに必要なすべてのCREATE権限をユーザーに付与しない場合は、Oracleオブジェクトを手動でインストールして、AUTOREFRESH INCREMENTAL属性を使用するキャッシュ・グループおよびAWTキャッシュ・グループを限定された権限を持つユーザーが作成できるようにします。詳細は、「AWTキャッシュ・グループ用のOracleオブジェクトの手動インストール」を参照してください。
Oracleでオブジェクトを作成するために必要なOracle拡張権限については、「Oracleユーザーの作成および権限の設定」を参照してください。オブジェクトのインストーラには、自動インストール・オプションを選択したユーザーと同じOracle権限が付与されている必要があります。
Oracleオブジェクトの作成に必要なSQLコードは、次のいずれかの方法でTimesTenから取得します。
cachesqlget
コマンドを入力します。注意: | OracleオブジェクトをインストールするSQLコードの取得時に、オブジェクトを削除するSQLコードを取得するスクリプトを生成する必要もあります(「Oracleオブジェクトの削除」を参照)。このスクリプトは、後で使用するために保存します。 |
SQLコードを取得した後、Oracleのホスト・マシン上でSQL*Plusを起動してログインすることによって、Oracleオブジェクトを手動で作成できます。
sqlplus cacheUid/cachePwd@machine_name
SQL>
プロンプトで、SQLコードを入力してオブジェクトを作成します。
ttIsqlを使用してデータ・ストアに接続してから、ttCacheStartプロシージャをコールしてデータ・ストアのキャッシュ・エージェントを起動します。キャッシュ管理ユーザーIDはtestuser、パスワードはmypsswrdです。次に、CREATE CACHE GROUPを使用してAUTOREFRESH STATEがOFFに設定されたREADONLYキャッシュ・グループを作成し、cachesqlget
コマンドを実行して、Oracleオブジェクトのインストールに必要なSQLを取得します。
> ttIsql cgDSN
Command> call ttCacheUidPwdSet('testuser', 'mypsswrd');
Command> call ttCacheStart();
Command> CREATE READONLY CACHE GROUP readcache
AUTOREFRESH
MODE INCREMENTAL
INTERVAL 30 SECONDS
STATE OFF
FROM user1.readtab
(a NUMBER NOT NULL PRIMARY KEY, b VARCHAR2(31));
Command> cachesqlget readcache install;
cachesqlget
からの出力は次のようになります。
CREATE TABLE system.tt_version_user_count(tableName VARCHAR2(65), userCount
.... more code .....
END;
.
RUN;
SQLは、TimesTenから切り取ってOracle上のSQL*Plusプロンプトに貼り付けることができます。
SQL> CREATE TABLE system.tt_version_user_count(tableName VARCHAR2(65), userCount
.... more code .....
END;
.
RUN;
また、ttIsqlでコマンドラインに出力ファイル名を指定して、cachesqlget
出力をファイルに保存することもできます。その後、そのファイルをOracleシステムにコピーしてOracleシステムで実行すると、Oracleオブジェクトをインストールできます。
注意: | Oracleオブジェクトを手動でインストールした場合は、手動で削除する必要があります。詳細は、「Oracleオブジェクトの削除」を参照してください。 |
AWTキャッシュ・グループ用のOracleオブジェクトを手動でインストールする場合は、そのオブジェクトをインストールしてからOracleインスタンス用のAWTキャッシュ・グループを作成する必要があります。このオブジェクトは、Oracleインスタンスおよびキャッシュ管理ユーザーIDとパスワードそれぞれに対して一度のみインストールする必要があります。
AWTキャッシュ・グループ用のOracleオブジェクトをインストールするには、次の手順を実行します。
cgDSN
です。NULL結果は、cgDSN
に設定されているキャッシュ管理ユーザーIDまたはパスワードが存在しないことを示します。> ttIsql cgDSN
Command> call ttCacheUidGet();
< <NULL> >
1 row found.
testuser
、パスワードをmypsswrd
に設定した後、そのように設定されたことを確認しています。Command> call ttCacheUidPwdSet('testuser','mypsswrd');
Command> call ttCacheUidGet();
< testuser >
cachesqlget
コマンドを使用することによって、オブジェクトをインストールするSQLを取得します。Command> cachesqlget ASYNCHRONOUS_WRITETHROUGH INSTALL;
出力は次のようになります。
CREATE TABLE testuser.TT_03_RepPeers(
replication_name CHAR(31) NOT NULL,
replication_owner CHAR(31) NOT NULL,
tt_store_id NUMBER(19,0) NOT NULL,
subscriber_id NUMBER(19,0) NOT NULL,
commit_timestamp NUMBER(19,0),
commit_seqnum NUMBER(19,0),
timerecv NUMBER(10,0),
protocol NUMBER(10,0),
PRIMARY KEY(tt_store_id));
GRANT INSERT, UPDATE, DELETE, SELECT
ON testuser.TT_03_RepPeers TO PUBLIC;
CREATE TABLE testuser.TT_03_RepActiveStandby(
tt_store_pair INTEGER NOT NULL,
tt_store_id1 NUMBER(19,0) NOT NULL,
tt_store_id2 NUMBER(19,0) NOT NULL,
ts1 NUMBER(19,0),
ts2 NUMBER(19,0),
role1 CHAR(1),
role2 CHAR(1),
state NUMBER(10,0),
rep_checksum NUMBER(19,0),
PRIMARY KEY(tt_store_pair));
CREATE INDEX testuser.TT_03_RepActiveStandby_ix
ON testuser.TT_03_RepActiveStandby
( tt_store_id1, tt_store_id2 );
GRANT INSERT, UPDATE, DELETE, SELECT
ON testuser.TT_03_RepActiveStandby TO PUBLIC;
AWTキャッシュ・グループがアクティブ・スタンバイ・ペアにレプリケートされる場合は、TT_version_REPACTIVESTANDBYおよびTT_version_REPACTIVESTANDBY_IXを作成します。
注意: | Oracleオブジェクトを手動でインストールした場合は、手動で削除する必要があります。詳細は、「AWTキャッシュ・グループ用のOracleオブジェクトの手動削除」を参照してください。 |
オブジェクトがOracleにインストールされていることを確認するには、OracleアカウントにログインしてOracleのSQL *Plusコマンド・プロンプトから次の問合せを実行します。
SQL> select owner, object_name, object_type from all_objects where object_name like 'TT\___\_%' escape '\';
次のようなオブジェクトが出力されます。
OWNER OBJECT_NAME OBJECT_TYPE
------------- ------------------------------ ------------------
TESTUSER TT_03_34520_L TABLE
TESTUSER TT_03_34520_T TRIGGER
TESTUSER TT_03_USER_COUNT TABLE
TESTUSER TT_03_REPPEERS TABLE
OracleオブジェクトがCache Connect to Oracleによって自動的にインストールされた場合(「Oracleオブジェクトの自動インストール」を参照)は、AUTOREFRESHをOFFに設定するか、またはDROP CACHE GROUPを使用してキャッシュ・グループを削除すると、Oracleオブジェクトは自動的に削除されます。
Oracleオブジェクトを手動でインストールした場合(「Oracleオブジェクトの手動インストール」を参照)は、アンインストールするコードを実行することによって、Oracleシステムからオブジェクトを削除できます。TimesTenからuninstallコードを取得するには、次のいずれかの手順を実行します。
Oracleインスタンスを使用するすべてのデータ・ストアからすべてのAWTキャッシュ・グループを削除した後で、AWTキャッシュ・グループ用のOracleオブジェクトを削除します。
cachesqlget
コマンドを実行して、オブジェクトを削除するSQLを取得します。次の例では、DSNはcgDSN
、ユーザーはtestuser
です。> ttIsql cgDSN
Command> cachesqlget ASYNCHRONOUS_WRITETHROUGH UNINSTALL;
出力は次のようになります。
DROP TABLE testuser.TT_03_RepPeers;
DROP TABLE testuser.TT_03_RepActiveStandby;