この章では、Oracle In-Memory Database Cache(IMDB Cache)の使用時に発生する可能性があるいくつかの問題の解決方法について説明します。内容は次のとおりです。
AWTキャッシュ・グループで問題が発生している場合は、「AWTキャッシュ・グループのトラブルシューティング」も参照してください。
この項では、CREATE CACHE GROUP文の実行時に発生する可能性があるいくつかの問題について説明します。
考えられる原因 | 対処 |
---|---|
ユーザーがキャッシュ・グループの型を作成するための正しいOracle権限を持っていない | 「Oracle権限を確認する」を参照してください。 |
データ・ストアにアクセスするための十分な権限がユーザーにない | キャッシュ・グループを作成するには、CACHE_MANAGER権限が必要です。 |
内部/外部ユーザーがOracleユーザーと一致しない | TimesTenユーザー名は、Oracleユーザー名と同じである必要があります。 |
Oracleに接続できない | 次の項を参照してください。
ネットワーク・ステータスを確認する。 |
キャッシュ管理ユーザーのIDまたはパスワードが設定されていない(AWTまたは自動リフレッシュ・キャッシュ・グループを作成しようとした場合) | 「キャッシュ管理ユーザーのIDおよびパスワードを設定する」を参照してください。 |
サポートされていないデータ型マッピング | 「サポートされていないデータ型マッピング」を参照してください。 |
OracleでのNULL値可能設定が異なる | 「NULL制約がOracleと一致しない」を参照してください。 |
ルート表で主キーを指定できない | キャッシュ・グループのルート表には、主キーが必要です。 『Oracle In-Memory Database Cacheユーザーズ・ガイド』のキャッシュ・グループの定義に関する説明を参照してください。 |
この項では、キャッシュ・エージェントの起動時または停止時に発生する可能性があるいくつかの問題について説明します。
考えられる原因 | 対処 |
---|---|
キャッシュ・エージェントがすでに稼働している | 「キャッシュ・エージェントのステータスを確認する」を参照してください。 |
Oracleライブラリが見つからない |
|
ORACLE_HOMEが無効。 | 「ORACLE_HOME環境変数を確認する」を参照してください。 |
権限が不足している | キャッシュ・エージェントを起動または停止するには、CACHE_MANAGER権限が必要です。 |
OracleIDが間違っている | DSN定義に設定したOracleIDが、TimesTenでキャッシュする表が含まれるOracleインスタンスのOracleサービス名と一致することを確認します。 |
キャッシュ・エージェントのステータスは、ttStatus
ユーティリティ(「ttStatusユーティリティの使用」を参照)を使用して確認します。
キャッシュ・エージェントが稼働していない場合は、起動します(『Oracle In-Memory Database Cacheユーザーズ・ガイド』のキャッシュ・エージェントの起動に関する説明を参照)。キャッシュ・エージェントを起動できない場合は、考えられる原因を調査し、マシンを再起動してから起動してください。
サービス名が解決できなかったことを示すOCIエラーORA-12514を受け取った場合は、次の内容を確認します。
Oracle TNSPINGユーティリティを使用して、サービスが到達可能であることを確認します。
DSN定義に設定したOracleID
が、TimesTenでキャッシュする表が含まれるOracleインスタンスのOracleサービス名と一致することを確認します。
定義したサービス名が存在することを確認します。Windows Oracleクライアントの場合は、Oracle Net Configuration Assistantを使用してサービス名を構成します。 Oracle Net Configuration Assistantで、「Oracle Netの構成」→「ローカル」→「サービス・ネーミング」に移動し、Oracleサーバーを選択して、Oracleサーバーを識別するサービス名またはSIDがあることを確認します。サービス名を追加または変更した場合は、再起動する必要があります。
SQL*Plusを使用して、Oracleのキャッシュ管理ユーザーのユーザー名とパスワードを確認し、このサービス名が機能することを確認します。 次に例を示します。
%sqlplus cache_admin_user/cache_admin_pwd@OracleHost
ここで、cache_admin_user
はキャッシュ管理ユーザーのユーザー名、cache_admin_pwd
はキャッシュ管理ユーザーのパスワード、OracleHost
はDSN定義で指定されているOracleIDです。
注意: キャッシュ管理ユーザーは、通常のOracleユーザーと異なってもかまいません。 詳細は、『Oracle In-Memory Database Cacheユーザーズ・ガイド』のOracleユーザーの作成に関する説明を参照してください。 |
TimesTenマシン上にtnsnames.ora
のコピーが複数存在しないことを確認します。また、tnsnames.ora
に対する権限も確認します。
TimesTenをUNIXシステムで実行している場合は、ORACLE_HOME環境変数が、正しいOracleインストール・ディレクトリを指していることを確認します。 次に例を示します。
ORACLE_HOME=/products/oracle10g
Oracleクライアントおよびサーバーのバージョンを確認します。 詳細は、「Oracleサーバーおよびクライアントのバージョンに互換性がない」を参照してください。
データ・ストアに接続しようとすると、ORA-12154「TNS: 指定された接続識別子を解決できませんでした」が表示されることがあります。
この問題は、IMDB CacheとOracleを同じマシン上で使用するときに、TNS_ADMIN環境変数がOracleの正しいtnsnames.ora
ファイルを指していない場合に発生することがあります。たとえば、ラップトップでOracle Databaseの複数のインスタンスが稼働している場合に、この問題が発生することがあります。
本番環境では、TimesTenとOracleは、通常、異なるマシン上で稼働させます。この場合、TimesTenが稼働しているマシン上のtnsnames.ora
ファイルを指すようにTNS_ADMIN環境変数を設定しなおさないようにしてください。Oracleクライアントは、接続の解決にTNS_ADMIN設定を使用しますが、TimesTenのメイン・デーモン、キャッシュ・エージェント、Webサーバーおよびレプリケーション・エージェントは、TNS_ADMIN設定を認識しません。 IMDB Cacheは、OracleクライアントとTimesTenが異なるtnsnames.ora
ファイルを使用する場合、正常に動作しません。
Windowsの場合、TNS_ADMIN環境変数は次のように設定します。
「マイ コンピュータ」を右クリックし、「プロパティ」を選択します。
「詳細設定」タブで、「環境変数」を選択します。
使用するtnsnames.ora
ファイルが格納されているディレクトリを指すようにTNS_ADMINをシステム環境変数として追加または編集します。INAMEコマンドを使用して、tnsnames.ora
ファイル内に他のtnsnames.ora
ファイルを組み込むことができます。
ORA-12170やORA-12535などの接続タイムアウト・エラー、またはサーバーのバージョンがサポートされていないことを示すORA-03134を受け取った場合は、使用しているOracleクライアントおよびOracleサーバーのバージョンに互換性があることを確認します。
Metalinkのドキュメント・ノート207303.1「Client/Server/Interoperability Support Between Different Oracle Versions」に、Oracleでサポートされているクライアントとサーバーの組合せを示しています。
TimesTenで使用できるOracleクライアントおよびサーバーの詳細は、『Oracle TimesTen In-Memory Databaseインストレーション・ガイド』のOracle In-Memory Database Cacheに関する説明を参照してください。クライアント/サーバーのバージョンに関する既知の問題については、OracleおよびTimesTenのリリース・ノートも参照してください。
この項では、Oracleユーザー名およびパスワードの使用時に発生する可能性があるいくつかの問題について説明します。
考えられる原因 | 参照先 |
---|---|
ライブラリ環境変数が正しく設定されていない | 「ライブラリ・パス環境変数を確認する」 |
Oracleプロセスが稼働していない | 「TNSリスナーおよびOracleサーバーのステータスを確認する」 |
ユーザーが正しいOracle権限を持っていない | 「Oracle権限を確認する」 |
DSNの構成が正しくない | 「DSN定義を確認する」 |
キャッシュ管理ユーザーのIDまたはパスワードに関する問題 | 「キャッシュ管理ユーザーのIDおよびパスワードを設定する」 |
ユーザー環境とシステム環境の整合性がとれていない | 「ユーザー環境とシステム環境を確認する」 |
動的ライブラリがロードされていない | 「ロードされた動的ライブラリを検証する」 |
使用しているプラットフォームのライブラリ・パス環境変数を確認します。
プラットフォーム | 確認する変数 |
---|---|
UNIX(HP-UXを除く) | LD_LIBRARY_PATH
64-bitプラットフォームでは、LD_LIBRARY_PATH64がLD_LIBRARY_PATHより優先されます。ライブラリ・パスがLD_LIBRARY_PATH64に指定されていることを確認します。 |
HP-UX | SHLIB_PATH |
Windows | PATH |
ライブラリ・パス環境変数には、次の情報が含まれている必要があります。
TimesTenのビットとプラットフォームのビット | 設定値 |
---|---|
32-bitプラットフォーム上の64-bitまたは32-bitのTimesTen | $ORACLE_HOME/LIBおよび$ORACLE_HOME/NETWORK/LIB |
64-bitプラットフォーム上の32-bitのTimesTen | $ORACLE_HOME/LIB32および$ORACLE_HOME/NETWORK/LIB32 |
SQL*Plusを使用してOracle Databaseに接続するか、またはOracle Enterprise Managerを使用してステータスを確認します。
OracleのSQL*Plusコマンド・プロンプトから次のコマンドを入力して、現在自分に付与されているOracle権限を表示します。
SELECT * FROM SESSION_ROLES; SELECT * FROM SESSION_PRIVS;
表示された権限と、様々なIMDB Cache操作で必要な権限(『Oracle In-Memory Database Cacheユーザーズ・ガイド』のOracleユーザーへの権限の付与に関する説明を参照)を比較します。追加の権限が必要な場合は、Oracle管理者に連絡してください。
DSN属性が正しく設定されていることを確認します(『Oracle In-Memory Database Cacheユーザーズ・ガイド』のOracle DatabaseからデータをキャッシュするTimesTenデータベースのDSNに関する説明を参照)。
IMDB CacheのDSN定義がシステムDSNであることを確認します。
IMDB CacheのDSNが1回のみ定義されていることを確認します。
Oracleのユーザー名とパスワードを確認します。 SQL*Plusを使用し、DSN定義で使用しているものと同じOracleIDとOraclePWDを使用してOracleに接続し、それらが正しいことを確認します。
Oracleクライアントをインストールしてから、マシンを再起動していない場合、TimesTenデーモンは、Oracleクライアントをインストールする前の古い環境で稼働しています。 マシンを再起動すると、新しい環境でTimesTenを起動できます。
ttIsql
セッションで、データ・ストアに接続して次のコマンドを入力します。
Command> call ttCacheUidPwdSet('scott','tiger');
エラーが返される場合は、Oracle ID、キャッシュ管理ユーザーIDおよびキャッシュ管理パスワードを確認します。また、Oracleインスタンスが実行されているかどうかも確認します。
問題の原因が、ユーザー環境とシステム環境の相違によるかどうかを確認するテストを行います。この手順では、2つのセッション・ウィンドウ(Windowsのコマンド・プロンプト・ウィンドウまたはUNIXのシェル・ウィンドウ)が必要です。
TimesTenデーモンを停止します。
一方のセッション・ウィンドウで、通常のユーザーとしてTimesTenデーモンを起動します。
Windowsの場合:
% install_dir/srv/ttsrv1121.exe -d -verbose
UNIXの場合:
% install_dir/srv/timestend -d verbose
いくつかのメッセージが一瞬表示され、待機状態になります。
もう1つのセッション・ウィンドウで、キャッシュ・エージェントを再起動してみます。
手順3が成功したら、手順2で1つ目のセッションで起動したTimesTenデーモンを停止します。Windowsの場合は[Ctrl]+[C]、UNIXの場合はkill
コマンドを使用して停止します。
ユーザー環境とシステム環境を比較します。 たとえば、ユーザーとシステムの両方が同じoci.dll
のコピーを参照しているかどうか、ユーザー環境とシステム環境でoci.dll
ライブラリのパス名に違いがないかどうかを確認します。
相違がある場合は、必要な修正を行います。
システムを再起動し、TimesTenデーモンを再起動します。
Visual C++がインストールされているWindowsシステムで実行中の場合は、ロードされた動的ライブラリを検証します。 次に示す検証は、キャッシュ・エージェントを自動リフレッシュなしで起動できる場合にのみ可能です。
TimesTenが起動していることを確認します。
自動リフレッシュなしでキャッシュ・エージェントを起動します。
Command> call ttCacheStart; Command> create cache group cg1 from t1(c1 int not null primary key);
Windowsの「タスク マネージャ」を開き、プロセスttora1121.exe
を検索して選択します。 右クリックして「デバッグ」を選択します。 これでVisual C++が起動され、ロードされたDLLがデバッグ・ウィンドウに表示されます。「Oracleサービス名を解決できない」を参照してください。
キャッシュ・グループをロードして、キャッシュ・エージェントとのキャッシュ接続を強制します。
Command> load cache group cg1 commit every 100 rows;
デバッグ・ウィンドウにロードされたDLLを、次の例4-1に示す部分的なリストと比較します。
例4-1 ロードされたDLLのリスト
この部分的なリストは、Oracleクライアントで作成されています。
Loaded 'E:\TimesTen\tt1121_32\bin\timestenorad1121.exe', no matching symbolic information found. Loaded 'C:\WINDOWS\SYSTEM32\ntdll.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\SYSTEM32\kernel32.dll', no matching symbolic information found. Loaded 'E:\TimesTen\tt1121_32\bin\tten1121.dll', no matching symbolic information found. Loaded 'E:\TimesTen\tt1121_32\bin\ttcommon1121.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\SYSTEM32\wsock32.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\SYSTEM32\ws2_32.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\SYSTEM32\msvcrt.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\SYSTEM32\ws2help.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\SYSTEM32\advapi32.dll', no matching symbolic information found. Loaded 'C:\WINDOWS\SYSTEM32\rpcrt4.dll', no matching symbolic information found. ...
Oracle Databaseへの接続が必要な操作で、エラー5105「OCI initialization failed」が発生することがあります。たとえば、次の状況で発生します。
キャッシュ・エージェントの起動時
キャッシュ管理ユーザーのIDまたはパスワードの設定時
TimesTenでのSQL文の入力時(autocommit=0、PassThrough=3の場合)
エラー5105には、エラーの原因に関する追加情報が含まれています。
OCIでOracleライブラリが見つからない。 「ライブラリ・パス環境変数を確認する」を参照して、エラー・メッセージに示されたライブラリに対する権限を確認してください。
ORACLE_HOMEが無効。 「ORACLE_HOME環境変数を確認する」を参照してください。
キャッシュ・グループを作成しようとすると、次のエラーが表示されることがあります。
5115: Unsupported type mapping for column name
たとえば、Oracleの表tabは、次のように記述できます。
COL1 NUMBER(38) NOT NULL COL2 NUMBER(38)
次のようにしてキャッシュ・グループを作成します。
CREATE CACHE GROUP cg FROM tab(col1 CHAR(10) NOT NULL PRIMARY KEY);
文はNUMBERデータ型の列をCHARデータ型の列へのマップを試みるため、列エラー5119が表示され、キャッシュ・グループは作成されません。
詳細は、『Oracle In-Memory Database Cacheユーザーズ・ガイド』のデータ型マッピングに関する説明を参照してください。
キャッシュ・グループを作成しようとすると、次の警告が表示されることがあります。
Warning 5119: Column name
has different nullability setting in Oracle
たとえば、Oracleの表tab
は、次のように記述できます。
COL1 NUMBER(38) NOT NULL COL2 NUMBER(38)
次のようにしてキャッシュ・グループを作成します。
CREATE CACHE GROUP cg FROM tab(col1 INTEGER NOT NULL PRIMARY KEY, col2 INTEGER NOT NULL);
Oracleのcol2
にはNULL制約がありませんが、キャッシュ・グループのcol2
はNOT NULLとして定義されているため、警告5119が表示されます。
TimesTenにキャッシュされたOracle表へのDDL操作のため、キャッシュ・グループで障害が発生する可能性があります。 たとえば、TimesTenにキャッシュされたOracle表の列をユーザーが削除したとします。 キャッシュ・グループが伝播またはフラッシュされると、TimesTenはOracle表にすでに存在していない列を更新することになります。 キャッシュ・グループがロードまたはリフレッシュされると、TimesTenは削除された列からデータの取得を試行することになります。
次のキャッシュ・グループ操作は失敗する可能性があります。
自動リフレッシュは発生しません。
AWTキャッシュ・グループ操作は、Oracleから伝播またはリフレッシュされることも、Oracleへ伝播またはリフレッシュされることもありません。
キャッシュ・グループのロードまたは伝播は失敗します。
Oracle実表に対してDDL操作が行われたため、キャッシュ・グループ操作が適切に実行されていない可能性がある場合は、DDL追跡を使用して問題を診断します。 DDL追跡では、キャッシュされたすべてのOracle表の変更履歴が保存されます。 SQL文およびその実行日時は、Oracleのキャッシュ管理ユーザー・スキーマ内のTimesTen表にそれぞれ書き込まれます。
DDL追跡オブジェクトを作成する方法およびOracle内の実表に対してDDL追跡を有効にする方法の詳細は、『Oracle In-Memory Database Cacheユーザーズ・ガイド』のキャッシュされたOracle表へのDDL操作の監視に関する説明を参照してください。 DDL追跡の初期化および有効化に使用される組込みプロシージャの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』を参照してください。
キャッシュ・グループ内のオブジェクトを変更した後に変更が後続のSQL文に表示されない場合は、次のいずれかの問題が発生した可能性があります。
そのオブジェクトが、Oracle Databaseから削除されたか、またはなんらかの原因で破損された。
Oracle Databaseが、そのオブジェクトの作成時より前の時点までリストアまたはリカバリされた。
Oracle Databaseが停止した。
キャッシュ・グループの作成後にユーザーがOracleNetServiceName
DSNまたは接続属性を変更したため、OracleNetServiceName
DSNまたは接続属性が、キャッシュ・グループが作成されたOracle Database以外のOracle Databaseを指している。
たとえば、ユーザーがAWTキャッシュ・グループを作成したとします。 その後、このユーザーは表に行を追加しました。 このユーザーが表に対してSELECT * FROM
を実行すると、それらの行が表示されませんでした。 ttmesg.log
エラー・ファイルには、Oracleを使用できないというエラーは表示されていません。 かわりに、次のメッセージが表示されています。
12:09:02.10 Err : REP: 29934: CACHE1:meta.c(904): TT5221: TT5221: Oracle syntax error in OCIStmtExecute(): ORA-00942: table or view does not exist rc = -1 -- file "bdbStmt.c", lineno 1535, procedure "getOraOutTypesNLengths()" 12:09:02.27 Err : REP: 29934: CACHE1:receiver.c(1978): TT5250: Awt Initialization Failure. Could not compile meta data sql. 12:09:02.27 Warn: REP: 29934: CACHE1:transmitter.c(6505): TT16060: Failed to read data from the network. select() timed out
リカバリするには、次の手順を実行します。
キャッシュ・グループへのすべての更新を停止します。
AWTキャッシュ・グループを使用している場合は、キャッシュ・グループをフラッシュします。
削除および作成を行ってキャッシュ・グループを再作成します。
COMMIT EVERY n
ROWSでn
に0(ゼロ)より大きい値を指定した場合に、LOAD CACHE GROUPまたはREFRESH CACHE GROUP文の実行に失敗すると、ターゲット・キャッシュ・グループの内容が一貫性のない状態になることがあります。キャッシュ・インスタンスの一部だけがロードされる場合もあります。
キャッシュ・グループをアンロードしてから再ロードします。キャッシュ・グループを削除して再作成する方が簡単な場合もあります。
この項の内容は次のとおりです。
ttCacheAutorefreshStatsGet
プロシージャでは、指定したキャッシュ・グループで実行された最近10回の自動リフレッシュ操作に関する情報が返されます。
ttCacheAutorefreshStatsGet
プロシージャで情報が返されるのは、キャッシュ・エージェントが実行中で、自動リフレッシュの状態がONまたはPAUSEDになっている場合のみです。キャッシュ・エージェントが再起動されたり、自動リフレッシュの状態がOFFに変更された場合、すべての戻りフィールドは0(ゼロ)に設定されます。
例4-2 ttCacheAutorefreshStatsGetのコール
この例では、testcache
を使用します。testcache
は、1つの表を持ち、増分自動リフレッシュ間隔が10秒のREADONLYキャッシュ・グループです。
Command> call ttcacheautorefreshstatsget('user1','testcache'); < 1164260, 2007-07-23 15:43:52.000000, 850280, 44, 0, 75464, 528255, 75464, 310, 110, 6800, 1890912, 12439795, 1890912, 160020, InProgress > < 1164260, 2007-07-23 15:43:33.000000, 831700, 43, 13550, 108544, 759808, 108544, 1030, 230, 12290, 1815448, 11911540, 1815448, 160020, Complete > < 1164260, 2007-07-23 15:43:12.000000, 810230, 42, 17040, 115712, 809984, 115712, 610, 330, 16090, 1706904, 11151732, 1706904, 146470, Complete > < 1164260, 2007-07-23 15:42:52.000000, 790190, 41, 14300, 94208, 659456, 94208,560, 320, 13410, 1591192, 10341748, 1591192, 129430, Complete > < 1164260, 2007-07-23 15:42:32.000000, 770180, 40, 12080, 99328, 695296, 99328,450, 290, 11340, 1496984, 9682292, 1496984, 115130, Complete > < 1164260, 2007-07-23 15:42:12.000000, 750130, 39, 10380, 86016, 598368, 86016,430, 230, 9720, 1397656, 8986996, 1397656, 103050, Complete > < 1164260, 2007-07-23 15:41:52.000000, 730130, 38, 13530, 112640, 700768, 112640, 530, 220, 12780, 1311640, 8388628, 1311640, 92670, Complete > < 1164260, 2007-07-23 15:41:32.000000, 710120, 37, 9370, 56320, 326810, 56320, 310, 160, 8900, 1199000, 7687860, 1199000, 79140, Complete > < 1164260, 2007-07-23 15:41:22.000000, 700120, 36, 2120, 10240, 50330, 10240, 50, 200, 1870, 1142680, 7361050, 1142680, 69770, Complete > < 1164260, 2007-07-23 15:41:12.000000, 690110, 35, 0, 0, 0, 0, 0, 0, 0, 1132440, 7310720, 1132440, 67650, Complete > 10 rows found.
表4-1に、最初の行の出力の結果を示します。
表4-1 最後の自動リフレッシュ操作でのttCacheAutorefreshStatsGetの結果
結果 | フィールド名 | 説明 |
---|---|---|
1164260 |
|
キャッシュ・グループID。 |
2007-07-23 15:43:52.000000 |
|
この時間隔で自動リフレッシュが開始された時間のタイムスタンプ。 |
850280 |
|
この時間隔で自動リフレッシュ・トランザクションが開始された時点でのキャッシュ・エージェントの経過時間(ミリ秒)。この値は累積され、キャッシュ・エージェント・プロセスが開始されるとリセットされます。 |
44 |
|
自動リフレッシュ番号。 |
0 |
|
この自動リフレッシュ操作にかかった時間(ミリ秒)。操作は現在進行中であるため、値は0(ゼロ)です。 |
75464 |
|
この自動リフレッシュ操作で自動リフレッシュされた行数。キャッシュ・グループに子表が存在する場合、ルート表および子表のすべての行が含まれます。 注意: 完全自動リフレッシュの場合、この情報は返されません。 |
528255 |
|
この自動リフレッシュ操作でOracleから転送されたバイト数。 注意: 完全自動リフレッシュの場合、この情報は返されません。 |
75464 |
|
この自動リフレッシュ操作で自動リフレッシュされたルート表の行数。 |
310 |
|
Oracleで自動リフレッシュ問合せの実行にかかった時間(ミリ秒)。 注意: 完全自動リフレッシュの場合、この情報は返されません。 |
110 |
|
自動リフレッシュ問合せでOracleからの行フェッチにかかった時間(ミリ秒)。 注意: 完全自動リフレッシュの場合、この情報は返されません。 |
6800 |
|
TimesTenで、更新された行をキャッシュ・グループに適用するのにかかった時間(ミリ秒)。 注意: 完全自動リフレッシュの場合、この情報は返されません。 |
1890912 |
|
キャッシュ・エージェントの起動後に自動リフレッシュされた行の総数。 注意: 完全自動リフレッシュの場合、この情報は返されません。 |
12439795 |
|
キャッシュ・エージェントの起動後にOracleから転送された総バイト数。 注意: 完全自動リフレッシュの場合、この情報は返されません。 |
1890912 |
|
キャッシュ・エージェントの起動後に自動リフレッシュされたルート表の行の総数。 |
160020 |
|
キャッシュ・エージェントの起動後の自動リフレッシュの総経過時間(ミリ秒)。 |
InProgress |
|
ステータス。 CompleteまたはFailedとなる場合もあります。 |
この例では子表がないため、自動リフレッシュされた行の総数(1890912)は、自動リフレッシュされたルート表の行の総数と同じになります。
Oracleで更新される行数が、TimesTenで自動リフレッシュされる行数に反映されるとはかぎりません。Oracleの更新がTimesTenで複数回適用されたり、Oracleの同じ行への複数の更新がTimesTenでは1回の更新として適用される場合もあります。
TimesTenには、Oracle Databaseに存在する変更ログ表から、自動リフレッシュ・キャッシュ・グループの情報を収集するSQLスクリプトが用意されています。 変更ログ表の詳細は、『Oracle In-Memory Database Cacheユーザーズ・ガイド』のキャッシュ・グループの管理に使用されるOracleオブジェクトに関する説明を参照してください。
スクリプトでは、キャッシュされた各表について次の情報が表示されます。
**************************** * Host name: my-pc * Timesten datastore name: c:\data\tt1121 * Cache table name: USER1.TESTCACHE * Change log table name: tt_03_55555_L * number of rows in change log table: 100000 * Maximum logseq on the change log table: 38 * Timesten has autorefreshed updates up to logseq: 38 * Number of updates waiting to be autorefreshed: 0 * Number of updates that has not been marked with a valid logseq: 0 ****************************
ログ順序番号(logseq
)は、自動リフレッシュ操作のマーカーとして機能します。
SQL*Plusを使用して、Oracle Databaseでキャッシュ管理ユーザーとしてスクリプトを実行します。別のユーザーとしてスクリプトを実行すると、変更ログ表が存在しないことがレポートされます。
install_dir
/oraclescripts/cacheInfo.sql
サポート・ログには、自動リフレッシュの処理状況を示すメッセージが含まれます。たとえば、自動リフレッシュ間隔が10秒(10,000ミリ秒)に設定されたREADONLYキャッシュ・グループtestcache
があるとします。
自動リフレッシュが開始されると、サポート・ログには次のように表示されます。
15:43:33.96 Info: ORA: 5264: ora-5264-5676-refresh03918: Starting autorefresh number 43 for interval 10000ms
メッセージに含まれる情報は次のとおりです。
タイムスタンプ(15:43:33.96
)
キャッシュ・エージェント・プロセスID(5264
)
スレッドID(5676
)
自動リフレッシュ番号は特定の時間隔に対してのみ一意であるため、スレッドIDは重要です。特定の自動リフレッシュ操作を追跡する際は、スレッドIDと自動リフレッシュ番号の両方を確認するようにしてください。
サポート・ログには、ttCacheAutorefreshStatsGet
プロシージャに似た情報をレポートする長いメッセージも含まれます。この自動リフレッシュ間隔では、108544行が更新され、キャッシュ・エージェントの起動後に1815448行が更新されています。このメッセージでは、キャッシュ・グループの表が1つのみであるため、行の総数とルート表の行の総数が同じであることに注意してください。 Number
は自動リフレッシュ番号です。すべての時間はミリ秒単位で表されます。
15:43:51.81 Info: ORA: 5264: ora-5264-5676-refresh04387: Cache agent refreshed cache group USER1.TESTCACHE: Number - 43, Duration - 13550, NumRows - 108544, NumRootTblRows - 108544, NumOracleBytes - 759808, queryExecDuration - 230, queryFetchDuration - 1030, ttApplyDuration - 12290, totalNumRows - 1815448, totalNumRootTblRows - 1815448, totalNumOracleBytes - 11911540, totalDuration - 160020
追加メッセージに、自動リフレッシュ操作が正常に完了したことが示されます。
15:43:51.81 Info: ORA: 5264: ora-5264-5676-refresh04449: Autorefresh number 43 finished for interval 10000ms successfully 15:43:51.81 Info: ORA: 5264: ora-5264-5676-fresher01619: Autorefresh number 43 succeeded for interval 10000 milliseconds
タイムスタンプを調べ、自動リフレッシュが予想どおり処理されているかどうかを確認します。
サポート・ログの場所の設定方法については、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のTimesTenデーモン・オプションの管理に関する説明を参照してください。
ttCacheAutorefreshStatsGet
で自動リフレッシュ操作のステータスがFailedと表示された場合は、ttCacheAutorefreshStatsGet
の出力に表示された番号の自動リフレッシュ操作に関連するメッセージをサポート・ログで確認します。自動リフレッシュ操作の開始後に発生したエラーがないかどうかを探します。
例4-3 ttCacheAutorefreshStatsGet出力に自動リフレッシュの失敗が示されている場合
ttCacheAutorefreshStatsGet
の出力の次の行が、失敗した自動リフレッシュ操作を示しています。
< 1164260, 2007-08-01 14:56:36.000000, 959350, 9, 0, 0, 0, 0, 0, 0, 0, 1, 7, 1, 50, Failed >
自動リフレッシュ番号は9です。
サポート・ログに、自動リフレッシュ番号9の開始メッセージが表示されています。
14:56:36.10 Info: ORA: 5988: ora-5988-4724-refresh03926: Starting autorefresh number 9 for interval 15000ms
自動リフレッシュ番号9のスレッドIDは4724です。このスレッドIDを持つエラー・メッセージを検索します。
サポート・ログに次のメッセージが表示されています。
14:56:36.10 Info: ORA: 5988: ora-5988-4724-refresh03953: Autorefresh thread for interval 15000ms is connected to instance inst1 on host host1. Server handle 231976252 14:56:36.12 Err : ORA: 5988: ora-5988-4724-refresh07567: TimesTen error code:5901, msg The Oracle refresh log table, "USER2"."TT_03_81799_L", for base table, USER2.READTAB2, cannot be found. 14:56:36.12 Info: ORA: 5988: ora-5988-4724-refresh05559: Autorefresh rolled back. 14:56:36.12 Info: ORA: 5988: ora-5988-4724-refresh04458: Autorefresh number 9 finished for interval 15000ms with error. 14:56:36.12 Err : ORA: 5988: ora-5988-4724-fresher01606: Autorefresh number 9 failed for cache groups with interval 15000 ms after 10 retries.
スレッドID 4724のエラー・メッセージは、変更ログ表TT_03_81799_Lが欠落していることを示しています。 この状況での対処方法については、「自動リフレッシュ時に指定した間隔でキャッシュがリフレッシュされない」の表を参照してください。
ttTraceMon
ユーティリティを使用すると、自動リフレッシュのパフォーマンス問題を診断できます。 詳細は、「AUTOREFRESHトレース」を参照してください。
トレースの出力をファイルに行うと、TimesTenのトレース処理は、アプリケーションのパフォーマンスに大きく影響し、大量のディスク領域を消費します。診断が終了したら、トレースをデフォルト値にリセットしてください。
SNMPトラップを有効にして、自動リフレッシュの問題が発生した場合にアラートが表示されるようにします。自動リフレッシュに関連するSNMPトラップは次のとおりです。
ttCacheAutoRefQueFullTrap
ttCacheIncAutoRefFailedTrap
ttCacheValidationErrorTrap
ttCacheValidationWarnTrap
ttCacheValidationAbortedTrap
詳細は、『Oracle TimesTen In-Memory Databaseエラー・メッセージおよびSNMPトラップ』のSNMPトラップによる診断に関する説明を参照してください。
自動リフレッシュの問題について、考えられる原因を次の表に示します。
考えられる原因 | 対処 |
---|---|
キャッシュ・エージェントがキャッシュ管理ユーザーによって起動されていない | キャッシュ・エージェントの起動時に、キャッシュ管理ユーザーのIDおよびパスワードを指定する(『Oracle In-Memory Database Cacheユーザーズ・ガイド』のキャッシュ・エージェントの起動に関する説明を参照)。 |
実表のオブジェクトIDが変更された | 「自動リフレッシュOracleオブジェクトをリカバリしてリセットする」を参照。 |
自動リフレッシュ・トリガーが有効でない | 「自動リフレッシュOracleオブジェクトをリカバリしてリセットする」を参照。 |
TT_version _USER_COUNT表に記録されている現在のログ順序番号が、自動リフレッシュ・ログ表の最大ログ順序番号より小さい。 |
「自動リフレッシュOracleオブジェクトをリカバリしてリセットする」を参照。 |
TT_version _USER_COUNT表に、すべてのアクティブな増分自動リフレッシュ表に対してusercount > 0である行はない。 |
「自動リフレッシュOracleオブジェクトをリカバリしてリセットする」を参照。 |
変更ログ表が空である | 「自動リフレッシュOracleオブジェクトをリカバリしてリセットする」を参照。 |
ユーザー・カウントが0(ゼロ)未満か、またはTT_version _USER_ログ順序が異常である |
「自動リフレッシュOracleオブジェクトをリカバリしてリセットする」を参照。 |
キャッシュされた表に関連付けられている自動リフレッシュ・ログ表、トリガーまたは順序が存在しないか、有効でないキャッシュ・エージェントが、正しいキャッシュ管理ユーザーIDで起動されたかどうかを確認する。 | キャッシュ・エージェントが、正しいキャッシュ管理ユーザーIDで起動されたかどうかを確認する。キャッシュ管理ユーザーIDが正しい場合は、「自動リフレッシュOracleオブジェクトをリカバリしてリセットする」の手順に従う。
ユーザー・エラー・ログで、致命的な異常についてのメッセージを確認する。これには、Oracleオブジェクトの破損または欠落が示されている。 |
TT_version _USER_COUNT表がない |
キャッシュ・エージェントが、正しいキャッシュ管理ユーザーIDで起動されたかどうかを確認する。キャッシュ管理ユーザーIDが正しい場合は、「自動リフレッシュOracleオブジェクトをリカバリしてリセットする」の手順に従う。
ユーザー・エラー・ログで、致命的な異常についてのメッセージを確認する。これには、Oracleオブジェクトの破損または欠落が示されている。 |
TT_version _USER_COUNT表に記録されている現在のログ順序番号が変化する場合は、ブックマークと異なり、関連付けられているキャッシュ表が次にコミットされる自動リフレッシュでリフレッシュされない。 |
キャッシュ・エージェントを再起動する。 これによって解決しない場合は、「自動リフレッシュOracleオブジェクトをリカバリしてリセットする」の手順に従う。 |
リソースの問題 | キャッシュ・エージェントを再起動する。 |
増分自動リフレッシュは、Oracle実表でTRUNCATE文が使用されている場合は、正しく動作しません。 Oracle実表でTRUNCATE文が使用されている場合は、ALTER CACHE GROUP文を使用して自動リフレッシュをリセットし、自動リフレッシュの状態をOFFに設定してから、別のALTER CACHE GROUP文で自動リフレッシュの状態をONに戻します。
問題の原因が、自動リフレッシュで使用するOracleオブジェクトにある場合、またはその可能性がある場合は、次の手順でOracleオブジェクトを再作成します。
問題のキャッシュ表があるすべてのデータ・ストア上のすべてのキャッシュ・グループについて、ALTER CACHE GROUPを使用して自動リフレッシュの状態をOFFにリセットします。
ALTER CACHE GROUP cache_group_name SET AUTOREFRESH STATE OFF;
対象となるすべてのデータ・ストア上のすべてのキャッシュ・エージェントを停止します。
キャッシュ・グループ内の各表について、ユーザー・カウントが0(ゼロ)かどうかを確認します。
Oracle Databaseで、次の文を実行します。
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を使用して自動リフレッシュの状態をONに戻します。
ALTER CACHE GROUP cache_group_name SET AUTOREFRESH STATE ON;
他のすべてのキャッシュ・エージェントを起動します。
すべてのデータ・ストアの対象となるすべてのキャッシュ・グループについて、ALTER CACHE GROUPを使用して自動リフレッシュの状態をONに戻します。
増分自動リフレッシュが進行していない場合は、次のことを確認します。
自動リフレッシュの状態がONになっているかどうか
キャッシュ・エージェントが稼働しているかどうか
サポート・ログで、次の表に記載されている状態を調べます。
最初のヘッダー・セルに表の概要が示されています。
状態 | 対処 |
---|---|
Oracleサーバーの接続エラーまたは警告 | 接続の問題の解決の詳細は、「クライアント/サーバーの問題のトラブルシューティング」を参照。 |
TimesTenでのロック・タイムアウト・エラーまたは警告 | このことは、通常、キャッシュ・グループに対するオープンなDDLトランザクションが原因で発生する。自動リフレッシュが必要なロックを取得できるようにDDLトランザクションをコミットする。 |
TimesTenでの不十分な永続データ・パーティション・エラー | PermSizeの値を大きくする。 |
自動リフレッシュOracleオブジェクトの検証エラーまたは警告 | 「自動リフレッシュOracleオブジェクトをリカバリしてリセットする」を参照。 |
キャッシュ・エージェントが予期せず終了する | テクニカル・サポートに連絡する。 |
メイン・デーモン・ディレクトリ内にコア・ファイルがある | テクニカル・サポートに連絡する。 |
増分自動リフレッシュが完全リフレッシュになることに関する警告 | 「増分自動リフレッシュが完全自動リフレッシュになる」を参照。 |
自動リフレッシュが長時間経っても完了しないことを示す警告 | 前回の自動リフレッシュ以降に数多くのトランザクションが発生した場合は、自動リフレッシュ・トランザクションに長時間かかることがある。
注意: 同じ自動リフレッシュ間隔を持つキャッシュ・グループは、1つのトランザクションで自動リフレッシュされる。 |
キャッシュ・エージェントは、自動リフレッシュが進行できるように、Oracleオブジェクトが存在するかどうか、およびOracleオブジェクトが有効かどうかを自動的に検証します。通常の操作では、ユーザー・エラー・ログにオブジェクトの検証エラーまたは警告が含まれることはありません。 次のいずれかの状態が発生した場合を除いて、オブジェクトの検証エラーが見つかったときは、テクニカル・サポートに連絡してください。
DROP CACHE GROUP文を使用せずに、TimesTenデータ・ストアを破棄した。
カスタマ・アプリケーションによって、直接Oracle Databaseにあるオブジェクトが不注意に変更された。
Oracle Databaseの実表に対してDDL操作を行う。これにより、自動リフレッシュ操作を制御するトリガーが無効になる。
上記のいずれかの状態が発生した場合は、キャッシュ・グループを再作成する必要があります。
キャッシュ管理ユーザーの表領域が一杯になると、増分自動リフレッシュが完全自動リフレッシュになる場合があります。
この項の内容は次のとおりです。
増分自動リフレッシュが完全自動リフレッシュになっていないかどうかは、いくつかの方法で検出できます。
サポート・ログで、完全自動リフレッシュ操作が行われていることを示すメッセージを確認します。 たとえば、次のようなメッセージです。
2007-08-08 08:06:51.35 Warn: ORA: 22119: ora-22119-0015-refresh05652: A full autorefresh will be performed for Incremental autorefresh table USER1.READTAB because change log table T_03_55555_L on Oracle has been truncated.
ttCacheAutorefreshStatsGet
プロシージャを使用します。
自動リフレッシュが通常より長い時間InProgressの状態である場合、完全自動リフレッシュが行われている可能性があります。
自動リフレッシュされた行数(autoRefNumRows
)が通常よりはるかに多い場合、完全自動リフレッシュが行われた可能性があります。
サポート・ログで、完全自動リフレッシュについてのメッセージを確認してください。
SNMPトラップが有効になっている場合、SNMPトラップttCacheRecoveryAutorefreshTrap
によって完全自動リフレッシュが通知されます。
キャッシュ管理ユーザー用に個別の表領域を作成することを強くお薦めします。 この表領域は、キャッシュ管理ユーザーのデフォルトの表領域として使用されます。表領域には、各Oracle表の自動リフレッシュ・トリガー、各Oracle表の変更ログ表、およびTimesTenが各キャッシュ管理ユーザーに対して必要とするその他のオブジェクトが含まれます。個別の表領域を指定しない場合、これらのオブジェクトはOracleのシステム表領域に配置されます。
Oracleでのキャッシュ管理ユーザー作成時に表領域を指定します。また、OracleのALTER USER文のDEFAULT TABLESPACE句を使用してユーザーを作成した後も表領域を指定できます。
キャッシュされた各Oracle表の変更ログ表は、キャッシュ管理ユーザーの表領域に存在します。Oracle表の各更新では、1行(1つの変更ログ・レコード)がそのOracle表の変更ログ表に挿入されます。 変更ログ・レコードのサイズ(バイト)は次のようになります。
size of change log record = size of primary key on Oracle table + 250
変更ログ表のレコード数は、Oracle表での更新率、およびTimesTenでの自動リフレッシュ間隔によって異なります。関連付けられているOracle表をキャッシュしているすべてのデータ・ストアに適用済の変更ログ・レコードは、20秒ごとにTimesTenによって削除されます。
変更ログが削除されると、次のようなメッセージがサポート・ログに表示されます。
16:32:26.73 Info: ORA: 5652: ora-5652-4756-ogTblGC01036: Garbage collector deleted 1 rows from TT_03_383270_L where logseq < 1
キャッシュ管理ユーザーの表領域が一杯になった場合に発生する状況を管理するオプションがあります。 詳細は、「キャッシュ管理ユーザー表領域が一杯になった場合の考慮事項」を参照してください。
キャッシュ管理ユーザーの表領域が一杯になった場合は、次の状態を確認します。
自動リフレッシュの状態がPAUSEDに設定されていないかどうか。状態がPAUSEDの場合、変更ログ・レコードは蓄積されます。
作成したキャッシュ・グループをロードしているかどうか。キャッシュ・グループ作成のデフォルトの自動リフレッシュの状態はPAUSEDです。
キャッシュ・グループを作成中かどうか、またはデータ・ストアを複製中かどうか。これらの両方の処理は、変更ログ表のクリーンアップ処理を一時的に停止します。
TimesTenデータ・ストア上のすべてのキャッシュ・エージェントが稼働中かどうか。キャッシュ・エージェントが稼働していない場合、変更ログ・レコードは蓄積されます。
データ・ストア内の自動リフレッシュ・キャッシュ・グループを削除せずにデータ・ストアを破棄していないかどうか。このようなデータ・ストアは、次のような場合に発生します。
ttDestroy
-force
でデータ・ストアを破棄した場合。
Overwrite
接続属性を1に設定したデータ・ストアにアプリケーションで接続したが、古いデータ・ストアに存在していたキャッシュ・グループが再作成されない場合。
データ・ストアがまだ存在している場合は、破棄されたデータ・ストアに接続してキャッシュ・グループを削除してください。
cacheInfo.sql
スクリプトを使用して、キャッシュされたOracle表ごとに変更ログ表の大きさを確認します。出力を調べて、データ・ストアがまだ使用中かどうかを確認します。 詳細は、「変更ログ表の情報の表示」を参照してください。
データ・ストアがまだ使用中である場合は、キャッシュ・エージェントが稼働していることを確認します。
TimesTenでの自動リフレッシュの処理状況を、変更ログ表の最大ログ順序番号と比較します。 TimesTenの方が遅れている場合は、ttCacheAutorefreshStatsGet
プロシージャをコールして、自動リフレッシュ操作が正常に行われているかどうかを確認します。 詳細は、「ttCacheAutorefreshStatsGetプロシージャの使用」を参照してください。
ステータスが通常より長い時間InProgressであるように思われる場合は、「自動リフレッシュのパフォーマンスが悪い」を参照してください。
場合によっては、自動リフレッシュ間隔を減らすか、キャッシュ管理ユーザーの表領域のサイズを大きくする必要があります。
キャッシュ管理ユーザーの表領域が一杯になった場合に発生する状況を管理するオプションがあります。 詳細は、「キャッシュ管理ユーザー表領域が一杯になった場合の考慮事項」を参照してください。
キャッシュ管理ユーザーの表領域を監視するには、Oracle Enterprise Managerアラートを使用するか、またはTimesTen表領域しきい値パラメータを設定します。
キャッシュ・エージェントは、表領域の使用量を定期的に監視し、使用量が指定したしきい値を超えたときに警告を発行するように構成できます。 ttCacheConfig
組込みプロシージャのTblspaceThreshold
パラメータを使用して表領域のしきい値の割合を設定します。 たとえば、TblspaceThreshold
を80に設定した場合、表領域の使用量が80%を超えると警告が発行されます。
しきい値が0(ゼロ)に設定されている場合、警告は発行されません。 これがデフォルトです。
しきい値が1から99の間に設定されている場合、表領域のしきい値がその数値を超えると警告が発行されます。
しきい値が100に設定されている場合、表領域が一杯になると警告が発行されます。
たとえば、表領域の使用量が80%を超えると発行されるように警告を構成するには、次の操作を実行します。
call ttCacheConfig('TblspaceThreshold',,,'80');
ttCacheConfig
組込みプロシージャの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』を参照してください。
TimesTenデータベースにキャッシュされたOracle表を使用する場合は、増分自動リフレッシュを使用するようにOracle表を構成できます。 これらの表では、キャッシュ管理ユーザーの表領域が一杯になった場合に発生する状況を次のいずれかに指定できます。
DMLを実行したアプリケーションが失敗する。 これがデフォルトです。
表領域の完全リカバリがNoneに設定される。 アプリケーションは、表領域が一杯になるとOracleから「Out of Tablespace」エラーを受信します。 その時点で、アプリケーションは、トランザクションをロールバックする必要があります。
ttCacheConfig
組込みプロシージャでParam
パラメータをTblSpaceFullRecovery
、Value
パラメータをNone
に設定すると、表領域の完全リカバリがNoneに設定されます。 たとえば、次の例では、terry
が所有するemployees
表のParam
をTblSpaceFullRecovery
、Value
をNone
に設定します。
call ttCacheConfig('TblSpaceFullRecovery','terry', 'employees','None');
変更ログ表を切り捨てて領域を解放すると、完全自動リフレッシュが実行されます。
キャッシュ管理ユーザーの表領域が一杯になっても、自動リフレッシュによってキャッシュされたOracle表でDML文を実行しているすべてのアプリケーションが続行されます。 トリガーが実行され、既存の変更ログ・レコードを削除して、新しい変更ログ・レコード用に領域を開放します。 これによって、増分自動リフレッシュ・モードが構成されたキャッシュ・グループに対して完全自動リフレッシュを実行できます。 ただし、オラクル表が増分自動リフレッシュ用に構成されていない場合、トリガーは実行されません。
アプリケーションを続行し、アプリケーションで自動リフレッシュを実行できるようにする操作を設定するには、ttCacheConfig
プロシージャでParam
パラメータをTblSpaceFullRecovery
、Value
パラメータをReload
に設定します。 ユーザーには、自動リフレッシュが完了するまで失効データが表示されます。
ただし、ユーザーが値Reload
を指定してキャッシュ構成パラメータTblSpaceFullRecovery
を設定しても、索引が増大している場合はその索引を処理するための十分な空きを表領域に用意できないことがあります。 変更ログ表から行を削除することでは、変更ログ表の索引用に十分な領域が開放されない場合があります。 索引の増大が急激なため、表領域全体が索引に使用され、変更ログ表をパージしても効果がない状況になると、ユーザーのアプリケーションは次のエラーを受信する可能性があります。
ORA-01654: unable to extend index <index> by 128 in tablespace <tblspace>
ttCacheConfig
組込みプロシージャの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』を参照してください。
自動リフレッシュのパフォーマンスの悪化は、通常、大規模な自動リフレッシュ操作が原因です。 ttCacheAutorefreshStatsGet
プロシージャを使用して、自動リフレッシュの経過時間を調べ、ステータスが長時間InProgressのままになっていないかどうかを確認します。
大規模な自動リフレッシュ操作が行われる可能性のある要因は、次のとおりです。
レスポンスがないTimesTenデータベースまたは停止したTimesTenデータベースによる自動リフレッシュのパフォーマンスの低下
自動リフレッシュ間隔が大きい
同じ時間隔で処理されるキャッシュ・グループの数が多い
Oracle表に対する変更の頻度が高い
キャッシュ・グループに含まれる子表の世代の数
キャッシュされたOracle表の行数
キャッシュされたOracle表の行のサイズ
AUTOREFRESHトレースを有効にして、自動リフレッシュのパフォーマンス問題を診断します。 詳細は、「AUTOREFRESHトレース」を参照してください。
注意: TimesTenキャッシュ・グループの自動リカバリは、AUTOREFRESHキャッシュ・グループ属性を使用する読取り専用キャッシュ・グループおよびユーザー管理キャッシュ・グループにのみ適用されます。 この項で対象としている自動リフレッシュ・キャッシュ・グループはすべて、AUTOREFRESHキャッシュ・グループ属性を使用する読取り専用キャッシュ・グループおよびユーザー管理キャッシュ・グループを指しています。 |
自動リフレッシュ・キャッシュ・グループを含んでいるすべてのTimesTenデータベースが破棄されているか、または使用されていない場合でも、TimesTenはキャッシュ・エージェントが実行されていないTimesTenデータベースに対して、Oracle表への自動リフレッシュによる変更の追跡を続行します。 これによって、アクティブなTimesTenのデータベース内のキャッシュ・グループへの自動リフレッシュが遅くなります。
キャッシュ・エージェントは、データベースからのレスポンスがない状態かどうか、またはデータベースが使用されていない状態かどうかの検出を行います。 停止したTimesTenデータベースのリカバリを行うかどうか、および行う場合の方法を指定できます。 ただし、すべてのOracleオブジェクトが削除されている場合、TimesTenデータベースをリカバリすることはできません。
次の項では、アクティブでないTimesTenデータベースで自動リフレッシュのパフォーマンスが低下しないようにする方法について説明します。
特定のタイムアウト期間内にキャッシュ・エージェントがOracleサーバーと通信しなかった場合に、停止中および更新を受け入れないというマークをデータベースに付けるようにTimesTenに指示できます。
ttCacheConfig
組込みプロシージャのAgentTimeOut
パラメータを使用して、TimesTenデータベースのタイムアウトおよび各自動リフレッシュ・キャッシュ・グループのリカバリ方法を設定します。 タイムアウト値は、同じキャッシュ管理ユーザーを使用するすべてのTimesTenデータベースに適用されます。 タイムアウト値は、最初の接続時にTimesTenデータベースをメモリーにロードしてキャッシュ・エージェントを開始するためにかかる時間より長く設定する必要があります。 そうしないと、TimesTenデータベースは誤って停止中とマークされます。 TimesTenインスタンスのすべての計画メンテナンスで、AgentTimeOut
の値を一時的に0(ゼロ)に設定して、タイムアウトを無効にすることができます。 ttCacheConfig
組込みプロシージャの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』を参照してください。
たとえば、次の例では、TimesTenデータベースのタイムアウト値を6000秒(100分)に設定します。 キャッシュ・エージェントがOracleサーバーに100分以内に接続しなかった場合、TimesTenデータベースは停止中とマークされます。
ttIsql> call ttCacheConfig('AgentTimeOut',,,'6000');
TimesTenデータベースおよび自動リフレッシュ・キャッシュ・グループがOracle Databaseと同期化されていない場合は、TimesTenデータベースおよび自動リフレッシュ・キャッシュ・グループをリカバリすることができます。 同期が存在しない場合、Oracle表の更新は、対応するTimesTenキャッシュ表に自動的にはリフレッシュされません。
ttCacheConfig
組込みプロシージャのDeadDbRecovery
パラメータを構成して、TimesTenデータベースおよびすべての自動リフレッシュ・キャッシュ・グループの同期のリカバリ方法を指定することができます。 DeadDbRecovery
の設定は、同じキャッシュ管理ユーザーを使用するすべてのTimesTenデータベースに適用されます。 TimesTenでデータベースおよびすべての自動リフレッシュ・キャッシュ・グループをリカバリする方法を指定するには、DeadDbRecovery
パラメータをNormal
、Manual
またはNone
に設定します。 DeadDbRecovery
の設定は、同じキャッシュ管理ユーザーを使用するすべてのTimesTenデータベースに適用されます。 TimesTenでデータベースおよびその自動リフレッシュ・キャッシュ・グループのリカバリが行われている間、TimesTenデータベースおよび自動リフレッシュ・キャッシュ・グループのリカバリ・ステータスを示す、これらの各エンティティの自動リフレッシュのステータスが表示されます。 TimesTenデータベースの自動リフレッシュのステータスは、Alive、DeadまたはRecoveringになります。 自動リフレッシュ・キャッシュ・グループの自動リフレッシュのステータスは、OK、DeadまたはRecoveringになります。 TimesTenデータベースのステータスの変更は、自動リフレッシュ・キャッシュ・グループのステータスの変更に次のようにリンクされています。
リカバリ方法がNormalに設定されている場合にTimesTenが自動リフレッシュ・キャッシュ・グループに対して完全自動リフレッシュを開始すると、キャッシュ・グループのステータスはRecoveringに設定され、データベースのステータスもRecoveringに設定されます。
すべての自動リフレッシュ・キャッシュ・グループがOKにリカバリされた場合または削除された場合にのみ、TimesTenデータベースのステータスはAliveに設定されます。
データベースのステータスがDeadに設定されると、すべての自動リフレッシュ・キャッシュ・グループもDeadに設定されます。
注意: ttCacheDbCgStatus 組込みプロシージャ(『Oracle TimesTen In-Memory Databaseリファレンス』を参照)を使用して、TimesTenデータベースおよび自動リフレッシュ・キャッシュ・グループの自動リフレッシュのステータスを確認できます。 |
キャッシュ・エージェントとOracleサーバー間の接続が再度確立されるときに、TimesTenは、自動リフレッシュ・キャッシュ・グループのリカバリ方法を決定します。 TimesTenは、ttCacheConfig
組込みプロシージャのDeadDbRecovery
パラメータに構成されたリカバリ方法に従います。 このパラメータは、次のいずれかに設定できます。
Normal
: これがデフォルトです。 自動キャッシュ・グループは、それぞれ完全自動リフレッシュでリカバリされます。 最初の完全リフレッシュの後、キャッシュ・グループはリカバリされ、増分自動リフレッシュが実行されます。
自動リフレッシュ間隔が同じ自動リフレッシュ・キャッシュ・グループではトランザクションの一貫性が保証されます。 完全リフレッシュのため、増分リフレッシュほどパフォーマンスはよくありません。
自動リフレッシュを実行すると、ステータスはRecoveringに設定されます。 完全自動リフレッシュが正常に完了すると、自動リフレッシュ・キャッシュ・グループのステータスはOKに設定されます。
Manual
: 自動リフレッシュ・キャッシュ・グループを手動でリフレッシュしてリカバリするか、またはキャッシュ・グループが動的な場合はアンロードする必要があります。
None
: 自動リフレッシュ・キャッシュ・グループは、TimesTen自動リフレッシュによってリカバリされることはありません。 キャッシュ・グループをリカバリするには、キャッシュ・グループを削除して再作成します。
データベースのステータスは、最初の自動リフレッシュ・キャッシュ・グループのステータスが変更されると変更されます。 リカバリ処理中の1つ以上のキャッシュ・グループが存在する場合、データベースのステータスはRecoveringに設定されます。 すべてのキャッシュ・グループのリカバリが完了すると、TimesTenデータベースのステータスはAliveとマークされます。
次の例では、すべての自動リフレッシュ・キャッシュ・グループに対してDeadDbRecovery
パラメータをNormal
に設定します。 完全自動リフレッシュでTimesTenデータベースのすべての自動リフレッシュ・キャッシュ・グループがそれぞれリカバリされたら、停止したTimesTenデータベースがリカバリされます。
ttIsql> call ttCacheConfig('DeadDbRecovery',,,'Normal');
アクティブ・スタンドバイ・ペア・レプリケーション・スキームに関連するTimesTenデータベースにキャッシュ・グループが含まれている場合に、アクティブ・マスター・データベースの自動リフレッシュのステータスがDeadで、スタンドバイ・マスター・データベースの自動リフレッシュのステータスがAliveであると、スタンドバイ・マスターは自動的にはアクティブ・マスターの役割を果たしません。 リカバリでは、キャッシュ・エージェントおよびレプリケーション・エージェントが実行されていることを手動で確認する必要があります。 各状況の詳細は次のとおりです。
表4-2 アクティブ・スタンドバイ・レプリケーション・ペアに関連するキャッシュ・グループのリカバリ
DeadDbRecoveryの設定 | アクティブ・マスター | スタンドバイ・マスター | 実行される動作 |
---|---|---|---|
Normal |
Alive |
Dead |
キャッシュ・エージェントおよびレプリケーション・エージェントがスタンドバイ・マスターで実行されていることを確認します。 キャッシュ・エージェントがOracle Databaseに接続できた時点で、すべての自動リフレッシュ・キャッシュ・グループのステータスがRecoveringに設定されます。 これによって、データベースがRecoveringに設定されます。 単一のキャッシュ・グループが自動リフレッシュを再開するための十分なデータを受信した時点で、ステータスはOKに設定されます。 すべてのキャッシュ・グループがOKに設定された後で、データベースがAliveに設定されます。 また、スタンドバイ・マスターを失敗させて、新しいスタンドバイ・マスターをロールアウトすることもできます。 |
Normal |
Dead |
Alive |
キャッシュ・エージェントおよびレプリケーション・エージェントがアクティブ・マスターで実行されていることを確認します。 キャッシュ・エージェントがOracle Databaseに接続できた時点で、すべての自動リフレッシュ・キャッシュ・グループのステータスがRecoveringに設定されます。 これによって、データベースがRecoveringに設定されます。 単一のキャッシュ・グループが自動リフレッシュを再開するための十分なデータを受信した時点で、ステータスはOKに設定されます。 すべてのキャッシュ・グループがOKに設定された後で、データベースがAliveに設定されます。 また、アクティブ・マスターを失敗させて、スタンドバイ・マスターを新しいアクティブ・マスターとして切り替えてから、新しいスタンドバイ・マスターをロールアウトすることもできます。 |
Normal |
Dead |
Dead |
キャッシュ・エージェントおよびレプリケーション・エージェントが両方のマスターで実行されていることを確認します。 キャッシュ・エージェントがOracle Databaseに接続できた時点で、すべての自動リフレッシュ・キャッシュ・グループのステータスがRecoveringに設定されます。 これによって、データベースがRecoveringに設定されます。 単一のキャッシュ・グループが自動リフレッシュを再開するための十分なデータを受信した時点で、ステータスはOKに設定されます。 すべてのキャッシュ・グループがOKに設定された後で、データベースがAliveに設定されます。 また、新しいマスターをロールアウトすることもできます。 |
Manual |
Alive |
Dead |
キャッシュ・エージェントおよびレプリケーション・エージェントがスタンドバイ・マスターで実行されていることを確認します。 キャッシュ・エージェントがOracle Databaseに接続できた時点で、すべての自動リフレッシュ・キャッシュ・グループのステータスがRecoveringに設定されます。 これによって、データベースがRecoveringに設定されます。 単一のキャッシュ・グループが自動リフレッシュを再開するための十分なデータを受信した時点で、ステータスはOKに設定されます。 すべてのキャッシュ・グループがOKに設定された後で、データベースがAliveに設定されます。 また、スタンドバイ・マスターを失敗させて、新しいスタンドバイ・マスターをロールアウトすることもできます。 |
Manual |
Dead |
Alive |
キャッシュ・エージェントおよびレプリケーション・エージェントがアクティブ・マスターで実行されていることを確認します。 手動リフレッシュを使用して、アクティブ・マスターの自動リフレッシュ・キャッシュ・グループをリカバリします。 すべてのキャッシュ・グループがOKに設定されたか、または削除された後で、データベースがAliveに設定されます。 |
Manual |
Dead |
Dead |
キャッシュ・エージェントおよびレプリケーション・エージェントがアクティブ・マスターで実行されていることを確認します。 手動リフレッシュを使用して、アクティブ・マスターの自動リフレッシュ・キャッシュ・グループをリカバリします。 すべてのキャッシュ・グループがOKに設定されたか、または削除された後で、データベースがAliveに設定されます。 その後、スタンドバイ・マスターに変更がレプリケートされます。 |
None |
Alive |
Dead |
スタンドバイ・マスターをFailedとマークします。 スタンドバイ・マスター・データベースに対して |
None |
Dead |
Alive |
|
None |
Dead |
Dead |
新しいマスターをロールアウトします。 |