このトピックでは、データベース全体の完全同期および増分同期タスクで発生する一般的な障害シナリオと、それに対応するソリューションについて説明します。
リアルタイム書き込みの障害シナリオ
シナリオ | 関連ドキュメント |
Binlog が失われていない完全同期および増分同期タスク | |
Binlog が失われている完全同期および増分同期タスク | |
完全同期および増分同期タスクにおけるマージタスクの障害 |
Binlog が失われていないシナリオ
サポートされていない DDL 文が原因でリアルタイムタスクが失敗する。
ソリューション:
ページに移動し、対象のタスクを見つけて をクリックします。タスクからテーブルを削除してタスクを送信し、再度テーブルを追加して再同期をトリガーできます。この操作により、そのテーブルに対するサポートされていない DDL 文がスキップされます。
タスクを編集し、DDL 処理ポリシーを変更します。特定の DDL タイプに対してポリシーを [無視] に設定するか、[アラート] を設定して DDL イベントの通知を受け取ることができます。
ダーティデータが原因でリアルタイムタスクが失敗する。
一般的な原因として、宛先テーブルの列タイプがソースデータと互換性がないことが挙げられます。リアルタイムタスクの実行ログとダーティデータの内容を確認し、ソースデータと宛先テーブルのどちらが問題の原因であるかを判断します。宛先テーブルの構造に問題がある場合は、テーブルを再作成してリアルタイムタスクを回復させます。
テーブルの再読み込み:元のテーブルをバックアップします。次に、完全同期および増分同期タスクを編集してテーブルを削除します。その後、再度テーブルを追加し、既存の宛先テーブルを使用するオプションを選択します。このプロセスにより、テーブルデータが再読み込みされます。再読み込みの前に、宛先テーブルのフィールドがソースデータと互換性があることを確認して、タスクを回復させます。
Tunnel サービスの問題により、MaxCompute へのデータ書き込みタスクが失敗する。
リアルタイムタスクの実行ログを確認します。
InternalServerErrorやException when calling callable. Exception Msg: Read timed outのようなエラーが表示された場合、Tunnel サービスに問題があることを示しています。トラブルシューティングについては、MaxCompute のサポートにお問い合わせください。問題が解決したら、リアルタイムタスクを再起動します。
Binlog が失われているシナリオ
Binlog データが失われると、増分データを完全にバックフィルできなくなります。この場合、完全なデータセットを再初期化し、増分同期を再開する必要があります。以下の方法を使用してタスクを回復します。
強制再実行による回復
ユースケース
リアルタイムタスクが長期間失敗し、Binlog がクリアされて増分データのバックフィルができない。
宛先テーブルに新しい列が欠落している。
宛先テーブルのデータが欠落しているか、正しくない。
手順
ページに移動し、対象のタスクを見つけます。
[操作] 列で、 を選択します。これにより、すべてのソーステーブルに対して完全同期および増分同期の初期化が強制的に実行され、データが宛先テーブルに再移行されて、迅速なデータ回復が可能になります。
タスクの [操作] 列にある [実行詳細] をクリックすると、実行の詳細を表示できます。
重要データベース全体の完全同期および増分同期タスクを再実行する前に、実行中またはスケジュールされているマージタスクインスタンスとの潜在的な競合を確認してください。同じビジネス日付で同時に実行されると、パーティションデータまたはテーブルデータが上書きされる可能性があります。
DataWorks の [オペレーションセンター] の [自動トリガーインスタンスの表示] ページで、同期タスクのマージタスクインスタンスのステータスを確認できます。競合が発生した場合は、次のいずれかの操作を実行できます:
マージタスクが完了するまで再実行操作を延期する。
次のマージタスクインスタンスをフリーズし、再実行操作が成功した後に再開する。
再実行が完了した後、同期パイプラインが安定するまで、完全同期やテーブルの追加/削除などの他の操作を実行しないでください。他の操作を実行すると再実行が無効になり、タスクを再度実行する必要があります。
再実行が完了した後、翌日のデータが生成されない、またはマージタスクが自動的に再開されない場合は、手動でマージタスクインスタンスを確認して再開します:
リアルタイムタスクに遅延がある場合は、その遅延を解決します。詳細については、「リアルタイム同期タスクの遅延に関するソリューション」をご参照ください。
前のサイクルのインスタンスが実行されなかったか失敗した場合は、前のサイクルへの依存関係を削除します。詳細については、「自動トリガーインスタンスの表示」をご参照ください。
完全データのバックフィルによる回復
タスクの再開
ページに移動し、対象のタスクを再起動して、まず増分データコレクションを再開します。
完全データのバックフィル
ページに移動し、宛先タスクを見つけます。
タスクの [操作] 列で [すべてのデータをバックフィル] をクリックし、パラメーターを設定します。
データバックフィルのビジネス日付を選択します。
前日をビジネス日付として選択します。
バックフィルするテーブルを選択します。
左側のパネルで完全同期するテーブルを選択し、
アイコンをクリックして右側のパネルに追加します。タスク全体を回復するには、すべてのテーブルを選択します。[OK] をクリックして、完全データのバックフィルを開始します。
実行詳細の表示
タスクの [操作] 列にある [実行詳細] をクリックすると、実行の詳細を表示できます。
重要完全データをバックフィルする前に、ビジネス日付を確認して、実行中またはスケジュールされているマージタスクインスタンスとの潜在的な競合を回避してください。同じビジネス日付で同時に実行されると、パーティションデータまたはテーブルデータが上書きされる可能性があります。
DataWorks の [オペレーションセンター] の [自動トリガーインスタンスの表示] ページで、同期タスクのマージタスクインスタンスのステータスを確認できます。競合が発生した場合は、次のいずれかの操作を実行できます:
完全データのバックフィルを一時停止し、マージタスクが完了するのを待ちます。
次のマージタスクインスタンスをフリーズし、データバックフィルが完了した後に再開します。
完全データのバックフィル機能は、シャーディングされたデータベースとテーブルの完全同期および増分同期タスクではサポートされていません。
この操作を実行する前に、このセクションの注意事項を確認してください。翌日に実行結果を確認します。データが生成されない、またはマージタスクが自動的に再開されない場合は、手動でマージタスクインスタンスを確認して再開します。
同期タスクの再作成
ページに移動します。次に、元のタスクを [停止] してから [削除] します。
既存の宛先テーブルを使用してタスクを再作成します。次に、「データベース全体のリアルタイム同期タスクの設定」に従って新しいタスクを実行します。
特定テーブルのデータ回復
ページに移動し、対象のタスクを見つけて をクリックします。目的のテーブルをタスクに再度追加して、同期を再開します。
履歴データの復元
データベース全体の完全同期および増分同期タスクの場合、「完全データのバックフィルによる回復」の方法を使用して、現在の完全データセットを履歴パーティションに同期します。特定の期間の履歴データのバックフィルはサポートされていません。
データベース全体のリアルタイム同期タスクの場合、手動で「バッチ同期タスクを作成」して履歴データをバックフィルします。
マージタスクの失敗
マージタスクの障害に関するトラブルシューティングと回復の詳細については、「完全同期および増分同期データベースタスクのトラブルシューティング」をご参照ください。