TECHNOLOGY
Tips !(使用上のテクニック)
対象バージョン : Adaptive Server Anywhere 6.0、7.0
対象OS : Windows95/98/ME ,WindowsNT/2000
ST0104002
SQL Remote のログから異常を判断するためのキーワード
Tips !
【メッセージ ID X-XXXXXXXXXX-X】
「0-0000000000-0」 ログ・オフセットが 0 のメッセージは、リモート環境の再設定を行ったあと、最初のメッセージであることを意味しています。 この周辺で異常を発見できることがあります。
-(ハイフン)で3つに区切られたログIDはそれぞれに以下の内容を表します。
- 〔左〕再送信数: なんらかの理由で再送が発生したとき、1ずつ加算されます。
- 〔中〕ログ・オフセット: このメッセージの1つ前に送信されたメッセージに含まれる最後のコミットのオフセット番号。
- 〔右〕シーケンス番号: 1つのトランザクションが複数のメッセージに分割されたとき、0から順に番号がふられます。
【SQL Remoteのエラー・メッセージ:考えられる原因と可能な解決方法 】
以下は、SQL Remoteの実行中に表示される一般的なエラー/警告メッセージについて説明することを目的としています。ログ・オフセットの値はすべてサンプルであり、特定のログ・オフセットで以下のエラーが起こることを示しているわけではありません。また、以下に示すエラーはすべて統合環境またはリモート環境のいずれかで発生する可能性があります。
- 「すでに適用された操作には適用しません」 – Not applying operations that have already been applied -
このエラーは、sysremoteuserテーブル内のconfirm_receivedの値が、受信されたメッセージのログ・オフセットよりも大きい場合に発生します。この現象は、ユーザが再抽出された後にdbremoteが実行され、メッセージング・システムに古いリモート・ユーザからのメッセージが存在していた場合に起こることがあります。これが問題の原因であれば、メッセージ・システムによって自動的に解決されるため、特に必要な対策はありません。
- 「古い再送信数の操作には適用しません」 – Not applying messages with old send count -aa
このエラーは、sysremoteuserテーブル内のrereceive_countの値が、受信されたメッセージ内の再送信カウントよりも大きい場合に発生します。これは、最終的には正しい場所に送られるロスト・メッセージであると思われますが、再送信要求はすでに発行されています。これが問題の原因であれば、メッセージ・システムによって自動的に解決されるため、特に必要な対策はありません。メッセージ・システムの複数のサイクルが経過しても、この問題が解消しない場合は、何らかの対策を行う必要があります。
- 「これは私宛てのメッセージではありません。」- This message does not belong to me -
このメッセージは、リモート・ユーザからログ・オフセット250,000を確認するメッセージが受信され、log_sentの現在のオフセットが200,000しかない場合に表示されます。Dbremoteは、このメッセージを他のリモートユーザに宛てられたものと想定して拒否します。オフセットがこの値(250,000)であるメッセージはまだ送信されていないため、その確認を受信することはできません。
- 「<Rem1> はこのデータベースのリモート・ユーザではありません。」 – <Rem1> is not a remote user of this database -
このエラーは、レプリケート・データベースがリモート・ユーザからメッセージを受信し、そのユーザIDに対応するエントリが受信側データベースのsysremoteuserテーブル内に存在しない場合に発生します。
- 「<Rem1> からのメッセージは見つかりません。」 – Missing message from <Rem1 > -
このエラーは例を挙げて説明します。リモート・ユーザrem1に関して、sysremoteuserテーブル内のlog_receivedの値が200,000であると仮定します。この値に基づいて、このエラーが発生する原因が2つ考えられます。
- rem1の受信ボックスに、開始ログ・オフセットが200,000よりも大きいメッセージは存在するが、オフセット200,000で始まるメッセージは存在しない場合。
- 適切な開始オフセットを持つメッセージは存在するが、マルチパート・メッセージの一部が失われている場合。
- 「リモート・ユーザが定義されていません」 – No remote users defined -
どちらの場合も、dbremoteは再送信カウントを1つ増やして、リモート・ユーザにデータを再送信するよう要求します。
このエラーは、レプリケート・データベースのリモート・ユーザが定義されていない場合に発生します。sysremoteuserテーブルを調べて、データベースのリモート・ユーザが最低1人は定義されているかどうか確認します
- 「トランザクション・ログが見つかりません」- Missing transaction log -
このエラーの原因はいくつか考えられます。1つは、コマンドラインでdbremoteを指定するときに、名前が変更されたトランザクション・ログを格納しているディレクトリのパスが含まれている必要がある場合です(そのディレクトリが、現在のトランザクション・ログのディレクトリとは異なるからです)。ASA7.0.2以降では、名前が変更されて再開されたトランザクション・ログに対して、デフォルトで現在のディレクトリが検索されます。一方ASA 7.0.1以前(SQL Anywhere 5.5.0xを含む)では、SQL Remoteによってデフォルトで現在のディレクトリが検索されることはありません。このため、バージョン7.0.1以前のSQL Remoteを使用すると、古いログ・ディレクトリが指定されます。
もちろん、このエラーはSQL Remoteに必要なトランザクション・ログが不意に削除されている場合にも発生します。
- 「トランザクション・ログが重複しているか、または分断されています」 – Duplicate or partial transaction log -
このエラーは、複数のトランザクション・ログのオフセットが重複している場合に発生します。各ログに対してdbtranを実行し、それぞれのオフセットの連続性を検証してください。たとえば、あるトランザクション・ログがオフセット100,000で開始され、オフセット200,000で終了し、別のログがオフセット100,000で開始され、オフセット300,000で終了する場合、2番目のログの内容には1番目のログの内容が含まれるため、2番目のログを保持する必要があります
- 「テンポラリ・ファイルの書き込みエラー、不明なエラー-1」 – Error writing temporary file unknown error -1
このエラーは通常、TEMP、TMPDIR、またはTMP環境変数によって定義されたテンポラリ領域に問題がある場合に発生します。テンポラリ・ファイルは、TMP、TMPDIR、またはTEMP環境変数で指定されたディレクトリに配置され、Adaptive Server Anywhereによって最初に検出された環境変数の値が使用されます。テンポラリ領域の容量が満杯でないかどうか、SQL Remoteアプリケーションがそのディレクトリに対するアクセス権を持っているかどうか確認する必要があります。別の解決策として、テンポラリ領域の変数を、空き領域を持つ別のハード・ディスクに対して指定してもよいでしょう。ASA専用のテンポラリ・ディレクトリを指定する際には、ASTMP環境変数を使用することができます。
- 「ファイル<f:remoterem1>のオープンに失敗しました。指定されたファイルまたはディレクトリは存在しません。不明な宛先アドレス メッセージの送信に失敗しました」 – Sopen file <f:remoterem1> failed: no such file or directory error sending message unknown destination address -
このエラーは、SQL Remoteが、存在しないアドレスまたはアクセスできないアドレスに対してメッセージの読み書きを行おうとした場合に発生します。メッセージ・タイプがFILE の場合、送信先のディレクトリがない 場合などにこのようなメッセージが出力されます。メッセージ・フォルダの名前が正しいかどうか確認するとともに、リモート・ユーザのアドレスやパブリッシャのアドレスも確認します。さらに、SQLREMOTEが存在する場合は正しく設定されているか確認します。SQLREMOTE環境変数はオプションであり、インストール・プログラムでは設定されません。SQL RemoteでのFILEメッセージ・リンクのアドレスは、SQLREMOTE環境変数のサブディレクトリとなります。ASA6.0.3では、QLREMOTE環境変数によって設定されるこのアドレスは、データベース内で直接設定できます。このアドレスがデータベース内で設定されると、データベースの設定がSQLREMOTE環境変数よりも優先されます。
「オフライン・トランザクション・ログが見つかりません。Yで開始されるトランザクション・ログを探していますが、オンライン・トランザクション・ログはXで開始されています」- No offline transaction log found and online transaction log starts at X we are looking for a transaction log starting at Y
dbremoteが現在のトランザクション・ログの開始オフセットよりも前のオフセットを探していて、オフライン・トランザクション・ログが見つからない場合、メッセージ・エージェントはこのエラーを表示します。このエラーは、SQL Remoteに必要な古いオフライン・トランザクション・ログのロケーションを指定していない場合にも発生します。