次の各項では、キャッシュ・グリッド、キャッシュ・グループ、キャッシュ・エージェント・プロセスなどのキャッシュ・システムの様々な情報を管理して監視する方法について説明します。
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データベースごとに用意されるTimesTen Cacheに関する次のような情報が含まれます。
TimesTenデータベースに接続されているキャッシュ・エージェント・プロセス・スレッドの名前
TimesTenデータベースに接続されているレプリケーション・エージェント・プロセス・スレッドの名前
キャッシュ・エージェントが実行されているかどうかに関するステータス
レプリケーション・エージェントが実行されているかどうかに関するステータス
キャッシュ・エージェント起動ポリシー
レプリケーション・エージェント起動ポリシー
ttStatus
ユーティリティの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttStatusに関する説明を参照してください。
キャッシュ・エージェントからOracle Databaseへの接続が失敗すると、キャッシュ・エージェントが10秒ごとに接続を試行します。キャッシュ・エージェントがOracle Databaseに接続できない場合は、10分後にキャッシュ・エージェントが再起動します。この動作は永久に繰り返されます。
レプリケーション・エージェントからOracle Databaseへの接続が失敗すると、レプリケーション・エージェントが120秒後にOracle Databaseへの再接続を試行します。120秒後に再接続できない場合、レプリケーション・エージェントは停止し、再起動しません。
Oracle DatabaseでFast Application Notification(FAN)が有効化されている場合、キャッシュ・エージェントおよびレプリケーション・エージェントは、接続が失敗したことを知らせる通知を即座に受け取ります。FANが有効化されていない場合、これらのエージェントは、接続の失敗に気付かずに、TCPタイムアウト発生まで待機してしまう可能性があります。
Oracle DatabaseでFANおよびTransparent Application Failover (TAF)とともにOracle Real Application Clusters (Oracle RAC)が有効化されている場合は、TAFによって新規Oracle Databaseインスタンスへの接続が管理されます。第11章「Oracle RAC環境でのTimesTen Application-Tier Database Cacheの使用」を参照してください。
次の項では、キャッシュ・グリッドおよびキャッシュ・グループに関する情報を取得する方法およびキャッシュ・グループ処理のステータスを監視する方法について説明します。
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に関する説明を参照してください。
キャッシュ・グループの自動リフレッシュ処理に関する情報および統計を取得するために、TimesTenではいくつかのメカニズムを用意しています。Oracle TimesTen In-Memory Databaseトラブルシューティング・ガイドの自動リフレッシュ・キャッシュ・グループの監視に関する説明を参照してください。
AWTキャッシュ・グループの処理に関する情報および統計を取得するために、TimesTenではいくつかのメカニズムを用意しています。Oracle TimesTen In-Memory Databaseトラブルシューティング・ガイドのAWTパフォーマンスの監視に関する説明を参照してください。
レプリケーション・エージェントは、トランザクション・ログを使用して、AWTキャッシュ・グループのキャッシュ表に対するどの更新がキャッシュされたOracle Database表に伝播され、どの更新が伝播されていないかを判別します。障害が原因で更新がOracle Databaseに自動的に伝播されていない場合は、トランザクション・ログ・ファイルがディスクに蓄積されます。伝播を妨げる障害の例としては、レプリケーション・エージェントが実行されていない場合、Oracle Databaseサーバーが使用不可能である場合などがあります。トランザクション・ログ・ファイルの蓄積の詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のトランザクション・ログ・ファイルの蓄積の監視に関する説明を参照してください。
キャッシュ・マネージャ・ユーザーとしてttCacheAWTThresholdSet
組込みプロシージャをコールして、TimesTenがAWTキャッシュ・グループのキャッシュ表に対する更新の追跡を停止する前に蓄積できるトランザクション・ログ・ファイルの数のしきい値を設定します。デフォルトのしきい値は0です。この組込みプロシージャをコールできるのは、TimesTenデータベースにAWTキャッシュ・グループが含まれている場合のみです。
このしきい値を超えた後は、UNLOAD CACHE GROUP
文の後にLOAD CACHE GROUP
文を続けて使用することによって、キャッシュ表を、キャッシュされたOracle Database表と手動で同期化する必要があります。トランザクション・ログ・ファイルに、キャッシュされたOracle Database表に伝播されなかった更新が含まれている場合も、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リファレンス』のttGridInfoに関する説明を参照してください。
指定のキャッシュ・グリッドまたはすべての既存のキャッシュ・グリッドのすべてのメンバーについて、グリッド名、メンバー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リファレンス』のttGridNodeStatusに関する説明を参照してください。
グローバルAWTキャッシュ・グループの次の処理を一時的にブロックするには、ttGridGlobalCGSuspend
組込みプロシージャを使用します。
動的ロード
キャッシュ・インスタンスの削除
これらの処理を再度有効化するには、ttGridGlobalCGResume
組込みプロシージャを使用します。
キャッシュされたOracle Database表にDDL文が発行された場合、Oracle Database表に行を挿入するためにOracle Database TT_
version_schema-ID
_DDL_T
トリガー(version
はTimesTenの内部バージョン番号、schema-ID
はキャッシュされたOracle Database表を所有するユーザーのID)が起動されたとき、そのDDL文をOracle Database TT_
version
_DDL_L
表で追跡できます。トリガーは、キャッシュされたOracle Database表を所有するOracle Databaseユーザーごとに作成されます。DDL追跡表が1つ作成され、キャッシュされたすべてのOracle Database表に対して発行されたDDL文が格納されます。キャッシュ管理ユーザーは、TT_
version
_DDL_L
表およびTT_
version
_schema-ID
_DDL_T
トリガーを所有します。
キャッシュされたOracle Database表に対して発行されたDDL文を追跡できるようにするには、キャッシュ・マネージャ・ユーザーとしてttCacheDDLTrackingConfig
組込みプロシージャをコールします。デフォルトでは、DDL文は追跡されません。
ttCacheDDLTrackingConfig
組込みプロシージャの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttCacheDDLTrackingConfigに関する説明を参照してください。
例7-5 キャッシュされたOracle Database表に対して発行された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 Databaseオブジェクトが作成されます。
Oracle Databaseデータのキャッシュを管理するために使用するOracle Databaseオブジェクトを手動で作成した場合は、キャッシュ・マネージャ・ユーザーとして、ttIsql
ユーティリティのcachesqlget
コマンドにORACLE_DDL_TRACKING
オプションおよびINSTALL
フラグを指定して実行する必要があります。このコマンドは、DDL文を追跡する対象のキャッシュされたOracle Database表を所有するOracle Databaseユーザーごとに実行する必要があります。このコマンドを実行すると、TT_
version
_DDL_L
表およびTT_
version
_schema-ID
_DDL_T
トリガーを作成するために使用するSQL*Plusスクリプトが生成されます。
スクリプトの生成後、SQL*Plusを使用してsys
ユーザーとしてスクリプトを実行します。
例7-6 Oracle Databaseオブジェクトを手動で作成した場合のDDL追跡表およびトリガーの作成
この例では、ttIsql
ユーティリティのcachesqlget
コマンドによって生成されるSQL*Plusスクリプトは、/tmp/trackddl.sql
ファイルに保存されます。キャッシュされたOracle Database表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 Databaseスキーマに変更を加えるために、キャッシュされたOracle Database表に対してCREATE
、DROP
、ALTER
などのDDL文を発行する必要がある場合は、Oracle Databaseスキーマを変更する前に、処理対象のキャッシュ・グループを削除します。削除しないと、自動リフレッシュなどの処理が失敗する場合があります。列を追加するためにOracle Database表を変更する場合は、キャッシュ・グループを削除する必要はありません。Oracle Database表で他のDDL文を発行するには、最初に次のタスクを実行します。
DROP CACHE GROUP
文を使用して、処理対象のOracle Database表をキャッシュするすべてのキャッシュ・グループを削除します。AWTキャッシュ・グループを削除する場合は、そのキャッシュ・グループを削除する前に、ttRepSubscriberWait
組込みプロシージャを使用して、そのグループのキャッシュ表にコミットされたすべての更新をキャッシュされたOracle Database表に伝播します。
% ttIsql "DSN=cachealone1;UID=cacheuser;PWD=timesten;OraclePWD=oracle" Command> CALL ttRepSubscriberWait('_AWTREPSCHEME','TTREP','_ORACLE','sys1',-1);
キャッシュ・エージェントを停止します。
Oracle Databaseスキーマに必要な変更を加えます。
CREATE CACHE GROUP
文を使用してキャッシュ・グループを再作成します(可能な場合)。
自動リフレッシュ・キャッシュ・グループにキャッシュされるOracle Database表を切り捨てる場合は、次のタスクを実行します。
ALTER CACHE GROUP
文を使用して、キャッシュ・グループの自動リフレッシュ状態をPAUSED
に設定します。
Oracle Database表を切り捨てます。
WHERE
句またはWITH ID
句を指定せずにREFRESH CACHE GROUP
文を使用して、キャッシュ・グループを手動でリフレッシュします。
キャッシュ・グループをリフレッシュすると、自動リフレッシュ処理が再開されます。
キャッシュ管理ユーザーとしてSQL*PlusスクリプトTimesTen_install_dir
/oraclescripts/cacheInfo.sql
を実行し、キャッシュされたOracle Database表で発行されたDDL文を追跡するのに使用するOracle Databaseオブジェクトに関する情報を表示します。
% 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 Database表を所有するOracle Databaseユーザーごとに戻される情報には、DDL追跡表の名前、その対応するDDLトリガーの名前、DDLトリガーが関連付けられているユーザーの名前、DDLトリガーに関連付けられているユーザーが所有する表をキャッシュするキャッシュ・グループの数などがあります。
特定の表が複数のグリッド・メンバーにキャッシュされる場合、各グリッド・メンバーがキャッシュ・グループの数にカウントされます。アクティブ・スタンバイ・ペアは、1つのグリッド・メンバーとしてカウントされます。1つのキャッシュ・グループに複数のキャッシュ表が含まれている場合、DDLトリガーに関連付けられているユーザーが所有する各キャッシュ表がキャッシュ・グループの数にカウントされます。
自動リフレッシュ・キャッシュ・グループの場合、TimesTenはキャッシュ・グループの各キャッシュ表についてOracle Database内に変更ログ表とトリガーを作成します。トリガーは、キャッシュされたOracle Database表で挿入、更新または削除の各処理がコミットされるたびに起動されます。そのトリガーは、更新行の主キーを変更ログ表に記録します。キャッシュ・エージェントは、定期的に変更ログ表で更新キーをスキャンし、変更ログ表をキャッシュされたOracle Database表と結合して最新の更新のスナップショットを取得します。
注意: 2つ以上のTimesTenデータベースで同じOracle表をキャッシュしている場合のパフォーマンス考慮事項については、「2つ以上のTimesTenデータベースにおける同じOracle表のキャッシュ」を参照してください。 |
「データのキャッシュ管理に使用されるOracle Databaseオブジェクトの自動作成」の説明に従って、AUTOREFRESH MODE INCREMENTAL
キャッシュ・グループ属性でキャッシュ・グループを作成するときは、自動リフレッシュ・ライトスルー処理に使用するOracle Databaseオブジェクトを、TimesTenが自動的に作成できます。また、セキュリティを確保するために、これらのオブジェクトの自動作成に必要なRESOURCE
およびCREATE ANY TRIGGER
権限をキャッシュ管理ユーザーに付与しない場合は、キャッシュ・グリッド処理またはキャッシュ・グループ処理を実行する前に、これらのオブジェクトを手動で作成することもできます(「Oracle Databaseデータのキャッシュ管理に使用されるOracle Databaseオブジェクトの手動による作成」を参照)。
Oracle Databaseオブジェクトを自動または手動で作成するには、次の処理を実行する必要があります。
「Oracle Databaseユーザーの作成」の説明に従って、Oracle Databaseにキャッシュ管理ユーザーを作成します。
「キャッシュ管理ユーザーの名前およびパスワードの設定」の説明に従って、TimesTenデータベースにキャッシュ管理ユーザーの名前およびパスワードを設定します。
「キャッシュ・エージェントの管理」の説明に従って、キャッシュ・エージェントを起動します。
TimesTenは、キャッシュ管理ユーザーごとに次のOracle Database表を作成します(ここで、version
はTimesTenの内部バージョン番号、object-ID
はキャッシュされたOracle Database表のIDです)。
表名 | 説明 |
---|---|
TT_ version _AGENT_STATUS |
最初のキャッシュ・グループの作成時に作成されます。自動リフレッシュ・キャッシュ・グループにキャッシュされた各Oracle Database表に関する情報を保存します。 |
TT_ version _AR_PARAMS |
キャッシュ管理ユーザーの名前およびパスワードが設定されたときに作成されます。キャッシュ管理ユーザーの表領域が一杯になったときに実行するアクションを保存します。 |
TT_ version _CACHE_STATS |
キャッシュ管理ユーザーの名前およびパスワードが設定されたときに作成されます。 |
TT_ version _DATABASES |
キャッシュ管理ユーザーの名前およびパスワードが設定されたときに作成されます。Oracle DatabaseからデータをキャッシュするすべてのTimesTenデータベースの自動リフレッシュ・ステータスを保存します。 |
TT_ version _DB_PARAMS |
キャッシュ管理ユーザーの名前およびパスワードが設定されたときに作成されます。キャッシュ・エージェント・タイムアウト、使用不可能なキャッシュ・グループのリカバリ方法およびキャッシュ管理ユーザーの表領域使用量しきい値を保存します。 |
TT_ version _DBSPECIFIC_PARAMS |
内部使用。 |
TT_ version _DDL_L |
キャッシュ管理ユーザーの名前およびパスワードが設定されたときに作成されます。キャッシュされたOracle Database表に対して発行されたDDL文を追跡します。 |
TT_ version _DDL_TRACKING |
キャッシュ管理ユーザーの名前およびパスワードが設定されたときに作成されます。キャッシュされたOracle Database表に対するDDL文の追跡が有効であるか無効であるかを示すフラグを保存します。 |
TT_ version _REPACTIVESTANDBY |
最初のAWTキャッシュ・グループの作成時に作成されます。アクティブ・スタンバイ・ペアのレプリケーション・スキームでレプリケートされるAWTキャッシュ・グループのキャッシュ表を含むTimesTenデータベースの状態およびロールを追跡します。 |
TT_ version _REPPEERS |
最初のAWTキャッシュ・グループの作成時に作成されます。キャッシュされたOracle Database表に非同期に伝播されたキャッシュ表に対する最終更新の時間およびコミット順序番号を追跡します。 |
TT_ version _SYNC_OBJS |
最初のキャッシュ・グループの作成時に作成されます。 |
TT_ version _USER_COUNT |
最初のキャッシュ・グループの作成時に作成されます。各キャッシュされたOracle Database表に関する情報を保存します。 |
TT_ version_object-ID _L |
自動リフレッシュ・キャッシュ・グループを作成すると、そのキャッシュ・グループにキャッシュされるOracle Database表ごとに変更ログ表が1つ作成されます。キャッシュされたOracle Database表に対する更新を追跡します。 |
TimesTenは、キャッシュ管理ユーザーごとに次のOracleトリガーを作成します(ここで、version
はTimesTenの内部バージョン番号、object-ID
はキャッシュされたOracle Database表のID、schema-ID
はキャッシュされたOracle Database表を所有するユーザーのIDです)。
トリガー名 | 説明 |
---|---|
TT_ version _REPACTIVESTANDBY_T |
最初のAWTキャッシュ・グループの作成時に作成されます。起動されると、TT_ version _REPACTIVESTANDBY 表に行を挿入します。 |
TT_ version_object-ID_ T |
自動リフレッシュ・キャッシュ・グループを作成すると、そのキャッシュ・グループにキャッシュされるOracle Database表ごとにトリガーが1つ作成されます。キャッシュされたOracle Database表に対して挿入、削除または更新処理が発行されるたびに起動され、TT_ version_object-ID _L 変更ログ表で処理を追跡します。 |
TT_ version_schema-ID _DDL_T |
キャッシュされたOracle Database表を所有するユーザーごとに1つ存在します。DDL文の追跡を有効にした後、キャッシュ・グループを作成すると作成されます。キャッシュされたOracle Database表に対してDDL文が発行されるたびに起動され、TT_ version _DDL_L 表で処理を追跡します。 |
TimesTenは、timesten
ユーザー用に次のOracle Database表を作成します。
表名 | 説明 |
---|---|
TT_GRIDID |
SQL*PlusスクリプトinitCacheGlobalSchema.sql を実行すると作成されます。最近作成したキャッシュ・グリッドに割り当てられているID番号を保存します。 |
TT_GRIDINFO |
SQL*PlusスクリプトinitCacheGlobalSchema.sql を実行すると作成されます。すべての既存のキャッシュ・グリッドのグリッド名、グリッドIDおよびキャッシュ管理ユーザー名を保存します。 |
TimesTenは、キャッシュ管理ユーザーごとに次のOracle Database表を作成します(ここで、version
はTimesTenの内部バージョン番号、grid-ID
はキャッシュ・グリッドのID番号です)。
表名 | 説明 |
---|---|
TT_ version_grid-name_grid-ID CGNODEID |
グリッドが作成されると、キャッシュ・グリッドごとに1つの表が作成されます。オペレーティング・システムの名前、そのバージョンおよびTimesTenリリース番号を保存します。 |
TT_ version_grid-name_grid-ID CGNODEINFO |
グリッドが作成されると、キャッシュ・グリッドごとに1つの表が作成されます。すべてのアタッチ済グリッド・メンバーのホスト名、メンバー名、IPアドレスおよびキャッシュ・エージェントTCP/IPポートを保存します。 |
TT_ version_grid-name_grid-ID CGGROUPDEFS |
グリッドが作成されると、キャッシュ・グリッドごとに1つの表が作成されます。キャッシュ・グリッドに関連付けられているスタンドアロンTimesTenデータベースまたはアクティブ・スタンバイ・ペアのすべてのグローバル・キャッシュ・グループのキャッシュ・グループ名、所有者、参照カウントおよびSQLテキストを保存します。 |
変更ログ表は、自動リフレッシュ・キャッシュ・グループにキャッシュされるOracle Database表ごとに、キャッシュ管理ユーザーの表領域に作成されます。これらのキャッシュされたOracle Database表に対して更新処理が発行されるたびに、対応する変更ログ表に行が1つ挿入され、これにより、次回の増分自動リフレッシュ・サイクルにおいて、TimesTenキャッシュ表に適用する必要がある更新を常時監視できるようになります。TimesTenは、キャッシュ表に適用された変更ログ表の行を定期的に削除します。
1つのOracle Database表をTimesTenデータベース内の複数のキャッシュ・グループに、キャッシュすることはできません。ただし、1つのOracle Database表を複数のTimesTenデータベースにキャッシュすることはできます。これによって、1つのOracle Database表が複数のTimesTenキャッシュ表に対応することになります。Oracle Database表がキャッシュされる1つ以上のTimesTenデータベースでキャッシュ・エージェントが実行されていないために、キャッシュされたOracle Database表に対する更新が対応するすべてのキャッシュ表に自動的にリフレッシュされない場合、それぞれの変更ログ表の行はデフォルトでは削除されません。キャッシュ・エージェントが明示的に停止されたか、または起動されていなかったため、あるいはデータベースが破棄されたか、データベースがあるインストール済インスタンスが停止しているために、キャッシュ・エージェントが特定のTimesTenデータベースで実行されない場合があります。この結果、変更ログ表に行が蓄積し、キャッシュ・エージェントが実行されているTimesTenデータベースのキャッシュ表に対する自動リフレッシュ処理のパフォーマンスが低下します。また、キャッシュ管理ユーザーの表領域が一杯になる場合もあります。
キャッシュ・エージェント・タイムアウトを設定すると、行が変更ログ表に蓄積されて削除されない状態を回避できます。TimesTenデータベースでキャッシュ・エージェントが実行されておらず、キャッシュ・エージェント・タイムアウトを設定している場合、変更ログ表の行を削除するには、次の基準が満たされている必要があります。
Oracle Database表は、複数の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 Database表と同期化されなくなります。キャッシュされたOracle Database表に対する以後の更新は、付随するキャッシュ・グループがリカバリされるまで、キャッシュ表に自動的にはリフレッシュされません。
自動リフレッシュ・キャッシュ・グループの有効なステータスは、次のとおりです。
ok
: 変更ログ表から削除されたすべての行がキャッシュ表に適用されました。増分自動リフレッシュ処理が引き続きキャッシュ・グループに対して実行されます。
dead
: 変更ログ表から削除された行の一部がキャッシュ表に適用されなかったため、キャッシュ表はキャッシュされたOracle Database表と同期化されません。キャッシュ・グループに対する自動リフレッシュ処理は停止し、キャッシュ・グループがリカバリするまで再開されません。
recovering
: キャッシュ・グループはリカバリ中です。リカバリが完了すると、キャッシュ表がキャッシュされたOracle Database表と同期化され、キャッシュ・グループの自動リフレッシュ・ステータスが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 Database表に対する更新がコミットされても、自動的にはリフレッシュされません。キャッシュ表をキャッシュされたOracle Database表と再同期化するには、キャッシュ・グループをリカバリする必要があります。
自動リフレッシュ・ステータスがdead
になっているキャッシュ・グループ用にリカバリ方法を構成できます。
Oracle Databaseからのデータをキャッシュする任意のTimesTenデータベースから、キャッシュ・マネージャ・ユーザーとしてttCacheConfig
組込みプロシージャをコールします。DeadDbRecovery
文字列をParam
パラメータに渡し、リカバリ方法を文字列としてValue
パラメータに渡します。deadとなっているキャッシュ・グループのリカバリ方法の設定にはtblOwner
パラメータおよびtblName
パラメータを適用できないため、これらのパラメータには値を渡さないでください。
有効なリカバリ方法は次のとおりです。
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 Database表に対して実行される更新の量が少ないと予測される場合は、一時的にキャッシュ・エージェント・タイムアウトを0に設定してみることをお薦めします。データベースが稼働状態に戻り、キャッシュ・エージェントが再起動すると、増分自動リフレッシュ処理が自動リフレッシュ・キャッシュ・グループのキャッシュ表で再開されます。付随するキャッシュ・グループの自動リフレッシュ・ステータスがok
からdead
に変更されなかったため、完全自動リフレッシュ処理が回避されますので、付随するキャッシュ・グループのリカバリ・プロセスは必要ありません。データベースが稼働状態に戻り、キャッシュ・エージェントが起動された後、キャッシュ・エージェント・タイムアウトを元の値に戻します。
自動リフレッシュ・キャッシュ・グループを含むTimesTenデータベースが使用できなくなっても、自動リフレッシュ処理の実装に使用される変更ログ表やトリガーなどのOracle Databaseオブジェクトは引き続きOracle Databaseに存在します。TimesTenデータベースは、たとえば、TimesTenシステムがオフラインになったり、自動リフレッシュ・キャッシュ・グループを削除せずにデータベースを破棄すると使用不可能になります。
TimesTenデータベースが使用されなくなっても、自動リフレッシュ・キャッシュ・グループを含んでいる場合は、自動リフレッシュ処理の実装に使用されるOracle DatabaseオブジェクトもOracle Databaseに引き続き存在します。行が引き続き変更ログ表に蓄積されます。これは、他のTimesTenデータベースに対する自動リフレッシュのパフォーマンスに影響を与えます。このため、使用不可能になったり破棄されたTimesTenデータベースに関連付けられているこれらのOracle Databaseオブジェクトを削除することをお薦めします。
自動リフレッシュ処理の実装に使用されるOracle Databaseオブジェクトを削除するには、キャッシュ管理ユーザーとしてSQL*PlusスクリプトTimesTen_install_dir
/oraclescripts/cacheCleanUp.sql
を実行します。TimesTenシステムのホスト名およびTimesTenデータベースのパス名を引数としてcacheCleanUp.sql
スクリプトに渡します。TimesTenシステムのホスト名およびデータベース・パス名を確認するには、キャッシュ管理ユーザーとしてcacheInfo.sql
スクリプトを実行します。また、cacheInfo.sql
スクリプトは、自動リフレッシュ処理の実装に使用されるオブジェクトがOracle Databaseに存在するかどうかを確認する場合にも使用できます。
例7-10 自動リフレッシュ・キャッシュ・グループのOracle Databaseオブジェクトの削除
次の例では、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
**************************************************************************
次の各項ではキャッシュ管理ユーザーの表領域を管理する方法を説明します。
自動リフレッシュ・キャッシュ・グループの変更ログ表を長期間にわたって使用したり過度なワークロードを与えたりすると、表領域が断片化する場合があります。表領域が劣化して変更ログ表が断片化するのを防ぐために、TimesTenは、領域の合計サイズに対する使用済の領域の割合として、変更ログ表の断片化の比率を計算します。この割合が定義されたしきい値を下回ると、TimesTenは、メッセージをログに記録して変更ログ表の最適化が必要であることを示すアラートを通知し、SNMPトラップが有効である場合は、SNMPトラップttCacheAutorefreshLogSpaceDeFragDetectedTrap
をスローします。デフォルトでは、このしきい値は40%に設定されています。ttCacheConfig
組込みプロシージャにより設定する断片化しきい値を構成できます。
注意: メッセージは、ユーザーおよびサポート・エラー・ログに記録されます。詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の情報メッセージの変更に関する説明を参照してください。 |
断片化しきい値を設定するには、Oracle DatabaseのデータをキャッシュするいずれかのTimesTenデータベースから、キャッシュ・マネージャ・ユーザーとしてttCacheConfig
組込みプロシージャをコールします。AutoRefreshLogFragmentationWarningPCT
文字列をParam
パラメータに渡し、しきい値設定を数値文字列としてValue
パラメータに渡します。
注意: 断片化しきい値の設定にはtblOwner パラメータおよびtblName パラメータを適用できないため、これらのパラメータには値を渡さないでください。 |
例7-11 断片化しきい値の設定
次の例では、断片化しきい値が50%に設定されています。
% ttIsql "DSN=cachealone1;UID=cacheuser;PWD=timesten;OraclePWD=oracle" Command> CALL ttCacheConfig('AutoRefreshLogFragmentationWarningPCT',,,'50'); < AutoRefreshLogFragmentationWarningPCT, <NULL>, <NULL>, 50 > 1 row found.
現在の断片化しきい値の設定を確認するには、AutoRefreshLogFragmentationWarningPCT
文字列をParam
パラメータに渡してttCacheConfig
をコールします。
Command> CALL ttCacheConfig('AutoRefreshLogFragmentationWarningPCT'); < AutoRefreshLogFragmentationWarningPCT, <NULL>, <NULL>, 50 >
最適化を自動で実行するかまたは手動で開始するかのいずれかにTimesTenを構成できます。前述の割合が断片化しきい値を下回ったときに実行するアクションを構成するには、次のようにして、AutoRefreshLogDeFragmentAction
文字列をParam
パラメータに渡し、該当するアクションをValue
パラメータで指定してttCacheConfig
組込みプロシージャをコールします。
注意: 最適化アクションの設定にはtblOwner パラメータおよびtblName パラメータを適用できないため、これらのパラメータには値を渡さないでください。 |
手動
:これがデフォルトです。変更ログ表を最適化するためのアクションは実行されません。ttCacheAutoRefreshLogDeFrag
組込みプロシージャを実行して、手動で最適化を行う必要があります。詳細は、「自動リフレッシュ・キャッシュ・グループ用の変更ログ表の手動による最適化」を参照してください。
Compact
: TimesTenが変更ログ表をデフラグします。
CompactAndReclaim
: TimesTenが変更ログ表を最適化し、領域を再生します。
注意: 領域を再生すると変更ログ表が短時間ロックされ、実表への書込みが一時的に停止されます。 |
例7-12 断片化のときに実行するアクションの構成
次の例では、アクションがCompactAndReclaim
に設定されているため、断片化の割合がしきい値を下回ったときに、TimesTenは変更ログ表を最適化して領域を再生します。
% ttIsql "DSN=cachealone1;UID=cacheuser;PWD=timesten;OraclePWD=oracle" Command> CALL ttCacheConfig('AutoRefreshLogDeFragmentAction',,,'CompactAndReclaim'); < AutoRefreshLogDeFragmentAction, <NULL>, <NULL>, compactandreclaim > 1 row found.
現在の断片化しきい値の設定を確認するには、AutoRefreshLogDeFragmentAction
文字列をParam
パラメータに渡してttCacheConfig
をコールします。
Command> CALL ttCacheConfig('AutoRefreshLogDeFragmentAction'); < AutoRefreshLogDeFragmentAction , <NULL>, <NULL>, compactandreclaim >
表領域の断片化の比率およびttCacheAutorefreshStatsGet
組込みプロシージャから次の列が返される最適化処理が最後に実行されたタイミングを確認できます。
AutoRefreshLogFragmentationPCT
: 表領域の現在の断片化の比率。
AutoRefreshLogFragmentationTS
: 断片化の比率が最後に計算されたときのタイムスタンプ。
autorefLogDeFragCnt
: この特定のキャッシュ・グループの表が最適化された回数。
詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttCacheAutorefreshStatsGetに関する説明を参照してください。
変更ログ表の最適化を手動で開始するには、Oracle DatabaseのデータをキャッシュするいずれかのTimesTenデータベースから、キャッシュ・マネージャ・ユーザーとしてttCacheAutoRefreshLogDeFrag
組込みプロシージャをコールします。パラメータとして次の文字列のいずれかを渡します。
Compact
: 変更ログ表をデフラグします。
CompactAndReclaim
: 変更ログ表を最適化して、領域を再生します。
注意: 領域を再生すると変更ログ表が短時間ロックされ、実表への書込みが一時的に停止されます。 |
表領域が一杯になるのを防ぐため、UPDATE
文、INSERT
文またはDELETE
文などの更新処理をキャッシュされたOracle Database表に対して発行したために、キャッシュ管理ユーザーの表領域の使用量が指定のしきい値を超えた場合に、アプリケーションに警告が返されるようにTimesTenを構成できます。
Oracle Databaseからのキャッシュ表をキャッシュする任意のTimesTenデータベースから、キャッシュ・マネージャ・ユーザーとしてttCacheConfig
組込みプロシージャをコールします。AutoRefreshLogTblSpaceUsagePCT
文字列をParam
パラメータに渡し、しきい値を数値文字列としてValue
パラメータに渡します。しきい値はキャッシュ管理ユーザーの表領域に使用されている領域の比率であり、この値に達すると、キャッシュされたOracle Database表に更新処理を発行したときにアプリケーションに警告が返されます。キャッシュ管理ユーザーの表領域使用量警告しきい値の設定にはtblOwner
パラメータおよびtblName
パラメータを適用できないため、これらのパラメータには値を渡さないでください。
キャッシュ・マネージャ・ユーザーがキャッシュ管理ユーザーの表領域使用量警告しきい値を設定し、キャッシュ管理ユーザーがその表領域を監視して構成済のしきい値を超えたかどうかを確認できるようにするには、キャッシュ管理ユーザーにOracle Database表SYS.DBA_DATA_FILES
に対するSELECT
権限を付与する必要があります。
例7-14 キャッシュ管理ユーザーの表領域使用量警告しきい値の設定
次の例では、キャッシュされたOracle Database表に更新処理を発行した結果、キャッシュ管理ユーザーの表領域の使用量が80%を超えた場合には、発行元のアプリケーションに警告を返すように構成しています。
% ttIsql "DSN=cachealone1;UID=cacheuser;PWD=timesten;OraclePWD=oracle" Command> CALL ttCacheConfig('AutoRefreshLogTblSpaceUsagePCT',,,'80');
キャッシュ管理ユーザーの表領域使用量警告しきい値の現在の設定を確認するには、AutoRefreshLogTblSpaceUsagePCT
文字列のみをParam
パラメータに渡してttCacheConfig
をコールします。
Command> CALL ttCacheConfig('AutoRefreshLogTblSpaceUsagePCT'); < AutoRefreshLogTblSpaceUsagePCT, <NULL>, <NULL>, 80 >
キャッシュ管理ユーザーのデフォルトの表領域使用量警告しきい値は0%であるため、表領域使用量に関係なく、アプリケーションには警告が返されません。キャッシュ管理ユーザーの表領域使用量警告しきい値は、同じOracle Databaseから表をキャッシュし、かつ同じキャッシュ管理ユーザー名が設定されているすべてのTimesTenデータベースに適用されます。
SNMPトラップを有効にしている場合、キャッシュ管理ユーザーの表領域使用量が構成済のしきい値を超えると、トラップがスローされます。
デフォルトでは、キャッシュ管理ユーザーの表領域が一杯になったときに、特定のキャッシュされたOracle Database表に対してUPDATE
文、INSERT
文またはDELETE
文などのDML処理を試行すると、Oracle Databaseアプリケーションにエラーが返されます。
キャッシュ管理ユーザーの表領域が一杯になったときにTimesTenがOracle Databaseアプリケーションにエラーを返すのではなく、更新処理が特定のキャッシュされたOracle Database表に発行されたときに変更ログ表から既存の行を削除して、新規行のための領域を確保するようにTimesTenを構成できます。変更ログ表から削除した行の一部がTimesTenキャッシュ表に適用されなかった場合、次回の自動リフレッシュ・サイクルにおいて、そのキャッシュ表を含む各TimesTenデータベースのキャッシュ表に完全自動リフレッシュ処理が実行されます。
Oracle Databaseからのキャッシュ表をキャッシュする任意のTimesTenデータベースから、キャッシュ・マネージャ・ユーザーとしてttCacheConfig
組込みプロシージャをコールします。TblSpaceFullRecovery
文字列をParam
パラメータに渡し、キャッシュ管理ユーザーの表領域が一杯になった場合に実行するアクションを構成するキャッシュされたOracle Database表の所有者および名前をtblOwner
パラメータおよびtblName
パラメータにそれぞれ渡し、さらに、そのアクション自体を文字列としてValue
パラメータに渡します。
有効なアクションは次のとおりです。
None
: キャッシュされたOracle Database表に更新処理が発行されたときに、アプリケーションにOracle Databaseエラーを返します。これがデフォルトのアクションです。
Reload
: キャッシュされたOracle Database表に更新処理が発行されると、次回の自動リフレッシュ・サイクルにおいて、変更ログ表から行を削除し、キャッシュ表に対して完全自動リフレッシュ処理を実行します。
例7-15 キャッシュ管理ユーザーの表領域が一杯になった場合のアクションの構成
次の例では、キャッシュされたOracle Database表oratt.customer
に更新処理が発行されたときにキャッシュ管理ユーザーの表領域が一杯である場合、次回の自動リフレッシュ・サイクルにおいて、変更ログ表から行が削除され、キャッシュ表に対して完全自動リフレッシュ処理が実行されます。
% ttIsql "DSN=cachealone1;UID=cacheuser;PWD=timesten;OraclePWD=oracle" Command> CALL ttCacheConfig('TblSpaceFullRecovery','oratt','customer','Reload');
キャッシュ管理ユーザーの表領域が一杯である場合に、特定のキャッシュされたOracle Database表に対して更新処理を発行すると実行される現在のアクションを確認するには、TblSpaceFullRecovery
文字列のみをParam
パラメータに、キャッシュされたOracle Database表の所有者および名前をtblOwner
パラメータおよびtblName
パラメータにそれぞれ渡してttCacheConfig
をコールします。
Command> CALL ttCacheConfig('TblSpaceFullRecovery','oratt','customer'); < TblSpaceFullRecovery, ORATT, CUSTOMER, reload >
キャッシュ管理ユーザーの表領域が一杯である場合に、キャッシュされたOracle Database表に対して更新処理を発行すると実行されるアクションは、同じOracle Databaseから表をキャッシュし、かつ同じキャッシュ管理ユーザー名が設定されているすべてのTimesTenデータベースに適用されます。
SNMPトラップを有効にしている場合、キャッシュされたOracle Database表に対して更新処理を発行し、キャッシュ管理ユーザーの表領域が一杯であると、トラップがスローされます。
スタンドアロン・データベース・グリッド・メンバーに障害が発生した場合、キャッシュ・エージェント起動ポリシーがmanual
またはalways
であれば、キャッシュ・エージェントは自動的に再起動されます。グリッド・メンバーは、データベースのリカバリ時に自動的にグリッドに再アタッチされます。キャッシュ・エージェント起動ポリシーがnorestart
である場合は、キャッシュ・エージェントを再起動してから、ttGridAttach
組込みプロシージャをコールしてメンバーをグリッドに再アタッチする必要があります。「キャッシュ・エージェント起動ポリシーの設定」を参照してください。
スタンドアロン・データベース・グリッド・メンバーがグリッドにアタッチされていることを確認するには、ttRepStateGet
組込みプロシージャをコールします。アタッチされている場合は、次の出力が表示されます。
Command> CALL ttRepStateGet; < IDLE, AVAILABLE > 1 row found.
Oracle Clusterwareによりグリッド内のノードが管理されているときに、アクティブ・スタンバイ・ペア・グリッド・メンバーのアクティブ・データベース・ノードまたはスタンバイ・データベース・ノードに障害が発生した場合は、キャッシュ・エージェントの再起動時にグリッド・ノードが自動的にグリッドに再アタッチされます。Oracle Clusterwareによる障害の処理方法の詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』の障害からのリカバリに関する説明を参照してください。
アクティブ・スタンバイ・ペア・グリッド・メンバーがOracle Clusterwareによって管理されていない場合は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・データベースの障害からのリカバリに関する説明またはスタンバイ・データベースの障害からのリカバリに関する説明の手順を実行します。キャッシュ・エージェント起動ポリシーがmanual
またはalways
である場合は、データベースのリカバリ後、グリッド・ノードが自動的にグリッドに再アタッチされます。キャッシュ・エージェント起動ポリシーがnorestart
である場合は、ttGridAttach
組込みプロシージャをコールしてメンバーをグリッドに再アタッチします。
アクティブ・データベースが使用可能で、アクティブ・スタンバイ・ペアがグリッドにアタッチされていることを確認するには、アクティブ・データベースからttRepStateGet
組込みプロシージャをコールします。
Command> CALL ttRepStateGet; < ACTIVE, AVAILABLE > 1 row found.
詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttRepStateGetに関する説明を参照してください。
たとえば、ハードウェアの障害またはネットワークの障害が原因で、複数ノード障害が発生する場合があります。複数ノード障害の発生後、再アタッチが必要なメンバーごとに、ttGridAttach
組込みプロシージャをコールします。この組込みプロシージャを、再アタッチする最後のグリッド・メンバーに対してコールするまで、各グリッド・メンバーに対する処理は失敗します。まだアタッチされていないグリッド・メンバーに対して再度ttGridAttach
をコールすれば、処理が成功します。互いの状態を認識していないグリッド・メンバーでスプリットブレイン状況が発生するのを回避するためには、この順序が必須です。
キャッシュ・グループを含むデータベースは、ttBackup
またはttMigrate
のいずれかのユーティリティを使用して、バックアップまたはリストアできます。
リストア済データベースが同じバックエンドOracle Databaseに接続する場合は、ttBackup
ユーティリティおよびttRestore
ユーティリティを使用した後に、リストア済TimesTenデータベース内のすべてのキャッシュ・グループを削除して再作成します。これらが静的キャッシュ・グループの場合は再ロードを要求される場合があります。動的キャッシュ・グループの場合は、再ロードはオプションとなります。これは、データは参照されるときにOracle Databaseからプルされるためです。
注意: 元のバックエンドOracle Databaseに接続するために別のTimesTenデータベースを使用し(これ以降は接続しません)、そのTimesTenデータベース内のすべてのキャッシュ・グループが完全に削除されなかった場合は、元のOracle Databaseに対してcacheCleanUp.sql SQL*Plusスクリプトを実行して残存オブジェクトをすべて削除します。元のTimesTenデータベースのホストとパスを指定します。 |
リストア済データベースが元々接続していたデータベースとは別のバックエンドOracle Databaseに接続する場合は、次のいずれかの手順を実行します。
ttBackup
ユーティリティを使用すると、特定の時間のデータをすべて含むTimesTenデータベースがバックアップされます。そのため、これらのキャッシュ・グループを再度使用する場合、このバックアップのリストアでは、キャッシュ・グループ内のリストア済データは古く、バックエンドOracle Databaseのデータと同期しないために、追加のアクションが必要です。
注意: これらのツールの詳細は、『Oracle TimesTen In-Memory Databaseインストレーション・ガイド』の移行、バックアップおよびリストアに関する説明および『Oracle TimesTen In-Memory Databaseリファレンス』のttBackupに関する説明およびttRestoreに関する説明を参照してください。 |
リストア済データベースが元々接続していたデータベースとは別のバックエンドOracle Databaseに接続する場合で、データベースのバックアップおよびリストアにttBackup
ユーティリティおよびttRestore
ユーティリティを使用する場合は、次の手順を実行します。
ttBackup
ユーティリティ・コマンドを実行して、データベースおよびそのオブジェクトをバイナリ・ファイルにバックアップします。たとえば、一時記憶域として/tmp/dump
ディレクトリを使用してcachealone1
データベースをバックアップするには、次のように指定します。
$ ttBackup -dir /tmp/dump -connstr "DSN=cachealone1"
すべてのキャッシュ・グループを削除して、データベースを破棄します。データベースはキャッシュ・グループにまだ存在するため、同じまたは別の場所にリストアする前に、キャッシュ・グループを削除してデータベースを破棄します。
$ ttIsql -connstr "DSN=cachealone1;UID=cacheuser;PWD=timesten;OraclePWD=oracle" Command> call ttCacheStop; Command> DROP CACHE GROUP readcache; Command> exit; Disconnecting... Done. $ ttDestroy cachealone1
ttRestore
ユーティリティを使用してデータベースをリストアした後に、一時ディレクトリを削除します。
$ ttRestore -dir /tmp/dump -connstr "DSN=cachealone1" Restore started ... Restore complete $ rm -r /tmp/dump
キャッシュ・グループ内でデータを再同期化するために、次の手順でキャッシュ・グループを削除して再作成する必要があります。
TimesTenデータベースに接続します。
ttRestore
ユーティリティを使用してリストアされたキャッシュ・グループを削除します。データが同期していないため、エラーが表示される場合があります。
ttCacheUidPwdSet
組込みプロシージャを使用してキャッシュ管理者ユーザー名およびパスワードを指定します。
キャッシュ・エージェントを起動します。
キャッシュ・グループを再作成し、必要があれば再ロードします。
$ ttIsql -connstr "DSN=cachealone1;UID=cacheuser;PWD=timesten;OraclePWD=oracle" Command> DROP CACHE GROUP readcache; Command> call ttCacheUidPwdSet('cacheuser','oracle'); Command> call ttCacheStart; Command> CREATE READONLY CACHE GROUP readcache > AUTOREFRESH INTERVAL 5 SECONDS > FROM oratt.readtab > (keyval NUMBER NOT NULL PRIMARY KEY, str VARCHAR2(32)); Command> LOAD CACHE GROUP readcache COMMIT EVERY 256 ROWS; 2 cache instances affected.
注意: リストア済TimesTenデータベースがどのバックエンドOracle Databaseとも接続できない場合、TimesTenは読取り専用キャッシュ・グループのデータを自動リフレッシュできません。 |
ttMigrate
ユーティリティは、TimesTenデータベースの表および索引をバイナリ・ファイルに保存します。キャッシュ・グループが移行されてバイナリ・ファイルに含まれている場合、キャッシュ・グループの定義およびスキーマは含まれていますが、キャッシュ・グループのデータは移行されていません。
注意: これらのツールの詳細は、『Oracle TimesTen In-Memory Databaseインストレーション・ガイド』の移行、バックアップおよびリストアに関する説明および『Oracle TimesTen In-Memory Databaseリファレンス』のttMigrateに関する説明を参照してください。 |
リストア済データベースが元々接続していたデータベースとは別のバックエンドOracle Databaseに接続する場合で、データベースのバックアップおよびリストアにttMigrate
ユーティリティを使用する場合は、次の手順を実行します。
ttMigrate -c
ユーティリティ・コマンドを実行して、データベースおよびそのオブジェクトをバイナリ・ファイルに保存します。
$ ttMigrate -c "DSN=cachealone1" cachealone1.ttm ... Saving user CACHEUSER User successfully saved. Saving user ORATT User successfully saved. Saving table CACHEUSER.READTAB Saving rows... 2/2 rows saved. Table successfully saved. Saving cache group CACHEUSER.READCACHE Saving cached table ORATT.READTAB Cache group successfully saved.
すべてのキャッシュ・グループを削除して、TimesTenデータベースを破棄します。
キャッシュ・エージェントを停止します。
すべてのキャッシュ・グループを削除します。エラーが報告される場合もありますが、これは無視しても差し支えありません。TimesTenデータベースを破棄する前にすべてのキャッシュ・グループを削除すると、Oracle Databaseにあるそのキャッシュ・グループのメタデータがすべて削除されます。
TimesTenデータベースを破棄します。
Command> call ttCacheStop; Command> DROP CACHE GROUP readcache; Command> exit Disconnecting... Done. $ ttDestroy cachealone1
データベースを作成してリストアします。
最初の接続リクエストでTimesTenデータベースを作成します。
TimesTenキャッシュ表ユーザーおよびTimesTenキャッシュ・マネージャ・ユーザーを作成します。これらのユーザーに適切な権限を付与します。
注意: 移行元のTimesTenリリースによっては、ユーザーおよび権限が移行されない場合があります。詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttMigrateに関する説明を参照してください。 |
ttMigrate -r
ユーティリティ・コマンドを使用して、保存したバイナリ・ファイルからデータベースをリストアします。
$ ttIsql cachealone1 Command> CREATE USER cacheuser IDENTIFIED BY timesten; User created. Command> GRANT CREATE SESSION, CACHE_MANAGER, CREATE ANY TABLE TO cacheuser; Command> CREATE USER oratt IDENTIFIED BY timesten; User created. Command> exit Disconnecting... Done. $ ttMigrate -r -relaxedUpgrade -cacheuid cacheuser -cachepwd oracle -connstr "DSN=cachealone1;UID=cacheuser;PWD=timesten;OraclePWD=oracle" cachealone1.ttm ... Restoring table CACHEUSER.READTAB Restoring rows... 2/2 rows restored. Table successfully restored. Restoring cache group CACHEUSER.READCACHE Restoring cached table ORATT.READTAB 1/1 cached table restored. Cache group successfully restored.
リストアされたデータベースに接続し、キャッシュの自動リフレッシュ状態をリセットします。
ttIsqlを使用してTimesTenデータベースに接続します。
ttCacheUidPwdSet
組込みプロシージャを使用してキャッシュ管理者ユーザー名およびパスワードを指定します。
キャッシュ・エージェントを起動します。
自動リフレッシュの状態をON
に設定するようキャッシュ・グループを変更します。
$ ttIsql -connstr "DSN=cachealone1;UID=cacheuser;PWD=timesten;OraclePWD=oracle" Command> call ttCacheUidPwdSet('cacheuser','oracle'); Command> call ttCacheStart; Command> ALTER CACHE GROUP readcache SET AUTOREFRESH STATE ON;
注意: リストア済TimesTenデータベースがどのバックエンドOracle Databaseとも接続できない場合、TimesTenは読取り専用キャッシュ・グループのデータを自動リフレッシュできません。 |
次の手順を実行して、TimesTenキャッシュ・マネージャ・ユーザー、コンパニオンOracleユーザーまたはキャッシュ管理ユーザーのユーザー名またはパスワードを変更します。
キャッシュ・マネージャ・ユーザーまたはパスワードを変更する場合は、次の手順を実行します。
注意: TimesTenキャッシュ・マネージャ・ユーザーおよびそのコンパニオンOracleユーザーのパスワードは、いつでも変更できます。TimesTenのキャッシュ・マネージャ・ユーザーの名前は、そのコンパニオンOracleユーザーと同じにする必要がありますが、パスワードは異なってもかまいません。キャッシュ・マネージャ・ユーザーおよびそのコンパニオンOracleユーザーの詳細は、「TimesTenユーザーの作成」を参照してください。 |
TimesTenデータベースで、キャッシュ・マネージャ・ユーザーのパスワードを変更する場合は、アクティブ・マスターでALTER USER
文を使用します。
Command> ALTER USER cacheuser IDENTIFIED BY newpwd;
バックエンドOracle Databaseで、ALTER USER
文を使用してキャッシュ・マネージャのコンパニオンOracleパスワードを変更できます。TimesTenを操作している場合、Passthrough 3
を使用してこれを直接Oracle Database上で実行できます。
Command> passthrough 3; Command> ALTER USER cacheuser IDENTIFIED BY newpwd;
注意: コンパニオンOracleユーザーのパスワードを変更した場合は、キャッシュ・マネージャ・ユーザーとしてTimesTenデータベースに再接続して、キャッシュ・マネージャ・ユーザーおよびそのコンパニオンOracleユーザーのパスワードを指定します。 |
キャッシュ・マネージャ・ユーザーを変更する場合は、そのキャッシュ・マネージャ・ユーザーが所有するすべてのキャッシュ・グループを削除してから、既存のユーザーを削除して新しいユーザーを作成する必要があります。
注意: または、別のユーザーをキャッシュ・マネージャ・ユーザーとして使用する場合は、そのユーザーに適切な権限があり、適切な権限を持つコンパニオンOracleユーザーがいることを確認してください。 |
さらに、キャッシュ・マネージャ・ユーザーには、同じ名前を持つコンパニオンOracleユーザーが必要なため、次のいずれかを実行する必要があります。
コンパニオンOracleユーザーが所有するすべての表を削除し、ユーザーを削除してから、新しいキャッシュ・マネージャ・ユーザーと同じ名前でコンパニオンOracleユーザーを再作成します。現在のコンパニオンOracleユーザーがキャッシュ管理ユーザーの場合は、手順3に進みます。
キャッシュ・マネージャ・ユーザーと同じ名前を持ち、同じ機能を提供する別のOracleユーザーを選択します。
キャッシュ・マネージャ・ユーザーおよびそのコンパニオンOracleユーザーの作成方法の詳細は、「TimesTenユーザーの作成」を参照してください。
TimesTenキャッシュ・マネージャ・ユーザーの名前またはパスワードがsys.odbc.ini
(またはodbc.ini
)ファイルで定義されている場合、アクティブ・マスターとスタンバイ・マスターの両方でsys.odbc.ini
(またはodbc.ini
)ファイルのキャッシュ・マネージャ・ユーザーの新しい名前またはパスワードを更新します。
キャッシュ管理ユーザーまたはそのパスワードを変更する場合は、次の手順を実行します。
バックエンドOracle Databaseで、ALTER USER
文を使用してキャッシュ管理パスワードを変更できます。キャッシュ管理ユーザーのパスワードはいつでも変更できます。
TimesTenを操作している場合、Passthrough 3
を使用してこれを直接Oracle Database上で実行できます。
Command> passthrough 3; Command> ALTER USER cacheuser IDENTIFIED BY newpwd;
キャッシュ管理ユーザーを変更する場合は、Oracle Databaseでキャッシュ管理ユーザーを削除して新しいユーザーを作成する前に、そのキャッシュ管理ユーザーが管理するTimesTenデータベース上のすべてのキャッシュ・グループを最初に削除する必要があります。TimesTenでキャッシュ・グループを削除すると、そのキャッシュ・グループに関連付けられているすべてのメタデータが削除されます。
Oracle Databaseで新しいキャッシュ管理ユーザーを作成する場合、「Oracle Databaseユーザーの作成」に記載されているキャッシュ管理ユーザーの作成手順と同じ手順を実行する必要があります。
ttCacheUidPwdSet
組込みプロシージャをアクティブ・マスター・データベースで実行することで、キャッシュ管理ユーザーの新しいユーザー名またはパスワードを設定します。
Command> call ttCacheUidPwdSet('cacheuser','newpwd');