Replicat for Google Spannerでの一時エラーおよび永続エラーの処理
Google Spannerには、transientまたはpermanentという2つのタイプのエラーがあります。一時的なエラーは再試行できますが、永続的なエラーは再試行するだけでは解決できません。トランザクションを再試行する前に、修正処理を実行する必要があります。
Oracle GoldenGate Replicatにおける一時エラーおよび永続エラーの詳細とそれらの処理について学習します。
GoogleスパナのDML操作中のReplicatエラーの処理
Spannerでは、DMLによってトランザクション内でエラー(一時的または永続的)が発生した場合、そのトランザクションは無効になり、使用できなくなります。その後、同じトランザクションを部分的にコミットすることも、再試行することもできません。
そのトランザクション内のすべてのDMLは、新しいトランザクション・オブジェクトを使用して再試行する必要があります。無効なトランザクション内では、失敗したDMLのみを再試行できません。
主キーが重複していて行が見つからない場合は、DMLレベルREPERRORを使用する必要があります。その他のすべてのGoogle Cloud Spannerエラーについては、トランザクション・レベルのREPERROR処理が使用されます。
Spannerの他のすべてのエラーについては、トランザクション・レベルのREPERROR処理のみがサポートされています。Google Cloud SpannerでサポートされているREPERRORアクションは、TRANSDISCARD、TRANSEXCEPTION、TRANSABORTです。
Oracle GoldenGateパラメータおよび機能リファレンスのREPERRORを参照してください。
一時的なエラーの処理
一時エラーは、再試行時に成功する可能性が高い一時的な条件を示します。このようなエラーを検出する場合は、REPERRORを使用してトランザクションを再試行することを強くお薦めします。
一時エラーを処理するためのREPERROR戦略を次に示します。
構文:
REPERROR (*status code*, TRANSABORT, MAXRETRIES *n*, DELAYSECS *n*)
-
TRANSABORT: トランザクション全体を再試行します。 -
MAXRETRIES: 3-5回の再試行内で解決されます。 -
DELAYSECS: Replicatによって適用されたバックオフ。
永続的なエラーの処理
永続エラーが検出されると、Oracle GoldenGate Replicatはトランザクションをロールバックした後にエラーで異常終了します。Replicatを再起動する前に、Spannerデータベースの根本的な問題を修正する必要があります。