データ同期または移行タスク中にトリガーを早期に移行すると、ソースデータベースと宛先データベース間でデータの不整合が発生する可能性があります。本トピックでは、この問題を防ぐためのトリガーの同期または移行の設定方法について説明します。
前提条件
-
ソースデータベースと宛先データベースは、ApsaraDB RDS for MariaDB インスタンスから ApsaraDB RDS for MySQL インスタンスへの移行など、サポート対象のタイプである必要があります。詳細については、「サポート対象インスタンス」をご参照ください。
-
インスタンスで、スキーマタスクと増分タスクの両方を設定する必要があります。
-
移行インスタンス: 移行タイプ には、スキーマ移行 と 増分データ移行 を選択する必要があります。
-
同期インスタンス: 同期タイプ では、デフォルトで 増分データ同期 が選択されており、スキーマ同期 も選択する必要があります。
-
-
インスタンスを設定する際、データベース全体またはスキーマレベルでソースオブジェクトにオブジェクトを選択する必要があります。
サポート対象インスタンス
|
ソースデータベース |
宛先データベース |
説明 |
|
MySQL、PolarDB for MySQL、MariaDB |
MySQL、PolarDB for MySQL、MariaDB |
移行元データベースのトリガーを移行する方法 が 自動的に移行 に設定されている場合、DTS は、トリガーがデフォルトで起動しないように、移行先データベースのトリガーに制御ステートメントを追加します。詳細については、「自動移行」をご参照ください。 |
|
SQL Server |
SQL Server |
移行元データベースのトリガーを移行する方法 が 自動的に移行 に設定されている場合、DTS はトリガーを移行先データベースに自動的に移行します。 重要
ソースデータベースでの増分データ変更によってトリガーが起動され、ソースデータベースと宛先データベースの両方でデータが更新される場合、宛先データベースでデータ不整合が発生する可能性があります。手動移行 を選択し、必要な後続の操作を実行することをお勧めします。 |
-
同期または移行インスタンスのソースデータベースにトリガーが含まれており、宛先データベースが PostgreSQL、PolarDB for PostgreSQL、または PolarDB for PostgreSQL (Compatible with Oracle) インスタンスの場合、DTS はインスタンスの実行中にトリガーの同期または移行によって発生するデータの不整合を防ぐことができます。
-
宛先データベースのアカウントが特権アカウントやスーパー特権アカウントなど十分な権限を持っている場合、DTS はトリガーが宛先データベースに同期または移行された後、セッションレベルで自動的にトリガーを無効にします。
-
宛先データベースのアカウントに十分な権限がない場合は、インスタンスの実行中に宛先データベースで
session_replication_roleパラメーターがreplicaに設定されていることを確認してください。
-
-
トリガーを含むその他の同期または移行インスタンスについては、「ソースデータベースにトリガーが含まれている場合、同期または移行タスクをどのように設定すればよいですか?」をご参照ください。
インスタンスの設定
オブジェクト設定 ステップで、移行元データベースのトリガーを移行する方法 のオプションを選択します。
以前のバージョンの設定ページでは、このオプションは オブジェクトの設定と詳細設定 ステップにあります。
-
手動移行: スキーマ移行中に、DTS は、検出したすべてのトリガーに対して
object ignored due to incremental migration is enabledアラートを生成し、それらを宛先データベースに移行しません。増分タスクを終了する前に、ソースデータベースから宛先データベースにトリガーを手動で同期または移行する必要があります。詳細については、「手動移行」をご参照ください。 -
自動的に移行 を選択すると、追加の操作は必要ありません。
手動移行
同期インスタンスと移行インスタンスの手順は類似しています。ここでは、同期インスタンスを例として説明します。
[データ同期タスク] ページに移動します。
にログインします。 DMSコンソールを使用します。
上部のナビゲーションバーで、[DTS] をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
説明実際の動作は、DMSのモードおよびレイアウトに応じて変化し得る。 詳細については、「シンプルモード コンソール」および「DMSコンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。
に行くこともできます 新しいDTSコンソールのデータ同期タスクページ。
-
対象インスタンスの ID をクリックします。
-
任意: 左側のナビゲーションペインで、タスク管理 をクリックします。
-
進捗状況 セクションで、増分書き込み モジュールをクリックします。
-
基本情報 タブで、トリガーの移行 をクリックします。
説明トリガーの移行 ボタンが表示されていない場合は、スキーマ移行中にトリガーが検出されなかったことを示します。
トリガーの同期結果は、[Schema Migration3] モジュール内の 進捗状況 セクションで表示できます。
自動移行
DTS は、ソースデータベースからトリガーコードをコピーし、トリガーのヘッダーに制御ステートメントを追加した後、変更されたコードを宛先データベースに書き込みます。次にコード例を示します。
ソースデータベースのトリガー:
CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW
BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
END;
宛先データベースのトリガー:
CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW
BEGIN
IF (SELECT @`__#aliyun_dts_writer#__) IS NULL THEN
INSERT INTO test2 SET a2 = NEW.a1;
END IF;
END;
自動移行は、DTS がトリガーを処理する方法のみを変更します。増分データ同期には影響を与えません。増分データ同期が実行されるかどうかは、移行タイプ で 増分データ移行 を選択したかどうかによって決まります。スキーマ移行、フルデータ移行、および 増分データ移行 を選択した場合、フルデータ移行の完了後、DTS はソースデータベースの新しいデータを宛先データベースに自動的に同期します。
よくある質問
-
「スキーマ操作と増分操作の両方を含むタスク」とは何ですか。
同期インスタンスの場合、同期タイプでスキーマ同期と増分データ同期の両方が選択されていることを意味します。 移行インスタンスの場合、移行タイプでスキーマ移行と増分データ移行の両方が選択されていることを意味します。
-
増分タスクを終了するにはどうすればよいですか?
インスタンスを終了、リセット、またはリリースすることで、増分タスクを終了できます。詳細については、「DTS インスタンスの終了」、「DTS インスタンスのリセット」、および「DTS インスタンスのリリース」をご参照ください。