同期または移行するテーブルがソースデータベースのトリガーによって更新されると、トリガーが同期先データベースに同期または移行されるため、ソースデータベースと移行先データベースの間でデータの不整合が発生する可能性があります。 このトピックでは、データの不整合を防ぐためにトリガーを同期または移行する方法について説明します。
前提条件
ソースデータベースと宛先データベースはサポートされているタイプです。 たとえば、データはApsaraDB RDS For MariaDBインスタンスからApsaraDB RDS for MySQLインスタンスに同期または移行されます。 詳細については、このトピックの「サポートされるデータベースタイプ」をご参照ください。
データ転送サービス (DTS) インスタンスを設定するときに、スキーマ同期または移行、および増分データ同期または移行が同期または移行のタイプとして選択されます。
データ移行: 移行タイプ パラメーターに スキーマ移行 および 増分データ移行 を選択します。
データ同期: デフォルトでは、同期タイプパラメーターに増分データ同期が選択されています。 スキーマ同期 も選択する必要があります。
データ同期または移行タスクを設定するときに、ソースオブジェクトパラメーターをデータベース全体またはスキーマに設定できます。
サポートされるソースデータベースタイプ
ソースデータベースタイプ | 宛先データベースタイプ | 説明 |
MySQL、PolarDB for MySQL、およびApsaraDB RDS for MariaDB | MySQL、PolarDB for MySQL、およびApsaraDB RDS for MariaDB | 移行元データベースのトリガーを移行する方法 パラメーターを 自動的に移行 に設定した場合、DTSはターゲットデータベースの同期または移行された各トリガーにトリガー制御ステートメントを追加します。 デフォルトでは、DTSはターゲットデータベースでこれらのトリガーを実行しません。 詳細については、このトピックの「トリガーの自動同期または移行」セクションをご参照ください。 |
SQL Server | SQL Server | 移行元データベースのトリガーを移行する方法 パラメーターを 自動的に移行 に設定した場合、DTSはトリガーをターゲットデータベースに自動的に移行します。 重要 ソースデータベース内の増分データ変更により、ソースデータベースと宛先データベースの両方でデータを更新するトリガーが発生した場合、宛先データベースにダーティデータが生成される可能性があります。 メソッドを [ソースデータベースのトリガーを移行する] パラメーターを 手動移行 に設定し、その後の操作を実行することを推奨します。 |
同期または移行タスクのソースデータベースにトリガーが含まれ、ターゲットデータベースがPostgreSQL、PolarDB for PostgreSQL、またはPolarDB for PostgreSQL (Compatible with Oracle) データベースの場合、DTSは、同期または移行タスク中のトリガー同期または移行によって引き起こされるデータの不整合を防ぎます。
DTSインスタンスによって使用される移行先データベースアカウントに、特権アカウントや超特権アカウントなどの十分な権限がある場合、トリガーが移行先データベースに同期または移行された後、DTSは自動的にセッションレベルでトリガーを無効にします。
DTSインスタンスによって使用される移行先データベースアカウントに必要な権限がない場合は、同期または移行タスク中に、移行先データベースの
session_replication_role
パラメーターの値がreplica
に設定されていることを確認します。
トリガーを含む他のデータベースの同期タスクまたは移行タスクを構成する方法の詳細については、「トリガーを含むソースデータベースのデータ同期タスクの構成」をご参照ください。
DTSインスタンスの設定
オブジェクト設定 ステップで、移行元データベースのトリガーを移行する方法 を選択します。
以前のデータ管理 (DMS) コンソールバージョンを使用している場合は、オブジェクトの設定と詳細設定 ステップでこのオプションを選択します。
このパラメーターを 手動移行 に設定すると、スキーマの同期または移行中にトリガーが発生した場合、DTSは
[増分移行のために無視されるオブジェクトが有効になっている]
アラートを生成します。 DTSは、トリガーをターゲットデータベースに同期または移行しません。 増分データの同期または移行が完了する前に、ソースデータベースからターゲットデータベースにトリガーを手動で同期または移行する必要があります。 詳細については、このトピックの「手動でトリガーを同期または移行する」をご参照ください。このパラメーターを 自動的に移行 に設定した場合、追加の操作は必要ありません。
トリガーを手動で同期または移行する
ソースデータベースからトリガーを手動で移行する手順は、ソースデータベースからトリガーを手動で同期する手順と同じです。 この例では、ソースデータベースからトリガーを手動で同期する方法を示します。
[データ同期タスク] ページに移動します。
データ管理 (DMS) コンソールにログインします。
上部のナビゲーションバーで、DTSをクリックします。
左側のナビゲーションウィンドウで、を選択します。
説明操作は、DMSコンソールのモードとレイアウトによって異なります。 詳細については、「シンプルモード」および「DMSコンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。
新しいDTSコンソールのデータ同期タスクページに行くこともできます。
データ同期タスクの右側で、データ同期インスタンスが存在するリージョンを選択します。
説明新しいDTSコンソールを使用する場合は、上部のナビゲーションバーでデータ同期インスタンスが存在するリージョンを選択する必要があります。
管理するDTSインスタンスを見つけて、インスタンスIDをクリックします。
オプション。 左側のペインで、タスク管理をクリックします。
進捗状況セクションで、増分書き込みモジュールを作成します。
基本情報タブで、トリガーの移行をクリックします。
説明[Migrate Triggers] が表示されない場合、スキーマの同期または移行中にトリガーは発生しません。
トリガー同期の結果は、[進行状況] セクションの [スキーマの移行3] モジュールで確認できます。
トリガーを自動的に同期または移行する
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インスタンスのリリース」をご参照ください。