La migration prématurée des déclencheurs lors d'une tâche de synchronisation ou de migration des données peut entraîner des incohérences entre les bases de données source et de destination. Cette rubrique explique comment configurer la synchronisation ou la migration des déclencheurs pour éviter ce problème.
Prérequis
Les bases de données source et de destination doivent être d'un type pris en charge, par exemple d'une instance ApsaraDB RDS for MariaDB vers une instance ApsaraDB RDS for MySQL. Pour plus d'informations, consultez la section Instances prises en charge.
-
L'instance est configurée pour les tâches de schéma et incrémentielles.
Instance de migration : sous Migration Types, sélectionnez Schema Migration et Incremental Data Migration.
Instance de synchronisation : sous Synchronization Types, l'option Incremental Data Synchronization est sélectionnée par défaut ; vous devez également choisir Schema Synchronization.
Lors de la configuration de l'instance, sélectionnez les objets pour Source Objects au niveau de la base de données entière ou du schéma.
Instances prises en charge
|
Base de données source |
Base de données de destination |
Description |
|
MySQL, PolarDB for MySQL, MariaDB |
MySQL, PolarDB for MySQL, MariaDB |
Si l'option Method to Migrate Triggers in Source Database est définie sur Automatically Migrate, DTS ajoute une instruction de contrôle au déclencheur dans la base de données de destination. Cette instruction empêche le déclenchement du trigger par défaut. Pour plus d'informations, consultez la section Migration automatique. |
|
SQL Server |
SQL Server |
Si l'option Method to Migrate Triggers in Source Database est définie sur Automatically Migrate, DTS migre automatiquement les déclencheurs vers la base de données de destination. Important
Si les modifications incrémentielles des données dans la base de données source entraînent l'exécution de déclencheurs qui mettent à jour les données à la fois dans les bases source et de destination, cela peut créer des incohérences dans la base de destination. Nous vous recommandons de sélectionner Manual Migration et d'effectuer les opérations de suivi requises. |
-
Si la base de données source de l'instance de synchronisation ou de migration contient des déclencheurs et que la base de données de destination est une instance PostgreSQL, PolarDB for PostgreSQL ou PolarDB for PostgreSQL (Compatible with Oracle), DTS aide à prévenir les incohérences de données causées par la synchronisation ou la migration des déclencheurs pendant l'exécution de l'instance.
Si le compte utilisé pour la base de données de destination dispose de privilèges suffisants, tels qu'un compte privilégié ou un compte super-privilégié, DTS désactive automatiquement le déclencheur au niveau de la session après sa synchronisation ou sa migration vers la base de destination.
Si le compte de la base de données de destination ne dispose pas de privilèges suffisants, assurez-vous que le paramètre
session_replication_roleest défini surreplicadans la base de destination pendant l'exécution de l'instance.
Pour les autres instances de synchronisation ou de migration contenant des déclencheurs, consultez la section Comment configurer une tâche de synchronisation ou de migration lorsque la base de données source contient des déclencheurs ?
Configuration de l'instance
À l'étape Configure Objects, sélectionnez une option pour Method to Migrate Triggers in Source Database.
Sur la version précédente de la page de configuration, cette option se trouve à l'étape Configure Objects and Advanced Settings.
Sélectionnez Manual Migration : Lors de la migration du schéma, DTS génère une alerte
object ignored due to incremental migration is enabledpour tout déclencheur rencontré et ne le migre pas vers la base de données de destination. Vous devez synchroniser ou migrer manuellement les déclencheurs de la base source vers la base de destination avant de terminer la tâche incrémentielle. Pour plus d'informations, consultez la section Migration manuelle.Sélectionnez Automatically Migrate : Aucune action supplémentaire n'est requise.
Migration manuelle
La procédure est similaire pour les instances de synchronisation et de migration. Cette section utilise une instance de synchronisation comme exemple.
-
Accédez à la page de liste des tâches de synchronisation de la région de destination. Vous pouvez utiliser l'une des deux méthodes suivantes :
Depuis la console DTS
Connectez-vous à la console Data Transmission Service (DTS).
Dans le volet de navigation de gauche, cliquez sur Data Synchronization.
Dans le coin supérieur gauche de la page, sélectionnez la région où se trouve l'instance de synchronisation.
Depuis la console DMS
RemarqueLes opérations réelles peuvent varier selon le mode et la disposition de la console DMS. Pour plus d'informations, consultez les sections Mode simple et Personnaliser la disposition et le style de l'interface DMS.
Connectez-vous à Data Management (DMS).
Dans la barre de menu supérieure, choisissez .
À droite de Data Synchronization Tasks, sélectionnez la région où se trouve l'instance de synchronisation.
Cliquez sur l'ID de l'instance cible.
Facultatif : Dans le volet de navigation de gauche, cliquez sur Task Management.
Dans la section Progress, cliquez sur le module Incremental Write.
-
Sous l'onglet Basic Information, cliquez sur Migrate Triggers.
RemarqueSi le bouton Migrate Triggers n'est pas affiché, aucun déclencheur n'a été trouvé lors de la migration du schéma.
Vous pouvez consulter les résultats de la synchronisation des déclencheurs dans la section Progress, au sein du module Schema Migration3.
Migration automatique
DTS copie le code du déclencheur depuis la base de données source, ajoute une instruction de contrôle à l'en-tête du déclencheur, puis écrit le code modifié dans la base de données de destination. L'exemple de code suivant illustre cette opération :
Déclencheur de la base de données source :
CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW
BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
END;
Déclencheur de la base de données de destination :
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;
La migration automatique modifie uniquement la manière dont DTS traite les déclencheurs. Elle n'a aucun impact sur la synchronisation incrémentielle des données. La survenance de la synchronisation incrémentielle des données dépend de la sélection de l'option Incremental Data Migration sous Migration Types. Si vous sélectionnez Schema Migration, la migration complète des données et Incremental Data Migration, DTS synchronise automatiquement les nouvelles données de la base source vers la base de destination une fois la migration complète des données terminée.
FAQ
-
Que signifie une tâche incluant à la fois des opérations de schéma et incrémentielles ?
Pour une instance de synchronisation, cela signifie que les options Schema Synchronization et Incremental Data Synchronization sont toutes deux sélectionnées sous Synchronization Types. Pour une instance de migration, cela signifie que les options Schema Migration et Incremental Data Migration sont toutes deux sélectionnées sous Migration Types.
-
Comment mettre fin à une tâche incrémentielle ?
Vous pouvez mettre fin à une tâche incrémentielle en arrêtant, en réinitialisant ou en libérant l'instance. Pour plus d'informations, consultez les sections Arrêter une instance DTS, Réinitialiser une instance DTS et Libérer une instance DTS.