ヘッダーをスキップ
Oracle TimesTen In-Memory Databaseトラブルシューティング・プロシージャ・ガイド
リリース7.0
E05173-02
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

自動リフレッシュ時に指定した間隔でキャッシュがリフレッシュされない

自動リフレッシュの状況は、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に戻します。

自動リフレッシュOracleオブジェクトをリカバリしてリセットする

問題の原因が、AUTOREFRESHで使用するOracleオブジェクトにある場合、またはその可能性がある場合は、次の手順でOracleオブジェクトを再作成します。

  1. 問題のキャッシュ表があるすべてのデータ・ストア上のすべてのキャッシュ・グループについて、ALTER CACHE GROUPを使用してAUTOREFRESHの状態をOFFにリセットします。
  2. ALTER CACHE GROUP <cache group name> SET AUTOREFRESH STATE OFF;

  3. 対象となるすべてのデータ・ストア上のすべてのキャッシュ・エージェントを停止します。
  4. キャッシュ・グループ内の各表について、ユーザー・カウントが0(ゼロ)かどうかを確認します。
  5. 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>';

  6. いずれかのキャッシュ・エージェントを起動します。そのキャッシュ・エージェントによって、クリーンアップ操作が実行されます。クリーンアップが終了すると、次のメッセージがデーモン・ログに表示されます。
  7. Cleanup of the Oracle objects completed

  8. キャッシュ・エージェントによるクリーンアップが終了したら、ALTER CACHE GROUPを使用してAUTOREFRESHの状態をONに戻します。
  9. ALTER CACHE GROUP <cachegroup name> SET AUTOREFRESH STATE ON;

  10. 他のすべてのキャッシュ・エージェントを起動します。
  11. すべてのデータ・ストアの対象となるすべてのキャッシュ・グループについて、ALTER CACHE GROUPを使用してAUTOREFRESHの状態をONに戻します。