エラー:Duplicate or Partial Transaction Log (重複したまたは部分的なトランザクション・ログです)
概要:この文書では、エラー : Duplicate or partial transaction log の診断手順について説明します。この文書は、すべてのバージョンの Adaptive Server Anywhere を対象としています。
エラー:”Duplicate or Partial Transaction Log”
原因:2 つのトランザクション・ログの開始オフセットが同一か、重複している。
症状:SQL Remote でメッセージの受信は実行されるが、メッセージの送信は実行されない。
対象:SQL Anywhere 5.5.0x、Adaptive Server Anywhere (SQL Anywhere) 6/7/8
解決法:まず、メッセージの原因を特定します。次の診断手順を参照してください。
この問題の診断手順は、”Missing Transaction Log(s) error” の場合の手順と実質的には同じです。すべてのログ・ファイルのオフセットを調べ、重複するものがあるかどうかを確認する必要があります。この診断を行うには、次の手順に従います。
手順 1
最初に、名前が変更されたログ・ファイルがあるかどうかを確認します。ログ・ファイルの名前の変更方法は多数あります。その 1 つとして、-r スイッチを指定して dbbackup を使用する方法があります。また、-x スイッチを指定して dbremote を使用した場合にも、ログ・ファイルの名前変更および再開が行われます。ログ・ファイルの名前が変更されている場合は、そのログ・ディレクトリを dbremote のコマンド・ラインで指定したかどうか (例 dbremote -c “uid=dba;pwd=sql” c:\old\logs) を確認してください。dbremote コマンドの正しい用法およびそのスイッチの詳細については、ASA のヘルプ・ファイルを参照してください。
手順 2
手順 1 での説明のようにログの名前を変更した場合は、開始オフセットが同一のログ・ファイルや、他の既存のログ・ファイルの一部が含まれる開始オフセットと終了オフセットのログがあるかどうかを確認してください。
すべてのログ・ファイルで、開始オフセットと終了オフセットを確認する必要があります。データベースが実行中でない場合は、DBTRAN を実行します。
すべてのログ・ファイルで、開始オフセットと終了オフセットを確認する必要があります。データベースが実行中でない場合は、DBTRAN を実行します。
C:\Files\SQLAny\REPSS>dbtran sales.log nul -y
Transaction log “sales.log” starts at offset 0000116339
Transaction log ends at offset 0000128158
名前を変更したログ・ディレクトリ (c:\old\logs) 内のすべてのログで、開始オフセットと終了オフセットを特定します。
上記の例では、他のログ・ファイルを変換した場合は、次のように表示されます。
C:\Files\SQLAny\REPSS>dbtran 98010100.log nul -y
Transaction log “sales.log” starts at offset 0000101234
Transaction log ends at offset 0000116339
1 つまたは複数のログ・ファイルを変換した場合は、次のように表示されます。
C:\Files\SQLAny\REPSS>dbtran 98010200.log nul -y
Transaction log “sales.log” starts at offset 0000101234
Transaction log ends at offset 0000110000
この例では、最初の 2 つのログのシーケンスを確認できます。98010100.log は、開始オフセットが 0000101234、終了オフセットが 0000116339 です。Sales.log (現在のログ) は、開始オフセットが 0000116339、終了オフセットが 0000128158 です。このログの開始オフセットは、98010100.log の終了オフセットと完全に同一になっています。3 番目の translated log (98010200.log ) では、開始オフセットが 98010100.log の開始オフセットと同一ですが、終了オフセットは 98010100.log よりも前になっています。この状況が原因で、エラー “Duplicate or Partial Transaction Log” が発生します。この場合は、98010100.log に 98010200.log の時間が含まれているため (両方のログの開始オフセットと終了オフセットを比較してください)、98010200.log を古いログ・ディレクトリから移動する必要があります。その後で dbremote を実行すると、エラーなしで実行されます。この変更を行った後もエラーが発生する場合、または別の状況下でこのエラーが発生している場合は、Sybase 製品の保守契約を結んでいるサポート・センタまでお問い合わせください。
また、エラーの発生中に -x スイッチで dbremoteを実行しているときに、現在のトランザクション・ログの名前変更や再開が実行されていない場合は、このエラーが発生するのは通常の動作であるため、問題はありません。これは、dbremote の実行の最後に、メッセージ・エージェントがトランザクション・ログの名前を変更して再開するためです。このエラーが発生している場合は、実行が終了し、したがって名前の変更が実行されません。”Duplicate or Partial Transaction Log” エラーの原因を修正した後は、-x スイッチが正しく機能するようになります。