ヘッダーをスキップ
Oracle TimesTen Cache Connect to Oracle開発者および管理者ガイド
リリース7.0
E05172-03
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

READONLY、AUTOREFRESHおよびAWTキャッシュ・グループのOracleオブジェクトの管理

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権限を付与します。

この項の後半では、次の内容について説明します。

Oracleオブジェクトの自動インストール

TimesTenで、Oracleオブジェクトを自動的にインストールするようにするには、Oracleオブジェクトの自動作成に必要なすべての権限がキャッシュ管理ユーザーに付与されていることを確認します。「Oracleユーザーの作成および権限の設定」を参照してください。Oracleオブジェクトは、PAUSEDまたはONの状態でキャッシュ・グループが作成されるか、またはキャッシュ・グループの状態がPAUSEDまたはONに変更されると、自動的に作成されます。

例3.26に、TimesTenで、READONLYキャッシュ・グループ用のOracleオブジェクトを自動的にインストールする方法を示します。

  1. ttIsqlを使用してcgDSNデータ・ストアに接続します。
  2. ttCacheUidPwdSetプロシージャをコールして、キャッシュ管理ユーザーID(testuser)およびパスワード(mypsswrd)を設定します。
  3. ttCacheStartプロシージャをコールしてキャッシュ・エージェントを起動します。
  4. CREATE READONLY CACHE GROUPを使用してREADONLYキャッシュ・グループを作成します。このキャッシュ・グループでは、AUTOREFRESH INCREMENTALおよびSTATEがデフォルトでPAUSEDに設定されています。
例3.26

> 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オブジェクトを自動的にインストールする方法を示します。

例3.27

> 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オブジェクトの手動インストール

Oracleオブジェクトの自動インストールに必要なすべてのCREATE権限をユーザーに付与しない場合は、Oracleオブジェクトを手動でインストールして、AUTOREFRESH INCREMENTAL属性を使用するキャッシュ・グループおよびAWTキャッシュ・グループを限定された権限を持つユーザーが作成できるようにします。詳細は、「AWTキャッシュ・グループ用のOracleオブジェクトの手動インストール」を参照してください。

Oracleでオブジェクトを作成するために必要なOracle拡張権限については、「Oracleユーザーの作成および権限の設定」を参照してください。オブジェクトのインストーラには、自動インストール・オプションを選択したユーザーと同じOracle権限が付与されている必要があります。

Oracleオブジェクトの作成に必要なSQLコードは、次のいずれかの方法でTimesTenから取得します。

SQLコードを取得した後、Oracleのホスト・マシン上でSQL*Plusを起動してログインすることによって、Oracleオブジェクトを手動で作成できます。

sqlplus cacheUid/cachePwd@machine_name

SQL>プロンプトで、SQLコードを入力してオブジェクトを作成します。

例3.28

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オブジェクトの手動インストール

AWTキャッシュ・グループ用のOracleオブジェクトを手動でインストールする場合は、そのオブジェクトをインストールしてからOracleインスタンス用のAWTキャッシュ・グループを作成する必要があります。このオブジェクトは、Oracleインスタンスおよびキャッシュ管理ユーザーIDとパスワードそれぞれに対して一度のみインストールする必要があります。

AWTキャッシュ・グループ用のOracleオブジェクトをインストールするには、次の手順を実行します。

  1. ttIsqlセッション内でttCacheUidGetプロシージャを使用して、キャッシュ管理ユーザーIDおよびパスワードがすでに設定されているかどうかを確認します。次の例では、DSNはcgDSNです。NULL結果は、cgDSNに設定されているキャッシュ管理ユーザーIDまたはパスワードが存在しないことを示します。
  2. > ttIsql cgDSN

    Command> call ttCacheUidGet();

    < <NULL> >

    1 row found.

  3. ttCacheUidPwdSet(uid,pwd)を使用してキャッシュ管理ユーザーIDおよびパスワードを設定します。次の例では、ttIsqlセッション内からキャッシュ管理ユーザーIDをtestuser、パスワードをmypsswrdに設定した後、そのように設定されたことを確認しています。
  4. Command> call ttCacheUidPwdSet('testuser','mypsswrd');

    Command> call ttCacheUidGet();

    < testuser >

  5. ASYNCHRONOUS_WRITETHROUGHおよびINSTALLフラグを指定してttIsql cachesqlgetコマンドを使用することによって、オブジェクトをインストールするSQLを取得します。
  6. 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;

  7. SQLコードを切り取ってSQL*Plusセッションに貼り付け、TT_version_REPPEERSを作成します。また、このコードは、PassThrough属性を3に設定してTimesTen接続上のODBCまたはJDBCプログラムから実行することもできます。
  8. AWTキャッシュ・グループがアクティブ・スタンバイ・ペアにレプリケートされる場合は、TT_version_REPACTIVESTANDBYおよびTT_version_REPACTIVESTANDBY_IXを作成します。


    注意: Oracleオブジェクトを手動でインストールした場合は、手動で削除する必要があります。詳細は、「AWTキャッシュ・グループ用のOracleオブジェクトの手動削除」を参照してください。

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オブジェクトの削除

OracleオブジェクトがCache Connect to Oracleによって自動的にインストールされた場合(「Oracleオブジェクトの自動インストール」を参照)は、AUTOREFRESHをOFFに設定するか、またはDROP CACHE GROUPを使用してキャッシュ・グループを削除すると、Oracleオブジェクトは自動的に削除されます。

Oracleオブジェクトを手動でインストールした場合(「Oracleオブジェクトの手動インストール」を参照)は、アンインストールするコードを実行することによって、Oracleシステムからオブジェクトを削除できます。TimesTenからuninstallコードを取得するには、次のいずれかの手順を実行します。

AWTキャッシュ・グループ用のOracleオブジェクトの手動削除

Oracleインスタンスを使用するすべてのデータ・ストアからすべてのAWTキャッシュ・グループを削除した後で、AWTキャッシュ・グループ用のOracleオブジェクトを削除します。

  1. ttIsqlセッションからcachesqlgetコマンドを実行して、オブジェクトを削除するSQLを取得します。次の例では、DSNはcgDSN、ユーザーはtestuserです。
  2. > ttIsql cgDSN

    Command> cachesqlget ASYNCHRONOUS_WRITETHROUGH UNINSTALL;

    出力は次のようになります。

    DROP TABLE testuser.TT_03_RepPeers;

    DROP TABLE testuser.TT_03_RepActiveStandby;

  3. SQL*PlusセッションにSQLコードを切り取って貼り付けて、オブジェクトを削除します。このコードは、PassThrough属性を3に設定してTimesTen接続上のODBCまたはJDBCプログラムから実行することもできます。