この章では、キャッシュ・グリッド、キャッシュ・グループ、キャッシュ・エージェント・プロセスなどキャッシュ・システムの様々な側面を管理および監視する方法について説明します。内容は次のとおりです。
ttAdmin
ユーティリティまたはttStatus
ユーティリティを使用すると、TimesTenキャッシュ・エージェント・プロセスおよびレプリケーション・エージェント・プロセスが実行されているかどうかをチェックできる以外に、各エージェントの起動ポリシーを確認できます。
例7-1 ttAdminによるキャッシュ・エージェントおよびレプリケーション・エージェントのステータスの確認
ttAdmin -query
ユーティリティ・コマンドを使用すると、キャッシュ・エージェントおよびレプリケーション・エージェントが実行されているかどうか、およびTimesTenデータベース用のキャッシュ・エージェントとレプリケーション・エージェントの起動ポリシーを確認できます。
% ttAdmin -query cachealone1 RAM Residence Policy : inUse Replication Agent Policy : manual Replication Manually Started : True Cache Agent Policy : always Cache Agent Manually Started : True
ttAdmin
ユーティリティの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttAdminに関する説明を参照してください。
例7-2 ttStatusによるキャッシュ・エージェントおよびレプリケーション・エージェントのステータスの確認
ttStatus
ユーティリティを使用すると、キャッシュ・エージェントおよびレプリケーション・エージェントが実行されているかどうか、およびインストール済インスタンスにおける、すべてのTimesTenデータベース用のキャッシュ・エージェントとレプリケーション・エージェントの起動ポリシーを確認できます。
% ttStatus TimesTen status report as of Thu May 7 13:42:01 2009 Daemon pid 9818 port 4173 instance myinst TimesTen server pid 9826 started on port 4175 ------------------------------------------------------------------------ Data store /users/OracleCache/alone1 There are 38 connections to the data store Shared Memory KEY 0x02011c82 ID 895844354 PL/SQL Memory KEY 0x03011c82 ID 895877123 Address 0x10000000 Type PID Context Connection Name ConnID Cache Agent 1019 0x0828f840 Handler 2 Cache Agent 1019 0x083a3d40 Timer 3 Cache Agent 1019 0x0842d820 Aging 4 Cache Agent 1019 0x08664fd8 Garbage Collector(-1580741728) 5 Cache Agent 1019 0x084d6ef8 Marker(-1580213344) 6 Cache Agent 1019 0xa5bb8058 DeadDsMonitor(-1579684960) 7 Cache Agent 1019 0x088b49a0 CacheGridEnv 14 Cache Agent 1019 0x0896b9d0 CacheGridSend 15 Cache Agent 1019 0x089fb020 CacheGridSend 16 Cache Agent 1019 0x08a619f8 CacheGridSend 17 Cache Agent 1019 0x08ace538 CacheGridRec 18 Cache Agent 1019 0x08b42e88 CacheGridRec 19 Cache Agent 1019 0x08bb77d8 CacheGridRec 20 Cache Agent 1019 0x08c2c128 CacheGridRec 21 Cache Agent 1019 0x08ca0a78 CacheGridRec 22 Cache Agent 1019 0x08d153c8 CacheGridRec 23 Cache Agent 1019 0x08d89d18 CacheGridRec 24 Cache Agent 1019 0x08dfe668 CacheGridRec 25 Cache Agent 1019 0x08e72fb8 CacheGridRec 26 Cache Agent 1019 0x08ee8020 CacheGridRec 27 Cache Agent 1019 0x08f5d088 CacheGridRec 28 Cache Agent 1019 0x08fd23f8 CacheGridRec 29 Cache Agent 1019 0x09047768 CacheGridRec 30 Replication 18051 0x08c3d900 RECEIVER 8 Replication 18051 0x08b53298 REPHOLD 9 Replication 18051 0x08af8138 REPLISTENER 10 Replication 18051 0x08a82f20 LOGFORCE 11 Replication 18051 0x08bce660 TRANSMITTER 12 Subdaemon 9822 0x080a2180 Manager 2032 Subdaemon 9822 0x080ff260 Rollback 2033 Subdaemon 9822 0x08548c38 Flusher 2034 Subdaemon 9822 0x085e3b00 Monitor 2035 Subdaemon 9822 0x0828fc10 Deadlock Detector 2036 Subdaemon 9822 0x082ead70 Checkpoint 2037 Subdaemon 9822 0x08345ed0 Aging 2038 Subdaemon 9822 0x083a1030 Log Marker 2039 Subdaemon 9822 0x083fc190 AsyncMV 2040 Subdaemon 9822 0x084572f0 HistGC 2041 Replication policy : Manual Replication agent is running. Cache Agent policy : Always TimesTen's Cache agent is running for this data store PL/SQL enabled. ------------------------------------------------------------------------
ttStatus
ユーティリティによって表示される情報は次のとおりです。いずれも、インストール済インスタンスのTimesTenデータベースごとに用意されるOracle In-Memory Database Cacheに関する情報です。
TimesTenデータベースに接続されているキャッシュ・エージェント・プロセス・スレッドの名前
TimesTenデータベースに接続されているレプリケーション・エージェント・プロセス・スレッドの名前
キャッシュ・エージェントが実行されているかどうかに関するステータス
レプリケーション・エージェントが実行されているかどうかに関するステータス
キャッシュ・エージェント起動ポリシー
レプリケーション・エージェント起動ポリシー
ttStatus
ユーティリティの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttStatus
に関する説明を参照してください。
次の項では、キャッシュ・グリッドおよびキャッシュ・グループに関する情報を取得する方法およびキャッシュ・グループ処理のステータスを監視する方法について説明します。
TimesTenデータベースのキャッシュ・グループに関する情報を取得するには、ttIsql
ユーティリティのcachegroups
コマンドを使用します。
例7-3 ttIsqlユーティリティのcachegroupsコマンド
% ttIsql "DSN=cachealone1;UID=cacheuser;PWD=timesten;OraclePWD=oracle" Command> cachegroups; Cache Group CACHEUSER.RECENT_SHIPPED_ORDERS: Cache Group Type: Read Only Autorefresh: Yes Autorefresh Mode: Incremental Autorefresh State: On Autorefresh Interval: 1440 Minutes Autorefresh Status: ok Aging: Timestamp based uses column WHEN_SHIPPED lifetime 30 days cycle 24 hours on Root Table: ORATT.ORDERS Table Type: Read Only Cache Group CACHEUSER.SUBSCRIBER_ACCOUNTS: Cache Group Type: Asynchronous Writethrough global (Dynamic) Autorefresh: No Aging: LRU on Root Table: ORATT.SUBSCRIBER Table Type: Propagate Cache Group CACHEUSER.WESTERN_CUSTOMERS: Cache Group Type: User Managed Autorefresh: No Aging: No aging defined Root Table: ORATT.ACTIVE_CUSTOMER Where Clause: (oratt.active_customer.region = 'West') Table Type: Propagate Child Table: ORATT.ORDERTAB Table Type: Propagate Child Table: ORATT.ORDERDETAILS Where Clause: (oratt.orderdetails.quantity >= 5) Table Type: Not Propagate Child Table: ORATT.CUST_INTERESTS Table Type: Read Only 3 cache groups found.
ttIsql
ユーティリティのcachegroups
コマンドによって表示される情報は、次のとおりです。
キャッシュ・グループが動的であるかグローバルであるかを含むキャッシュ・グループ・タイプ
自動リフレッシュ属性(モード、状態、間隔)およびステータス(適用可能な場合)
エージング・ポリシー(適用可能な場合)
ルート表の名前および(適用可能な場合は)子表の名前
キャッシュ表のWHERE句(適用可能な場合)
キャッシュ表属性(読取り専用、伝播、伝播なし)
ttIsql
ユーティリティのcachegroups
コマンドの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttIsqlに関する説明を参照してください。
キャッシュ・グループの自動リフレッシュ処理に関する情報および統計を取得し、キャッシュ・グループが自動的にリフレッシュされるタイミングを監視するには、次のメカニズムを使用します。
ttCacheAutorefreshStatsGet
組込みプロシージャをコールすると、指定されたキャッシュ・グループに対して実行された最後の10個の自動リフレッシュ処理に関する情報を取得できます。
% ttIsql "DSN=cachealone1;UID=cacheuser;PWD=timesten;OraclePWD=oracle" Command> call ttCacheAutorefreshStatsGet('cacheuser','recent_shipped_orders');
戻される情報には、各自動リフレッシュ処理の開始時間および所要時間や、各処理でキャッシュ表にリフレッシュされた行数などがあります。
ttCacheAutorefreshStatsGet
組込みプロシージャの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』および『Oracle TimesTen In-Memory Databaseトラブルシューティング・プロシージャ・ガイド』のttCacheAutorefreshStatsGetプロシージャの使用に関する説明を参照してください。
キャッシュ管理ユーザーとしてSQL*PlusスクリプトTimesTen_install_dir
/oraclescripts/cacheInfo.sql
を実行すると、自動リフレッシュ・キャッシュ・グループにキャッシュされたすべてのOracle表の変更ログ表情報を表示できます。
% cd TimesTen_install_dir/oraclescripts
% sqlplus cacheuser/oracle
SQL> @cacheInfo
*************Autorefresh Objects Information ***************
Host name: sys1
Timesten datastore name: /users/OracleCache/alone1
Cache table name: ORATT.ORDERS
Change log table name: tt_05_69245_L
Number of rows in change log table: 1
Maximum logseq on the change log table: 0
Timesten has autorefreshed updates upto logseq: 0
Number of updates waiting to be autorefreshed: 0
Number of updates that has not been marked with a valid logseq: 0
****************************
変更ログ表ごとに戻される情報には、変更ログ表の名前、それに対応するTimesTenキャッシュ表の名前、変更ログ表の行数、変更ログ表内の更新のうちキャッシュ表に自動的にリフレッシュされなかった更新の数などが含まれています。
cacheInfo.sql
スクリプトから戻される情報の詳細は、『Oracle TimesTen In-Memory Databaseトラブルシューティング・プロシージャ・ガイド』で、変更ログ表の情報の表示に関する説明を参照してください。
ttDaemonLog
ユーティリティを使用すると、サポート・ログ内の自動リフレッシュ処理に関する情報メッセージ、警告メッセージおよびエラー・メッセージを表示できます。
% ttDaemonLog -show ora
ttDaemonLog
ユーティリティの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』を参照してください。
サポート・ログ内の自動リフレッシュ処理に関するメッセージの詳細は、『Oracle TimesTen In-Memory Databaseトラブルシューティング・プロシージャ・ガイド』のサポート・ログ内の自動リフレッシュについてのメッセージおよび自動リフレッシュ障害の診断に関する説明を参照してください。
ttTraceMon
ユーティリティを使用すると、AUTOREFRESHコンポーネントのトレース・レコードを生成できます。
% ttTraceMon cachealone1 Trace monitor; empty line to exit Trace> level autorefresh 2 Trace> flush Trace> outfile autorefresh.out Trace> <Press Enter to exit ttTraceMon>
トレース・レコードに表示される情報には、各自動リフレッシュ処理が実行されたキャッシュ・グループの名前、各処理の所要時間、各処理でキャッシュ表にリフレッシュされた行数などがあります。
ttTraceMon
ユーティリティの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』を参照してください。
自動リフレッシュ・トレース・レコードの詳細は、『Oracle TimesTen In-Memory Databaseトラブルシューティング・プロシージャ・ガイド』のAUTOREFRESHトレースに関する説明を参照してください。
TimesTen_install_dir
/info/snmp.ini
で-enabled
フラグを1に設定することによって、SNMPトラップのスローを有効にし、TimesTen_install_dir
/mibs/TimesTen-MIB.txt
ファイルから、自動リフレッシュ・エラー条件に適用される様々なトラップを監視します。
SNMPトラップおよび自動リフレッシュ処理に関するトラップの詳細は、『Oracle TimesTen In-Memory Databaseエラー・メッセージおよびSNMPトラップ』のSNMPトラップを介した診断に関する説明、および『Oracle TimesTen In-Memory Databaseトラブルシューティング・プロシージャ・ガイド』の自動リフレッシュ問題のアラートのためのSNMPトラップの使用に関する説明を参照してください。
AWTキャッシュ・グループのパフォーマンスを監視し、AWTキャッシュ・グループ・ワークフローの各コンポーネントで特定のタスクを実行するためにかかる時間を割り出すには、次の手順を使用します。
キャッシュ・マネージャ・ユーザーとしてttCacheAWTMonitorConfig
組込みプロシージャをコールして、AWT監視を有効にし、AWTワークフロー・サンプリング係数を指定します。
% ttIsql "DSN=cachealone1;UID=cacheuser;PWD=timesten;OraclePWD=oracle" Command> call ttCacheAWTMonitorConfig('ON',16); Command> exit
AWTキャッシュ・グループを監視できるようにするには、レプリケーション・エージェントを実行する必要があります。
ttCacheAWTMonitorConfig
組込みプロシージャの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』を参照してください。
ttRepAdmin -showstatus -awtmoninfo
ユーティリティ・コマンドを実行して、監視結果を表示します。
% ttRepAdmin -showstatus -awtmoninfo cachealone1
ttRepAdmin -showstatus -awtmoninfo
ユーティリティ・コマンドの出力の詳細は、『Oracle TimesTen In-Memory Databaseトラブルシューティング・プロシージャ・ガイド』のAWTパフォーマンスの監視に関する説明を参照してください。
非同期ライトスルー処理がAWTキャッシュ・グループのキャッシュ表の更新速度に遅れることなく対応しているかどうかを確認するには、SYS.MONITORシステム表のLAST_LOG_FILE、REPHOLD_LOG_FILE、REPHOLD_LOG_OFFの各列を問い合せます。 LAST_LOG_FILE列の値とREPHOLD_LOG_FILE列の値の差が時間の経過とともに増大し、かつREPHOLD_LOG_OFF列の値の増加速度が遅いかまたは変化しない場合は、キャッシュ表の更新速度が更新のレプリケートよりも速くなっています。
次に、ttRepAdmin -receiver -list
ユーティリティ・コマンドを実行し、_ORACLEが「Peer name」フィールドに存在する行を探します。 その同じ行内の「Last Msg Sent」、「Last Msg Recv」、「Latency」、「TPS」の各フィールドの値を参照して、遅れているレプリケーション・アクティビティが非同期ライトスルー処理であるかどうかを確認します。
非同期ライトスルーのパフォーマンス低下の考えられる原因とその解決策の詳細は、『Oracle TimesTen In-Memory Databaseトラブルシューティング・プロシージャ・ガイド』のAWTキャッシュ・グループのトラブルシューティングに関する説明を参照してください。
レプリケーション・エージェントは、トランザクション・ログを使用して、AWTキャッシュ・グループのキャッシュ表に対するどの更新がキャッシュされたOracle表に伝播され、どの更新が伝播されていないかを判別します。 レプリケーション・エージェントが実行されていないか、Oracleサーバーが使用不可能であるなどの障害により、更新がOracleに自動的に伝播されていない場合は、トランザクション・ログ・ファイルがディスクに蓄積されます。
蓄積可能なトランザクション・ログ・ファイルの数のしきい値を設定し、その値を超えた場合にAWTキャッシュ・グループのキャッシュ表に対する更新の追跡を停止するには、キャッシュ管理ユーザーとしてttCacheAWTThresholdSet
組込みプロシージャをコールします。 デフォルトのしきい値は0です。 この組込みプロシージャをコールできるのは、TimesTenデータベースにAWTキャッシュ・グループが含まれている場合のみです。
このしきい値を超えた場合は、UNLOAD CACHE GROUP文の後にLOAD CACHE GROUP文を続けて使用することによって、キャッシュ表を、キャッシュされたOracle表と手動で同期化する必要があります。 トランザクション・ログ・ファイルに、キャッシュされたOracle表に伝播されなかった更新が含まれている場合も、TimesTenによってそのファイルが消去されることがあります。
例7-4 AWTキャッシュ・グループのトランザクション・ログ・ファイルのしきい値の設定
この例では、AWTキャッシュ・グループのキャッシュ表に対する更新を含むトランザクション・ログ・ファイルの数が5を超えると、更新の追跡が停止されます。伝播されない更新が含まれている可能性のあるトランザクション・ログ・ファイルが消去されることがあります。
% ttIsql "DSN=cachealone1;UID=cacheuser;PWD=timesten;OraclePWD=oracle" Command> call ttCacheAWTThresholdSet(5);
現在のトランザクション・ログ・ファイルのしきい値設定を確認するには、ttCacheAWTThresholdGet
組込みプロシージャをコールします。
Command> call ttCacheAWTThresholdGet; < 5 > Command> exit
キャッシュ・グリッドおよびそのグリッド・メンバーに関する情報を表示するには、次のメカニズムを使用します。
指定のキャッシュ・グリッドまたはすべての既存のキャッシュ・グリッドについて、グリッド名、キャッシュ管理ユーザー名、オペレーティング・システム・プラットフォームおよびTimesTenメジャー・リリース番号を戻すには、キャッシュ・マネージャ・ユーザーとしてttGridInfo
組込みプロシージャをコールします。
% ttIsql "DSN=cachealone1;UID=cacheuser;PWD=timesten;OraclePWD=oracle" Command> call ttGridInfo('ttGrid'); < TTGRID, CACHEUSER, Linux Intel x86, 32-bit, 11, 2, 1 >
ttGridInfo
組込みプロシージャの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』を参照してください。
指定のキャッシュ・グリッドまたはすべての既存のキャッシュ・グリッドのすべてのメンバーについて、グリッド名、メンバーID、ノード番号、ホスト名、メンバー名、IPアドレスおよびキャッシュ・エージェントTCP/IPポート番号を戻すには、キャッシュ・マネージャ・ユーザーとしてttGridNodeStatus
組込みプロシージャをコールします。
% ttIsql "DSN=cachealone1;UID=cacheuser;PWD=timesten;OraclePWD=oracle" Command> call ttGridNodeStatus; < TTGRID, 1, 1, T, sys1, TTGRID_alone1_1, 140.87.0.201, 5001, <NULL>, <NULL>, <NULL>, <NULL>, <NULL> > < TTGRID, 2, 1, T, sys2, TTGRID_alone2_2, 140.87.0.202, 5002, <NULL>, <NULL>, <NULL>, <NULL>, <NULL> > < TTGRID, 3, 1, T, sys3, TTGRID_cacheact_3A, 140.87.0.203, 5003, T, sys4, TTGRID_cachestand_3B, 140.87.0.204, 5004 >
ttGridNodeStatus
組込みプロシージャの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』を参照してください。
キャッシュされたOracle表にDDL文が発行された場合、Oracle表に行を挿入するためにOracle TT_
version_schema-ID
_DDL_T
トリガーが起動されたとき、そのDDL文をOracle TT_
version
_DDL_L
表で追跡できます。version
はTimesTenの内部バージョン番号、schema-ID
はキャッシュされたOracle表を所有するユーザーのIDです。 キャッシュされたOracle表を所有するOracleユーザーごとに、トリガーが作成されます。 キャッシュされたOracle表に対して発行されたDDL文を保存するために、DDL追跡表が1つ作成されます。 キャッシュ管理ユーザーは、TT_
version
_DDL_L
表およびTT_
version
_schema-ID
_DDL_T
トリガーを所有します。
キャッシュされたOracle表に対して発行されたDDL文を追跡できるようにするには、キャッシュ・マネージャ・ユーザーとしてttCacheDDLTrackingConfig
組込みプロシージャをコールします。 デフォルトでは、DDL文は追跡されません。
ttCacheDDLTrackingConfig
組込みプロシージャの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』を参照してください。
例7-5 キャッシュされたOracle表に対して発行されたDDL文の追跡の有効化
% ttIsql "DSN=cachealone1;UID=cacheuser;PWD=timesten;OraclePWD=oracle" Command> call ttCacheDDLTrackingConfig('enable');
キャッシュ管理ユーザーにRESOURCEやCREATE ANY TRIGGERなどの必要な権限のセットが付与されている場合は、TT_
version
_DDL_L
表およびTT_
version
_schema-ID
_DDL_T
トリガーが自動的に作成されます。 DDL文の追跡が有効化されている場合、キャッシュ・グループを作成したとき、これらのOracleオブジェクトが作成されます。
Oracleデータのキャッシュを管理するために使用するOracleオブジェクトを手動で作成した場合は、キャッシュ・マネージャ・ユーザーとして、ttIsql
ユーティリティのcachesqlget
コマンドにORACLE_DDL_TRACKING
オプションおよびINSTALL
フラグを指定して実行する必要があります。 このコマンドは、DDL文を追跡する必要がある、キャッシュされたOracle表を所有するOracleユーザーごとに実行する必要があります。 このコマンドを実行すると、SQL*Plusスクリプトが生成されます。このスクリプトは、Oracle DatabaseにTT_
version
_DDL_L
表およびTT_
version
_schema-ID
_DDL_T
トリガーを作成するために使用されます。
スクリプトの生成後、SQL*Plusを使用してsys
ユーザーとしてスクリプトを実行します。
例7-6 Oracleオブジェクトを手動で作成した場合のDDL追跡表およびトリガーの作成
この例では、ttIsql
ユーティリティのcachesqlget
コマンドによって生成されるSQL*Plusスクリプトは、/tmp/trackddl.sql
ファイルに保存されます。 キャッシュされたOracle表oratt
の所有者が、引数としてこのコマンドに渡されます。
% ttIsql "DSN=cachealone1;UID=cacheuser;PWD=timesten;OraclePWD=oracle"
Command> cachesqlget ORACLE_DDL_TRACKING oratt INSTALL /tmp/trackddl.sql;
Command> exit
% sqlplus sys as sysdba
Enter password: password
SQL> @/tmp/trackddl
SQL> exit
Oracleスキーマに変更を加えるために、キャッシュされたOracle表に対してCREATE、DROP、ALTERなどのDDL文を発行する必要がある場合は、次のタスクを実行します。
DROP CACHE GROUP文を使用して、処理対象のOracle表をキャッシュするすべてのキャッシュ・グループを削除します。 AWTキャッシュ・グループを削除する場合は、そのキャッシュ・グループを削除する前に、ttRepSubscriberWait
組込みプロシージャを使用して、そのグループのキャッシュ表にコミットされたすべての更新をキャッシュされたOracle表に伝播します。
% ttIsql "DSN=cachealone1;UID=cacheuser;PWD=timesten;OraclePWD=oracle" Command> call ttRepSubscriberWait('_AWTREPSCHEME','TTREP','_ORACLE','sys1',-1);
キャッシュ・エージェントを停止します。
必要な変更をOracleスキーマに対して行います。
CREATE CACHE GROUP文を使用してキャッシュ・グループを再作成します(可能な場合)。
Oracleスキーマを変更する前に、処理対象のキャッシュ・グループを削除しないと、自動リフレッシュなどキャッシュ・グループに対する処理が失敗する場合があります。
自動リフレッシュ・キャッシュ・グループにキャッシュされるOracle表を切り捨てる場合は、次のタスクを実行します。
ALTER CACHE GROUP文を使用して、キャッシュ・グループの自動リフレッシュ状態をPAUSEDに設定します。
Oracle表を切り捨てます。
WHERE句またはWITH ID句を指定せずにREFRESH CACHE GROUP文を使用して、キャッシュ・グループを手動でリフレッシュします。
キャッシュ・グループをリフレッシュすると、自動リフレッシュ処理が再開されます。
キャッシュされたOracle表に対して発行されたDDL文の追跡に使用されるOracleオブジェクトの情報を表示するには、キャッシュ管理ユーザーとしてSQL*PlusスクリプトTimesTen_install_dir
/oraclescripts/cacheInfo.sql
を実行します。
% cd TimesTen_install_dir/oraclescripts
% sqlplus cacheuser/oracle
SQL> @cacheInfo
*************DDL Tracking Object Information ***************
Common DDL Log Table Name: TT_05_DDL_L
DDL Trigger Name: TT_05_315_DDL_T
Schema for which DDL Trigger is tracking: ORATT
Number of cache groups using the DDL Trigger: 10
****************************
キャッシュされたOracle表を所有するOracleユーザーごとに戻される情報には、DDL追跡表の名前、その対応するDDLトリガーの名前、DDLトリガーが関連付けられているユーザーの名前、DDLトリガーに関連付けられているユーザーが所有する表をキャッシュするキャッシュ・グループの数などがあります。
特定の表が複数のグリッド・メンバーにキャッシュされる場合、各グリッド・メンバーがキャッシュ・グループの数にカウントされます。 アクティブ・スタンバイ・ペアは、1つのグリッド・メンバーとしてカウントされます。 1つのキャッシュ・グループに複数のキャッシュ表が含まれている場合、DDLトリガーに関連付けられているユーザーが所有する各キャッシュ表がキャッシュ・グループの数にカウントされます。
自動リフレッシュ・キャッシュ・グループの場合、TimesTenはそのキャッシュ・グループのキャッシュ表ごとに変更ログ表およびトリガーをOracle Databaseに作成します。 トリガーは、キャッシュされたOracle表で挿入、更新または削除処理がコミットされるたびに起動されます。 そのトリガーは、更新行の主キーを変更ログ表に記録します。 キャッシュ・エージェントは、定期的に変更ログ表で更新キーをスキャンし、変更ログ表をキャッシュされたOracle表と結合して最新の更新のスナップショットを取得します。
AUTOREFRESH MODE INCREMENTALキャッシュ・グループ属性を指定してキャッシュ・グループを作成すると、自動リフレッシュ処理に使用されるOracleオブジェクトを自動的に作成できます(「Oracleデータのキャッシュ管理に使用されるOracleオブジェクトの自動作成」を参照)。 また、セキュリティを確保するために、これらのオブジェクトの自動作成に必要なRESOURCEおよびCREATE ANY TRIGGER権限をキャッシュ管理ユーザーに付与しない場合は、キャッシュ・グリッド処理またはキャッシュ・グループ処理を実行する前に、これらのオブジェクトを手動で作成することもできます(「Oracleデータのキャッシュ管理に使用されるOracleオブジェクトの手動による作成」を参照)。
Oracleオブジェクトを自動または手動で作成するには、あらかじめ次の処理を実行しておく必要があります。
「Oracleユーザーの作成」の説明に従って、Oracle Databaseにキャッシュ管理ユーザーを作成します。
「キャッシュ管理ユーザーの名前およびパスワードの設定」の説明に従って、TimesTenデータベースにキャッシュ管理ユーザーの名前およびパスワードを設定します。
「キャッシュ・エージェントの管理」の説明に従って、キャッシュ・エージェントを起動します。
TimesTenは、キャッシュ管理ユーザーごとに次のOracle表を作成します。ここで、versionはTimesTenの内部バージョン番号、object-IDはキャッシュされたOracle表のIDです。
表名 | 説明 |
---|---|
TT_version_AGENT_STATUS | 最初のキャッシュ・グループの作成時に作成されます。 自動リフレッシュ・キャッシュ・グループにキャッシュされた各Oracle表に関する情報を保存します。 |
TT_version_AR_PARAMS | キャッシュ管理ユーザーの名前およびパスワードが設定されたときに作成されます。 キャッシュ管理ユーザーの表領域が一杯になったときに実行するアクションを保存します。 |
TT_version_CACHE_STATS | キャッシュ管理ユーザーの名前およびパスワードが設定されたときに作成されます。 |
TT_version_DATABASES | キャッシュ管理ユーザーの名前およびパスワードが設定されたときに作成されます。 Oracle DatabaseからデータをキャッシュするすべてのTimesTenデータベースの自動リフレッシュ・ステータスを保存します。 |
TT_version_DB_PARAMS | キャッシュ管理ユーザーの名前およびパスワードが設定されたときに作成されます。 キャッシュ・エージェント・タイムアウト、使用不可能なキャッシュ・グループのリカバリ方法およびキャッシュ管理ユーザーの表領域使用量しきい値を保存します。 |
TT_version_DDL_L | キャッシュ管理ユーザーの名前およびパスワードが設定されたときに作成されます。 キャッシュされたOracle表に対して発行されたDDL文を追跡します。 |
TT_version_DDL_TRACKING | キャッシュ管理ユーザーの名前およびパスワードが設定されたときに作成されます。 キャッシュされたOracle表に対するDDL文の追跡が有効であるか無効であるかを示すフラグを保存します。 |
TT_version_REPACTIVESTANDBY | 最初のAWTキャッシュ・グループの作成時に作成されます。 アクティブ・スタンバイ・ペアのレプリケーション・スキームでレプリケートされるAWTキャッシュ・グループのキャッシュ表を含むTimesTenデータベースの状態およびロールを追跡します。 |
TT_version_REPPEERS | 最初のAWTキャッシュ・グループの作成時に作成されます。 キャッシュされたOracle表に非同期に伝播されたキャッシュ表に対する最終更新の時間およびコミット順序番号を追跡します。 |
TT_version_SYNC_OBJS | 最初のキャッシュ・グループの作成時に作成されます。 |
TT_version_USER_COUNT | 最初のキャッシュ・グループの作成時に作成されます。 各キャッシュされたOracle表に関する情報を保存します。 |
TT_version_object-ID_L | 自動リフレッシュ・キャッシュ・グループを作成すると、そのキャッシュ・グループにキャッシュされるOracle表ごとに変更ログ表が1つ作成されます。 キャッシュされたOracle表に対する更新を追跡します。 |
TimesTenは、キャッシュ管理ユーザーごとに次のOracleトリガーを作成します。ここで、versionはTimesTenの内部バージョン番号、object-IDはキャッシュされたOracle表のID、schema-IDはキャッシュされたOracle表を所有するユーザーのIDです。
トリガー名 | 説明 |
---|---|
TT_version_REPACTIVESTANDBY_T | 最初のAWTキャッシュ・グループの作成時に作成されます。 起動されると、TT_version_REPACTIVESTANDBY表に行を挿入します。 |
TT_version_object-ID_T | 自動リフレッシュ・キャッシュ・グループを作成すると、そのキャッシュ・グループにキャッシュされるOracle表ごとにトリガーが1つ作成されます。 キャッシュされたOracle表に対して挿入、削除または更新処理が発行されるたびに起動され、TT_version_object-ID_L変更ログ表で処理を追跡します。 |
TT_version_schema-ID_DDL_T | キャッシュされたOracle表を所有するユーザーごとに1つ存在します。 DDL文の追跡を有効にした後、キャッシュ・グループを作成すると作成されます。 キャッシュされたOracle表に対してDDL文が発行されるたびに起動され、TT_version_DDL_L表で処理を追跡します。 |
AWTキャッシュ・グループを作成するとき、非同期ライトスルー処理に使用されるOracleオブジェクトを自動的に作成できます(「Oracleデータのキャッシュ管理に使用されるOracleオブジェクトの自動作成」を参照)。 また、セキュリティを確保するために、これらのオブジェクトの自動作成に必要なRESOURCE権限をキャッシュ管理ユーザーに付与しない場合は、キャッシュ・グリッド処理またはキャッシュ・グループ処理を実行する前に、これらのオブジェクトを手動で作成することもできます(「Oracleデータのキャッシュ管理に使用されるOracleオブジェクトの手動による作成」を参照)。
TimesTenは、timestenユーザー用に次のOracle表を作成します。
表名 | 説明 |
---|---|
TT_GRIDID | SQL*PlusスクリプトinitCacheGlobalSchema.sql を実行すると作成されます。 最近作成したキャッシュ・グリッドに割り当てられているID番号を保存します。 |
TT_GRIDINFO | SQL*PlusスクリプトinitCacheGlobalSchema.sql を実行すると作成されます。 すべての既存のキャッシュ・グリッドのグリッド名、グリッドIDおよびキャッシュ管理ユーザー名を保存します。 |
TimesTenは、キャッシュ管理ユーザーごとに次のOracle表を作成します。ここで、versionはTimesTenの内部バージョン番号、grid-IDはキャッシュ・グリッドのID番号です。
表名 | 説明 |
---|---|
TT_version_grid-name_grid-IDCGNODEID | グリッドが作成されると、キャッシュ・グリッドごとに1つの表が作成されます。 オペレーティング・システムの名前、そのバージョンおよびTimesTenリリース番号を保存します。 |
TT_version_grid-name_grid-IDCGNODEINFO | グリッドが作成されると、キャッシュ・グリッドごとに1つの表が作成されます。 すべてのアタッチ済グリッド・メンバーのホスト名、メンバー名、IPアドレスおよびキャッシュ・エージェントTCP/IPポートを保存します。 |
TT_version_grid-name_grid-IDCGGROUPDEFS | グリッドが作成されると、キャッシュ・グリッドごとに1つの表が作成されます。 キャッシュ・グリッドに関連付けられているスタンドアロンTimesTenデータベースまたはアクティブ・スタンバイ・ペアのすべてのグローバル・キャッシュ・グループのキャッシュ・グループ名、所有者、参照カウントおよびSQLテキストを保存します。 |
変更ログ表は、自動リフレッシュ・キャッシュ・グループにキャッシュされるOracle表ごとに、キャッシュ管理ユーザーの表領域に作成されます。 これらのキャッシュされたOracle表に対して更新処理が発行されるたびに、対応する変更ログ表に行が1つ挿入されます。これにより、次回の増分自動リフレッシュ・サイクルにおいて、TimesTenキャッシュ表に適用する必要がある更新を常時監視できるようになります。 TimesTenは、キャッシュ表に適用された変更ログ表の行を定期的に削除します。
1つのOracle表をTimesTenデータベース内の複数のキャッシュ・グループに、キャッシュすることはできません。 ただし、1つのOracle表を複数のTimesTenデータベースにキャッシュできるため、1つのOracle表が複数のTimesTenキャッシュ表に対応することになります。 Oracle表がキャッシュされる1つ以上のTimesTenデータベースでキャッシュ・エージェントが実行されていないために、キャッシュされたOracle表に対する更新が対応するすべてのキャッシュ表に自動的にリフレッシュされない場合、それぞれの変更ログ表の行はデフォルトでは削除されません。 キャッシュ・エージェントが明示的に停止されたか、または起動されていなかったため、あるいはデータベースが破棄されたか、データベースがあるインストール済インスタンスが停止しているために、キャッシュ・エージェントが特定のTimesTenデータベースで実行されない場合があります。 この結果、変更ログ表に行が蓄積し、キャッシュ・エージェントが実行されているTimesTenデータベースのキャッシュ表に対する自動リフレッシュ処理のパフォーマンスが低下します。 また、キャッシュ管理ユーザーの表領域が一杯になる場合もあります。
キャッシュ・エージェント・タイムアウトを設定すると、行が変更ログ表に蓄積されて削除されない状態を回避できます。 TimesTenデータベースでキャッシュ・エージェントが実行されておらず、キャッシュ・エージェント・タイムアウトを設定している場合、変更ログ表の行を削除するには、次の基準が満たされている必要があります。
Oracle表は、複数のTimesTenデータベース内の自動リフレッシュ・キャッシュ・グループにキャッシュされます。
キャッシュ・エージェントは、TimesTenデータベースの少なくとも1つで実行されていますが、別のデータベースでは実行されていません。
変更ログ表の行が、キャッシュ・エージェントが実行されているすべてのTimesTenデータベースのキャッシュ表に適用されています。
このようなデータベースでキャッシュ・エージェントが実行されていないために、エージェント・プロセスが停止したままとなり、その期間がキャッシュ・エージェント・タイムアウトを超えています。
Oracle Databaseからのデータをキャッシュする任意のTimesTenデータベースから、キャッシュ・マネージャ・ユーザーとしてttCacheConfig
組込みプロシージャをコールします。 AgentTimeout
文字列をParam
パラメータに渡し、タイムアウト設定を数値文字列としてValue
パラメータに渡します。 tblOwner
パラメータおよびtblName
パラメータには値を渡さないでください。これは、キャッシュ・エージェント・タイムアウトの設定にはこれらのパラメータを適用できないためです。
次の例では、キャッシュ・エージェント・タイムアウトを900秒(15分)に設定しています。
% ttIsql "DSN=cachealone1;UID=cacheuser;PWD=timesten;OraclePWD=oracle" Command> call ttCacheConfig('AgentTimeout',,,'900');
現在のキャッシュ・エージェント・タイムアウト設定を確認するには、AgentTimeout
文字列のみをParam
パラメータに渡してttCacheConfig
をコールします。
Command> call ttCacheConfig('AgentTimeout'); < AgentTimeout, <NULL>, <NULL>, 900 >
デフォルトのキャッシュ・エージェント・タイムアウトは0秒であり、変更ログ表の行はすべてのキャッシュ表に適用されるまで削除されません。 キャッシュ・エージェント・タイムアウトを1から600秒のいずれかの値に設定すると、タイムアウトは600秒に設定されます。 キャッシュ・エージェント・タイムアウトは、同じOracle Databaseからデータをキャッシュし、かつ同じキャッシュ管理ユーザー名が設定されているすべてのTimesTenデータベースに適用されます。
適切なキャッシュ・エージェント・タイムアウト設定を決定するときは、TimesTenデータベースをメモリーにロードするために要する時間、キャッシュ・エージェント・プロセスを開始するための時間、ネットワーク停止の可能性がある期間および計画メンテナンス作業の所要見積時間を考慮してください。
各TimesTenデータベースおよびそのすべての自動リフレッシュ・キャッシュ・グループには自動リフレッシュ・ステータスがあり、変更ログ表から削除された行がキャッシュ・グループのキャッシュ表に適用されたかどうかを判別できるようになっています。 変更ログ表から行が削除されたものの、データベース上のキャッシュ・エージェントがキャッシュ・エージェント・タイムアウトを超える期間停止していたために、それがキャッシュ表に適用されなかった場合、そのキャッシュ表はキャッシュされたOracle表と同期化されなくなります。 キャッシュされたOracle表に対する以後の更新は、付随するキャッシュ・グループがリカバリされるまで、キャッシュ表に自動的にはリフレッシュされません。
自動リフレッシュ・キャッシュ・グループの有効な自動リフレッシュ・ステータスは、次のとおりです。
ok
: 変更ログ表から削除されたすべての行がキャッシュ表に適用されました。 増分自動リフレッシュ処理が引き続きキャッシュ・グループに対して実行されます。
dead
: 変更ログ表から削除された行の一部がキャッシュ表に適用されませんでした。そのため、キャッシュ表はキャッシュされたOracle表と同期化されません。 キャッシュ・グループに対する自動リフレッシュ処理が中断し、キャッシュ・グループがリカバリされるまで再開されません。
recovering
: キャッシュ・グループはリカバリ中です。 リカバリが完了すると、キャッシュ表がキャッシュされたOracle表と同期化され、キャッシュ・グループの自動リフレッシュ・ステータスがokに設定され、増分自動リフレッシュ処理がキャッシュ・グループで再開されます。
TimesTenデータベースの有効な自動リフレッシュ・ステータスは、次のとおりです。
alive
: すべての自動リフレッシュ・キャッシュ・グループの自動リフレッシュ・ステータスがokに設定されています。
dead
: すべての自動リフレッシュ・キャッシュ・グループの自動リフレッシュ・ステータスがdeadに設定されています。
recovering
: 自動リフレッシュ・キャッシュ・グループの少なくとも1つの自動リフレッシュ・ステータスがrecoveringに設定されています。
TimesTenデータベース上のキャッシュ・エージェントがキャッシュ・エージェント・タイムアウトを超える期間停止していると、そのTimesTenデータベースの自動リフレッシュ・ステータスはdeadに設定されます。 また、そのデータベース内のすべての自動リフレッシュ・キャッシュ・グループの自動リフレッシュ・ステータスがdeadに設定されます。
SNMPトラップを有効にしている場合、データベースの自動リフレッシュ・ステータスがdeadに設定されると、トラップがスローされます。
キャッシュ・グループおよびその付随するTimesTenデータベースの自動リフレッシュ・ステータスを確認するには、キャッシュ・マネージャ・ユーザーとしてttCacheDbCgStatus
組込みプロシージャをコールします。 キャッシュ・グループの所有者をcgOwner
パラメータに、キャッシュ・グループの名前をcgName
パラメータにそれぞれ渡します。
例7-8 キャッシュ・グループおよびTimesTenデータベースの自動リフレッシュ・ステータスの確認
次の例では、データベースの自動リフレッシュ・ステータスはaliveとなっており、cacheuser.customer_orders
読取り専用キャッシュ・グループの自動リフレッシュ・ステータスはokとなっています。
% ttIsql "DSN=cachealone1;UID=cacheuser;PWD=timesten;OraclePWD=oracle" Command> call ttCacheDbCgStatus('cacheuser','customer_orders'); < alive, ok >
データベースの自動リフレッシュ・ステータスのみを表示し、特定のキャッシュ・グループの自動リフレッシュ・ステータスは表示しないようにするには、パラメータを指定せずにttCacheDbCgStatus
をコールします。
Command> call ttCacheDbCgStatus; < dead, <NULL> >
キャッシュ・グループの自動リフレッシュ・ステータスがokである場合、そのキャッシュ表は自動リフレッシュ間隔に基づいて自動的にリフレッシュされます。 データベースの自動リフレッシュ・ステータスがaliveである場合、そのデータベースのすべての自動リフレッシュ・キャッシュ・グループの自動リフレッシュ・ステータスがokとなります。
キャッシュ・グループの自動リフレッシュ・ステータスがdeadである場合、そのキャッシュ表はキャッシュされたOracle表に対する更新がコミットされても、自動的にはリフレッシュさません。 キャッシュ表をキャッシュされたOracle表と再同期化するには、キャッシュ・グループをリカバリする必要があります。
自動リフレッシュ・ステータスがdeadになっているキャッシュ・グループ用にリカバリ方法を構成できます。
Oracle Databaseからのデータをキャッシュする任意のTimesTenデータベースから、キャッシュ・マネージャ・ユーザーとしてttCacheConfig
組込みプロシージャをコールします。 DeadDbRecovery
文字列をParam
パラメータに渡し、リカバリ方法を文字列としてValue
パラメータに渡します。 tblOwner
パラメータおよびtblName
パラメータには値を渡さないでください。これは、deadとなっているキャッシュ・グループのリカバリ方法の設定にはこれらのパラメータを適用できないためです。
有効なリカバリ方法は次のとおりです。
Normal
: キャッシュ・エージェントを起動すると、自動リフレッシュ・ステータスがdeadであるキャッシュ・グループに対して完全自動リフレッシュ処理が実行され、キャッシュ・グループがリカバリされます。 これがデフォルトのリカバリ方法です。
Manual
: 自動リフレッシュ・ステータスがdeadとなっている明示的にロードされる各キャッシュ・グループをリカバリするには、キャッシュ・エージェントの起動後に、REFRESH CACHE GROUP文を発行する必要があります。
自動リフレッシュ・ステータスがdeadとなっている各動的キャッシュ・グループをリカバリするには、キャッシュ・エージェントの起動後、REFRESH CACHE GROUP文またはUNLOAD CACHE GROUP文を発行する必要があります。
None
: 自動リフレッシュ・ステータスがdeadとなっているキャッシュ・グループをリカバリするには、キャッシュ・エージェントの起動後、そのグループを削除してから再作成する必要があります。
例7-9 deadとなっているキャッシュ・グループのリカバリ方法の構成
次の例では、自動リフレッシュ・ステータスがdeadとなっているキャッシュ・グループのリカバリ方法をManual
に設定しています。
% ttIsql "DSN=cachealone1;UID=cacheuser;PWD=timesten;OraclePWD=oracle" Command> call ttCacheConfig('DeadDbRecovery',,,'Manual');
deadとなっているキャッシュ・グループの現在のリカバリ方法を確認するには、DeadDbRecovery
文字列のみをParam
パラメータに渡してttCacheConfig
をコールします。
Command> call ttCacheConfig('DeadDbRecovery'); < DeadDbRecovery, <NULL>, <NULL>, manual >
このリカバリ方法は、同じOracle Databaseからデータをキャッシュし、かつ同じキャッシュ管理ユーザー名が設定されているすべてのTimesTenデータベースのすべての自動リフレッシュ・キャッシュ・グループに適用されます。
SNMPトラップを有効にしている場合、キャッシュ・エージェントが起動し、リカバリ方法をManual
またはNone
に設定すると、トラップがスローされ、REFRESH CACHE GROUPやDROP CACHE GROUPなどの文を手動で発行して、データベース内で自動リフレッシュ・ステータスがdeadとなっているキャッシュ・グループをリカバリするよう警告されます。
キャッシュ・グループがリカバリ・プロセスを開始すると、その自動リフレッシュ・ステータスがdeadからrecoveringに変更され、付随するTimesTenデータベースのステータスが現在deadである場合にはrecoveringに変更されます。
キャッシュ・グループのリカバリが完了すると、その自動リフレッシュ・ステータスがrecovering
からok
に変更されます。 すべてのキャッシュ・グループがリカバリされ、それらの自動リフレッシュ・ステータスがok
であると、付随するTimesTenデータベースのステータスがrecovering
からalive
に変更されます。
リフレッシュする更新が少量で、かつキャッシュ表に多数の行が存在する場合、完全自動リフレッシュ処理には増分自動リフレッシュ処理よりも多くのシステム・リソースが必要となります。 メンテナンス作業のためにTimesTenデータベースを停止する必要があり、その停止中、自動リフレッシュ・キャッシュ・グループにキャッシュされるOracle表に対して実行される更新の量が少ないと予測される場合は、一時的にキャッシュ・エージェント・タイムアウトを0に設定してみることをお薦めします。 データベースが稼働状態に戻り、キャッシュ・エージェントが再起動すると、増分自動リフレッシュ処理が自動リフレッシュ・キャッシュ・グループのキャッシュ表で再開されます。 付随するキャッシュ・グループの自動リフレッシュ・ステータスがok
からdead
に変更されなかったため、完全自動リフレッシュ処理が回避されます。そのため、付随するキャッシュ・グループのリカバリ・プロセスは必要ありません。 データベースが稼働状態に戻り、キャッシュ・エージェントが起動された後、キャッシュ・エージェント・タイムアウトを元の値に戻します。
自動リフレッシュ・キャッシュ・グループを含むTimesTenデータベースが使用できなくなっても、自動リフレッシュ処理の実装に使用される変更ログ表やトリガーなどのOracleオブジェクトは引き続きOracle Databaseに存在します。 TimesTenデータベースは、たとえば、TimesTenシステムがオフラインになったり、自動リフレッシュ・キャッシュ・グループを削除せずにデータベースを破棄すると使用不可能になります。
TimesTenデータベースが使用されなくなっても、自動リフレッシュ・キャッシュ・グループを含んでいる場合は、自動リフレッシュ処理の実装に使用されるOracleオブジェクトもOracle Databaseに引き続き存在します。 行が引き続き変更ログ表に蓄積されます。 これは、他のTimesTenデータベースに対する自動リフレッシュのパフォーマンスに影響を与えます。 このため、使用不可能になったり破棄されたTimesTenデータベースに関連付けられているこれらのOracleオブジェクトを削除することをお薦めします。
自動リフレッシュ処理の実装に使用されるOracleオブジェクトを削除するには、キャッシュ管理ユーザーとしてSQL*PlusスクリプトTimesTen_install_dir
/oraclescripts/cacheCleanUp.sql
を実行します。 TimesTenシステムのホスト名およびTimesTenデータベースのパス名を引数としてcacheCleanUp.sql
スクリプトに渡します。 TimesTenシステムのホスト名およびデータベース・パス名を確認するには、キャッシュ管理ユーザーとしてcacheInfo.sql
スクリプトを実行します。 また、cacheInfo.sql
スクリプトは、自動リフレッシュ処理の実装に使用されるオブジェクトがOracle Databaseに存在するかどうかを確認する場合にも使用できます。
例7-10 自動リフレッシュ・キャッシュ・グループのOracleオブジェクトの削除
次の例では、TimesTenデータベースを削除した後も、TimesTenデータベースにキャッシュ表oratt.customer
およびoratt.orders
を含む読取り専用キャッシュ・グループcustomer_orders
が1つ存在しています。 cacheCleanUp.sql
スクリプトは、この2つのキャッシュ表に関連付けられている変更ログ表およびトリガーを削除します。
% cd TimesTen_install_dir/oraclescripts
% sqlplus cacheuser/oracle
SQL> @cacheCleanUp "sys1" "/users/OracleCache/alone1"
*****************************OUTPUT**************************************
Performing cleanup for object_id: 69959 which belongs to table : CUSTOMER
Executing: delete from tt_05_agent_status where host = sys1 and datastore =
/users/OracleCache/alone1 and object_id = 69959
Executing: drop table tt_05_69959_L
Executing: drop trigger tt_05_69959_T
Executing: delete from tt_05_user_count where object_id = object_id1
Performing cleanup for object_id: 69966 which belongs to table : ORDERS
Executing: delete from tt_05_agent_status where host = sys1 and datastore =
/users/OracleCache/alone1 and object_id = 69966
Executing: drop table tt_05_69966_L
Executing: drop trigger tt_05_69966_T
Executing: delete from tt_05_user_count where object_id = object_id1
**************************************************************************
デフォルトでは、キャッシュ管理ユーザーの表領域が一杯になった場合に、UPDATE文、INSERT文またはDELETE文などの更新処理を特定のキャッシュされたOracle表に発行すると、Oracleからアプリケーションにエラーが返されます。
キャッシュ管理ユーザーの表領域が一杯になったときにアプリケーションにエラーを返すのではなく、更新処理が特定のキャッシュされたOracle表に発行されたときに変更ログ表から既存の行を削除して、新規行のための領域を確保するようにTimesTenを構成できます。 変更ログ表から削除した行の一部がTimesTenキャッシュ表に適用されなかった場合、次回の自動リフレッシュ・サイクルにおいて、そのキャッシュ表を含む各TimesTenデータベースのキャッシュ表に完全自動リフレッシュ処理が実行されます。
Oracle Databaseからの表をキャッシュする任意のTimesTenデータベースから、キャッシュ・マネージャ・ユーザーとしてttCacheConfig
組込みプロシージャをコールします。 TblSpaceFullRecovery
文字列をParam
パラメータに、キャッシュされたOracle表の所有者および名前をtblOwner
パラメータおよびtblName
パラメータにそれぞれ渡します。このOracle表に、キャッシュ管理ユーザーの表領域が一杯になった場合に実行するアクションを構成します。さらに、そのアクション自体を文字列としてValue
パラメータに渡します。
有効なアクションは次のとおりです。
None
: キャッシュされたOracle表に更新処理が発行されると、アプリケーションにOracleエラーを返します。 これがデフォルトのアクションです。
Reload
: キャッシュされたOracle表に更新処理が発行されると、次回の自動リフレッシュ・サイクルにおいて、変更ログ表から行を削除し、キャッシュ表に対して完全自動リフレッシュ処理を実行します。
例7-11 キャッシュ管理ユーザーの表領域が一杯になった場合のアクションの構成
次の例では、キャッシュされたOracle表oratt.customer
に更新処理が発行されたときにキャッシュ管理ユーザーの表領域が一杯である場合、次回の自動リフレッシュ・サイクルにおいて、変更ログ表から行が削除され、キャッシュ表に対して完全自動リフレッシュ処理が実行されます。
% ttIsql "DSN=cachealone1;UID=cacheuser;PWD=timesten;OraclePWD=oracle" Command> call ttCacheConfig('TblSpaceFullRecovery','oratt','customer','Reload');
キャッシュ管理ユーザーの表領域が一杯である場合に、特定のキャッシュされたOracle表に対して更新処理を発行すると実行される現在のアクションを確認するには、TblSpaceFullRecovery
文字列のみをParam
パラメータに、キャッシュされたOracle表の所有者および名前をtblOwner
パラメータおよびtblName
パラメータにそれぞれ渡してttCacheConfig
をコールします。
Command> call ttCacheConfig('TblSpaceFullRecovery','oratt','customer'); < TblSpaceFullRecovery, ORATT, CUSTOMER, reload >
キャッシュ管理ユーザーの表領域が一杯である場合に、キャッシュされたOracle表に対して更新処理を発行すると実行されるアクションは、同じOracle Databaseから表をキャッシュし、かつ同じキャッシュ管理ユーザー名が設定されているすべてのTimesTenデータベースに適用されます。
SNMPトラップを有効にしている場合、キャッシュされたOracle表に対して更新処理を発行し、キャッシュ管理ユーザーの表領域が一杯であると、トラップがスローされます。
UPDATE文、INSERT文またはDELETE文などの更新処理をキャッシュされたOracle表に対して発行したために、キャッシュ管理ユーザーの表領域の使用量が指定のしきい値を超えた場合に、アプリケーションに警告が返されるようにTimesTenを構成できます。
Oracle Databaseからの表をキャッシュする任意のTimesTenデータベースから、キャッシュ・マネージャ・ユーザーとしてttCacheConfig
組込みプロシージャをコールします。 TblSpaceThreshold
文字列をParam
パラメータに渡し、しきい値を数値文字列としてValue
パラメータに渡します。 しきい値はキャッシュ管理ユーザーの表領域に使用されている領域の比率であり、この値に達すると、キャッシュされたOracle表に更新処理を発行したときにアプリケーションに警告が返されます。 tblOwner
パラメータおよびtblName
パラメータには値を渡さないでください。これは、キャッシュ管理ユーザーの表領域使用量警告しきい値の設定にはこれらのパラメータを適用できないためです。
キャッシュ・マネージャ・ユーザーがキャッシュ管理ユーザーの表領域使用量警告しきい値を設定し、キャッシュ管理ユーザーがその表領域を監視して構成済のしきい値を超えたかどうかを確認できるようにするには、キャッシュ管理ユーザーにOracle表SYS.DBA_DATA_FILESに対するSELECT権限を付与する必要があります。
例7-12 キャッシュ管理ユーザーの表領域使用量警告しきい値の設定
次の例では、キャッシュされたOracle表に更新処理を発行した結果、キャッシュ管理ユーザーの表領域の使用量が80%を超えた場合には、発行元のアプリケーションに警告を返すように構成しています。
% ttIsql "DSN=cachealone1;UID=cacheuser;PWD=timesten;OraclePWD=oracle" Command> call ttCacheConfig('TblSpaceThreshold',,,'80');
キャッシュ管理ユーザーの表領域使用量警告しきい値の現在の設定を確認するには、TblSpaceThreshold
文字列のみをParam
パラメータに渡してttCacheConfig
をコールします。
Command> call ttCacheConfig('TblSpaceThreshold'); < TblspaceThreshold, <NULL>, <NULL>, 80 >
キャッシュ管理ユーザーのデフォルトの表領域使用量警告しきい値は0%です。つまり、表領域使用量に関係なく、アプリケーションには警告が返されません。 キャッシュ管理ユーザーの表領域使用量警告しきい値は、同じOracle Databaseから表をキャッシュし、かつ同じキャッシュ管理ユーザー名が設定されているすべてのTimesTenデータベースに適用されます。
SNMPトラップを有効にしている場合、キャッシュ管理ユーザーの表領域使用量が構成済のしきい値を超えると、トラップがスローされます。