自動リフレッシュの状況は、ttIsqlからプロシージャttCacheMonitorを定期的にコールして検証します。ttCacheMonitorには自動リフレッシュの処理状況を示す次の2つの機能があります。
cgRefreshCount
機能を使用すると、キャッシュ・グループに関連付けられている内部カウンタの現在の値を確認できます。カウンタは、キャッシュ・エージェントが再起動すると0にリセットされ、キャッシュ・グループが自動リフレッシュされた後に1ずつ増加します。自動リフレッシュが正常に行われている場合は、時間の経過とともにcgRefreshCount
からの出力が増えることを確認できます。
また、cgTotalNumRows
機能を使用すると、キャッシュ・エージェントが起動された後にリフレッシュされたルート表の行の合計数を確認できます。cgTotalNumRows
からの出力は、Oracleの実表に変更があったときにのみ増加します。
たとえば、ttCacheMonitorを使用して、キャッシュ・エージェントが起動された後にキャッシュ・グループcg1で実行された自動リフレッシュの回数を確認するには、次のように入力します。
% ttIsql
Command> call ttCacheMonitor('cgRefreshCount', 'cg1', null);
< 11 >
1 row found.
リフレッシュによって更新されたルート表の行数を確認するには、次のように入力します。
Command> call ttCacheMonitor('cgTotalNumRows', 'cg1', null);
< 1 >
1 row found.
キャッシュ・グループが、Oracleの更新によって、指定された間隔で自動的にリフレッシュされていない場合は、次の表で考えられる原因を確認してください。自動リフレッシュに関連するほとんどの問題は、ttDaemonLogユーティリティで生成されるデーモン・ログにレポートされます。
SNMPトラップを有効にして、自動リフレッシュの問題が発生した場合に警告されるようにし、詳細についてのデーモン・ログが示されるようにします。Cache Connect to Oracleの自動リフレッシュに関連付けられたSNMPトラップは次のとおりです。
自動リフレッシュの問題について、考えられる原因を次の表に示します。
考えられる原因
|
対処
|
---|---|
キャッシュ・エージェントがキャッシュ管理ユーザーによって起動されていない | キャッシュ・エージェントの起動時に、キャッシュ管理ユーザーのIDとパスワードを指定する(『Oracle TimesTen Cache Connect to Oracle開発者および管理者ガイド』のキャッシュ・エージェントの起動と停止に関する説明を参照)。 |
実表のオブジェクトIDが変更された | |
自動リフレッシュ・トリガーが有効でない | |
TT_version_USER_COUNT表に記録されている現在のログ順序番号が、自動リフレッシュ・ログ表の最大ログ順序番号より小さい | |
TT_version_USER_COUNT表に、アクティブな増分自動リフレッシュ表のusercount > 0である行がない | |
ログ表が空である | |
ユーザー・カウントが0未満か、TT_version_USER_COUNTログ順序が異常 | |
キャッシュされた表に関連付けられている自動リフレッシュ・ログ表、トリガーまたは順序が存在しないか、有効でない | キャッシュ・エージェントが、正しいキャッシュ管理ユーザーIDで起動されたかどうかを確認する。キャッシュ管理ユーザーIDが正しい場合は、「自動リフレッシュOracleオブジェクトをリカバリしてリセットする」の手順に従う。 デーモン・ログで、致命的な異常についてのメッセージを確認する。これには、Oracleオブジェクトの破損または欠落が示されている。 |
TT_version_USER_COUNT表がない | キャッシュ・エージェントが、正しいキャッシュ管理ユーザーIDで起動されたかどうかを確認する。キャッシュ管理ユーザーIDが正しい場合は、「自動リフレッシュOracleオブジェクトをリカバリしてリセットする」の手順に従う。 デーモン・ログで、致命的な異常についてのメッセージを確認する。これには、Oracleオブジェクトの破損または欠落が示されている。 |
TT_version_USER_COUNT表に記録されている現在のログ順序番号が変化する場合は、ブックマークと異なり、関連付けられているキャッシュ表が次にコミットされる自動リフレッシュでリフレッシュされない | まず、キャッシュ・エージェントを再起動する。これによって解決しない場合は、「自動リフレッシュOracleオブジェクトをリカバリしてリセットする」の手順に従う。 |
リソースの問題 | キャッシュ・エージェントを再起動する。 |
増分AUTOREFRESHは、Oracle実表でTRUNCATE文が使用されている場合は、正しく動作しません。Oracle実表でTRUNCATE文が使用されている場合は、ALTER CACHE GROUP文を使用してAUTOREFRESHをリセットし、AUTOREFRESH STATEをOFFに設定してから、別のALTER CACHE GROUP文でAUTOREFRESH STATEをONに戻します。
問題の原因が、AUTOREFRESHで使用するOracleオブジェクトにある場合、またはその可能性がある場合は、次の手順でOracleオブジェクトを再作成します。
ALTER CACHE GROUP <cache group name> SET AUTOREFRESH STATE OFF;
Oracleデータベースで、次の文を実行します。
SELECT usercount FROM <autorefresh id>.tt_<version>_user_count
WHERE tablename ='<owner>.<tablename>';
カウントが0(ゼロ)でない場合は、次の文を実行して0(ゼロ)に設定します。
UPDATE <autorefresh id>.tt_<version>_user_count SET usercount = 0
WHERE tablename ='<owner>.<tablename>';
Cleanup of the Oracle objects completed
ALTER CACHE GROUP <cachegroup name> SET AUTOREFRESH STATE ON;