キャッシュされたOracle Database表に対して発行されたDDL文の追跡

キャッシュされたOracle Database表に対してDDL文が発行されタ場合、Oracle DatabaseのTT_version_schema-ID_DDL_Tトリガーが起動されて表に行が挿入されると、その文はTT_version_DDL_L表で追跡できます。versionはTimesTenの内部バージョン番号、schema-IDはキャッシュされたOracle Database表を所有するユーザーのIDです。

トリガーは、キャッシュされたOracle Database表を所有するOracle Databaseユーザーごとに作成されます。DDL追跡表が1つ作成され、キャッシュされたすべてのOracle Database表に対して発行されたDDL文が格納されます。Oracleキャッシュ管理ユーザーは、TT_version_DDL_L表およびTT_version_schema-ID_DDL_Tトリガーを所有します。

デフォルトでは、DDL文は追跡されません。TimesTenで、キャッシュされたOracle Database表に対して発行されたDDL文を追跡できるようにし、TimesTenキャッシュ管理ユーザーとしてttCacheDDLTrackingConfig組込みプロシージャをコールします。次の例では、キャッシュされたOracle Database表に対して発行されたDDL文の追跡を有効にします。

% ttIsql "DSN=cache1;UID=cacheadmin;PwdWallet=/wallets/cacheadminwallet"
Command> CALL ttCacheDDLTrackingConfig('enable');

TT_version_DDL_L表およびTT_version_schema-ID_DDL_Tトリガーは、CREATE TRIGGERCREATE SEQUENCECREATE TYPECREATE PROCEDURECREATE TABLECREATE ANY TRIGGERなどの一連の必要な権限がOracleキャッシュ管理ユーザーに付与されている場合に自動的に作成されます。DDL文の追跡が有効化されている場合、キャッシュ・グループを作成したとき、これらのOracle Databaseオブジェクトが作成されます。

TimesTen Classicで、Oracle Databaseデータのキャッシュを管理するために使用するOracle Databaseオブジェクトを手動で作成した場合は、TimesTenキャッシュ管理ユーザーとして、ttIsqlユーティリティのcachesqlgetコマンドにORACLE_DDL_TRACKINGオプションおよびINSTALLフラグを指定して実行する必要があります。このコマンドは、DDL文を追跡する対象のキャッシュされたOracle Database表を所有するOracle Databaseユーザーごとに実行する必要があります。このコマンドを実行すると、Oracle DatabaseでTT_version_DDL_L表およびTT_version_schema-ID_DDL_Tトリガーを作成するために使用するSQL*Plusスクリプトが生成されます。

スクリプトの生成後、SQL*Plusを使用してsysユーザーとしてスクリプトを実行します。

次の例では、Oracle Databaseオブジェクトを手動で作成すると、DDL追跡表およびトリガーを作成します。この例では、ttIsqlユーティリティのcachesqlgetコマンドによって生成されるSQL*Plusスクリプトは、/tmp/trackddl.sqlファイルに保存されます。キャッシュされたOracle Database表salesの所有者が、引数としてこのコマンドに渡されます。

% ttIsql "DSN=cache1;UID=cacheadmin;PwdWallet=/wallets/cacheadminwallet"
Command> cachesqlget ORACLE_DDL_TRACKING sales INSTALL /tmp/trackddl.sql;
Command> exit

% sqlplus sys as sysdba
Enter password: password
SQL> @/tmp/trackddl
SQL> exit

Oracleキャッシュ管理ユーザーとしてttCacheInfoユーティリティまたはtimesten_home/install/oraclescripts/cacheInfo.sql SQL*Plusスクリプトを実行し、キャッシュされたOracle Database表で発行されたDDL文を追跡するのに使用するOracle Databaseオブジェクトに関する情報を表示します。次の例では、cacheInfo.sql SQL*Plusスクリプトを実行します。

% cd timesten_home/install/oraclescripts
% sqlplus cacheadmin/orapwd
SQL> @cacheInfo.sql
***************** Database Information	*********************
Database name: DATABASE1
Unique database name: database1
Primary database name:
Database Role: PRIMARY
Database Open Mode: READ WRITE
Database Protection Mode: MAXIMUM PERFORMANCE
Database Protection Level: UNPROTECTED
Database Flashback On: NO
Database Current SCN: 21512609
*************************************************************
*************Autorefresh Objects Information  ***************
Grid name: grid1 (7D03C680-BD93-4233-A4CF-B0EDB0064F3F)
Timesten database name: database1
Cache table name: SALES.CUSTOMERS
Change log table name: tt_07_96977_L
Number of rows in change log table: 4
Maximum logseq on the change log table: 1
Timesten has autorefreshed updates upto logseq: 1
Number of updates waiting to be autorefreshed: 0
Number of updates that has not been marked with a valid logseq: 0
*************DDL Tracking Object Information  ***************
Common DDL Log Table Name: TT_07_DDL_L
DDL Trigger Name: TT_07_315_DDL_T
Schema for which DDL Trigger is tracking: SALES
Number of cache groups using the DDL Trigger: 10
****************************
 
PL/SQL procedure successfully completed.

キャッシュされたOracle Database表を所有するOracle Databaseユーザーごとに戻される情報には、DDL追跡表の名前、その対応するDDLトリガーの名前、DDLトリガーが関連付けられているユーザーの名前、DDLトリガーに関連付けられているユーザーが所有する表をキャッシュするキャッシュ・グループの数などがあります。

1つのキャッシュ・グループに複数のキャッシュ表が含まれている場合、DDLトリガーに関連付けられているユーザーが所有する各キャッシュ表がキャッシュ・グループの数にカウントされます。

このマニュアルの「キャッシュ用のSQL*Plusスクリプト」および『Oracle TimesTen In-Memory Databaseリファレンス』ttCacheDDLTrackingConfigおよびttCacheInfoを参照してください。