Utilisez Data Transmission Service (DTS) pour synchroniser en continu les données d'une base de données SQL Server auto-gérée hébergée sur Elastic Compute Service (ECS) vers une instance AnalyticDB for PostgreSQL. DTS prend en charge la synchronisation de schéma, la synchronisation complète des données et la synchronisation incrémentielle des données au sein d'une seule tâche.
Cas où il ne faut pas utiliser DTS
Si l'instance source ApsaraDB RDS for SQL Server remplit l'une des conditions suivantes, utilisez plutôt la fonctionnalité de sauvegarde d'ApsaraDB RDS for SQL Server. Pour plus de détails, consultez Migrer des données d'une base de données auto-gérée vers une instance ApsaraDB RDS for SQL Server.
| Condition | Seuil |
|---|---|
| Nombre de bases de données | Plus de 10 |
| Intervalle de sauvegarde des journaux (base de données unique) | Moins d'1 heure |
| Instructions DDL par heure (base de données unique) | Plus de 100 |
| Taux d'écriture des journaux (base de données unique) | 20 Mo/s ou plus |
| Tables nécessitant Change Data Capture (CDC) | Plus de 1 000 |
| Types de tables présents | Tables heap, tables sans clés primaires, tables compressées ou tables avec colonnes calculées |
Exécutez les instructions SQL suivantes pour vérifier si la base de données source contient des types de tables non pris en charge :
-
Vérifiez la présence de tables heap :
SELECT s.name AS schema_name, t.name AS table_name FROM sys.schemas s INNER JOIN sys.tables t ON s.schema_id = t.schema_id AND t.type = 'U' AND s.name NOT IN ('cdc', 'sys') AND t.name NOT IN ('systranschemas') AND t.object_id IN (SELECT object_id FROM sys.indexes WHERE index_id = 0); -
Vérifiez la présence de tables sans clés primaires :
SELECT s.name AS schema_name, t.name AS table_name FROM sys.schemas s INNER JOIN sys.tables t ON s.schema_id = t.schema_id AND t.type = 'U' AND s.name NOT IN ('cdc', 'sys') AND t.name NOT IN ('systranschemas') AND t.object_id NOT IN (SELECT parent_object_id FROM sys.objects WHERE type = 'PK'); -
Vérifiez si les colonnes de clé primaire ne figurent pas dans les colonnes d'index clusterisé :
SELECT s.name AS schema_name, t.name AS table_name FROM sys.schemas s INNER JOIN sys.tables t ON s.schema_id = t.schema_id WHERE t.type = 'U' AND s.name NOT IN ('cdc', 'sys') AND t.name NOT IN ('systranschemas') AND t.object_id IN ( SELECT pk_columns.object_id FROM ( SELECT sic.object_id, sic.column_id FROM sys.index_columns sic, sys.indexes sis WHERE sic.object_id = sis.object_id AND sic.index_id = sis.index_id AND sis.is_primary_key = 'true' ) pk_columns LEFT JOIN ( SELECT sic.object_id, sic.column_id FROM sys.index_columns sic, sys.indexes sis WHERE sic.object_id = sis.object_id AND sic.index_id = sis.index_id AND sis.index_id = 1 ) cluster_columns ON pk_columns.object_id = cluster_columns.object_id WHERE pk_columns.column_id != cluster_columns.column_id ); -
Vérifiez la présence de tables compressées :
SELECT s.name AS schema_name, t.name AS table_name FROM sys.objects t, sys.schemas s, sys.partitions p WHERE s.schema_id = t.schema_id AND t.type = 'U' AND s.name NOT IN ('cdc', 'sys') AND t.name NOT IN ('systranschemas') AND t.object_id = p.object_id AND p.data_compression != 0; -
Vérifiez la présence de tables avec des colonnes calculées :
SELECT s.name AS schema_name, t.name AS table_name FROM sys.schemas s INNER JOIN sys.tables t ON s.schema_id = t.schema_id AND t.type = 'U' AND s.name NOT IN ('cdc', 'sys') AND t.name NOT IN ('systranschemas') AND t.object_id IN (SELECT object_id FROM sys.columns WHERE is_computed = 1);
Si une requête renvoie des lignes, ces tables nécessitent un traitement particulier ou peuvent affecter votre choix de mode de synchronisation incrémentielle.
Prérequis
Avant de commencer, assurez-vous que :
La version de SQL Server est prise en charge par DTS. Pour connaître les versions prises en charge, consultez Présentation des scénarios de synchronisation de données.
L'instance AnalyticDB for PostgreSQL de destination est créée. Pour obtenir des instructions, consultez Créer une instance.
L'espace de stockage disponible de l'instance de destination est supérieur à la taille totale des données de la base de données source.
Opérations prises en charge
DML : INSERT, UPDATE, DELETE
DDL :
| Instruction | Notes |
|---|---|
| CREATE TABLE | Les tables partitionnées et les tables contenant des fonctions ne sont pas synchronisées. |
| ADD COLUMN, DROP COLUMN | |
| DROP TABLE | |
| CREATE INDEX, DROP INDEX |
DTS ne synchronise pas les opérations DDL contenant des types définis par l'utilisateur ni les opérations DDL transactionnelles.
Limites
Limites de la base de données source
Les tables doivent disposer de contraintes PRIMARY KEY ou UNIQUE avec tous les champs uniques ; sinon, la base de données de destination peut contenir des enregistrements en double.
Lorsque vous sélectionnez des tables comme objets de synchronisation et que vous les modifiez dans la destination, une seule tâche peut synchroniser jusqu'à 5 000 tables. Pour un nombre de tables supérieur, configurez plusieurs tâches ou synchronisez la base de données entière.
Une seule tâche peut synchroniser jusqu'à 10 bases de données. Pour plus de 10 bases de données, configurez plusieurs tâches.
-
Exigences de rétention des journaux de transactions :
Synchronisation incrémentielle uniquement : les journaux doivent être conservés pendant plus de 24 heures.
Synchronisation complète + incrémentielle : les journaux doivent être conservés pendant au moins 7 jours.
Une fois la synchronisation complète terminée, la période de rétention peut être réduite à plus de 24 heures.
-
Si CDC est activé pour les tables à synchroniser :
Le champ
srvnamedans la vuesys.sysserversdoit correspondre à la valeur de retour de la fonctionSERVERPROPERTY.Pour les bases de données SQL Server auto-gérées, le propriétaire de la base de données doit être l'utilisateur
sa.Pour les bases de données ApsaraDB RDS for SQL Server, le propriétaire de la base de données doit être l'utilisateur
sqlsa.L'édition Enterprise nécessite SQL Server 2008 ou une version ultérieure.
L'édition Standard nécessite SQL Server 2016 SP1 ou une version ultérieure.
SQL Server 2017 (édition Standard ou Enterprise) n'est pas recommandé ; effectuez une mise à jour vers une version ultérieure.
Autres limites
DTS prend en charge la synchronisation initiale du schéma pour les schémas, tables, vues, fonctions et procédures. Les bases de données source et de destination sont hétérogènes — les types de données n'ont pas de correspondance un-à-un. Évaluez l'impact de la conversion des types de données avant la synchronisation. Pour les mappages de types, consultez Mappages de types de données pour la synchronisation de schéma.
DTS ne synchronise pas les schémas des assemblys, des service brokers, des index full-text, des catalogues full-text, des schémas distribués, des fonctions distribuées, des procédures stockées CLR, des fonctions scalaires CLR, des fonctions table-valued CLR, des tables internes, des systèmes ou des fonctions d'agrégation.
DTS ne synchronise pas les données des types suivants : TIMESTAMP, CURSOR, ROWVERSION, HIERACHYID, SQL_VARIANT, SPATIAL GEOMETRY, SPATIAL GEOGRAPHY ou TABLE.
DTS ne synchronise pas les tables avec des colonnes calculées.
Si CDC est activé pour plus de 1 000 tables dans une seule tâche, la pré-vérification échoue.
Le réindexage n'est pas autorisé pendant la synchronisation incrémentielle ; cela pourrait entraîner l'échec de la tâche ou une perte de données.
Pendant la synchronisation complète, les opérations INSERT simultanées provoquent une fragmentation dans les tables de destination. Après la synchronisation, l'espace de table de destination sera plus grand que celui de la source.
Écrivez des données dans la base de données de destination uniquement via DTS pendant la synchronisation. L'utilisation d'autres outils pour écrire des données simultanément peut entraîner une perte de données ou une incohérence.
Comportement de la synchronisation de schéma
DTS synchronise les clés étrangères de la source vers la destination.
Pendant la synchronisation complète et incrémentielle, DTS désactive temporairement la vérification des contraintes de clé étrangère et les opérations en cascade au niveau de la session. Si vous effectuez des opérations UPDATE ou DELETE en cascade sur la source pendant la synchronisation, une incohérence des données peut se produire.
Choisir un mode de synchronisation incrémentielle
DTS propose deux modes pour synchroniser les données incrémentielles depuis SQL Server. Le mode choisi affecte les types de tables pris en charge et détermine si DTS modifie la base de données source.
| Mode hybride journal et CDC | Mode basé sur les journaux | |
|---|---|---|
| Nom complet | Analyse basée sur les journaux pour les tables non-heap et synchronisation incrémentielle basée sur CDC pour les tables heap | Synchronisation incrémentielle basée sur les journaux de la base de données source |
| Prend en charge les tables heap | Oui | Non |
| Prend en charge les tables sans clés primaires | Oui | Non |
| Prend en charge les tables compressées | Oui | Non |
| Prend en charge les tables avec colonnes calculées | Oui | Non |
| Intrusion dans la base de données source | Oui — DTS crée un déclencheur (dts_cdc_sync_ddl), une table de heartbeat (dts_sync_progress) et une table d'historique DDL (dts_cdc_ddl_history) dans la base de données source, et active CDC pour la base de données source et les tables spécifiques. |
Non — DTS ajoute uniquement une table de heartbeat (dts_log_heart_beat) à la base de données source. |
Comment choisir :
Si vos tables source incluent des tables heap, des tables sans clés primaires, des tables compressées ou des tables avec des colonnes calculées, utilisez le mode hybride journal et CDC.
Si toutes vos tables source possèdent des index clusterisés contenant des colonnes de clé primaire et que vous souhaitez minimiser les modifications apportées à la base de données source, utilisez le mode basé sur les journaux.
Facturation
| Type de synchronisation | Frais |
|---|---|
| Synchronisation de schéma + synchronisation complète des données | Gratuit |
| Synchronisation incrémentielle des données | Facturé. Consultez Présentation de la facturation. |
Topologies de synchronisation prises en charge
Synchronisation unidirectionnelle un-à-un
Synchronisation unidirectionnelle un-à-plusieurs
Synchronisation unidirectionnelle plusieurs-à-un
Pour plus de détails, consultez Topologies de synchronisation.
Autorisations requises
| Base de données | Autorisations requises |
|---|---|
| SQL Server auto-géré | Rôle de serveur fixe sysadmin. Consultez CREATE USER et GRANT (Transact-SQL). |
| AnalyticDB for PostgreSQL | LOGIN ; SELECT, CREATE, INSERT, UPDATE et DELETE sur les tables de destination ; CONNECT et CREATE sur la base de données de destination ; CREATE sur les schémas de destination ; COPY (copie par lots en mémoire). Le compte initial de l'instance dispose de ces autorisations par défaut. Consultez Créer un compte de base de données et Gérer les utilisateurs et les autorisations. |
Préparer la base de données SQL Server source
Configurez le modèle de récupération de SQL Server et créez des sauvegardes avant de configurer la tâche DTS. Ces étapes nécessitent les privilèges sysadmin.
Si vous synchronisez des données incrémentielles depuis plusieurs bases de données, répétez toutes les étapes de cette section pour chaque base de données.
Définir le modèle de récupération sur Full
Exécutez l'instruction suivante sur la base de données source. Vous pouvez également utiliser SQL Server Management Studio (SSMS) — consultez Afficher ou modifier le modèle de récupération d'une base de données (SQL Server).
USE master;
GO
ALTER DATABASE <database_name> SET RECOVERY FULL WITH ROLLBACK IMMEDIATE;
GO
Remplacez <database_name> par le nom de la base de données source. Exemple :
USE master;
GO
ALTER DATABASE mytestdata SET RECOVERY FULL WITH ROLLBACK IMMEDIATE;
GO
Créer une sauvegarde de base de données
Ignorez cette étape si vous avez déjà créé une sauvegarde complète.
BACKUP DATABASE <database_name> TO DISK='<backup_file_path>';
GO
| Espace réservé | Description | Exemple |
|---|---|---|
<database_name> |
Nom de la base de données source | mytestdata |
<backup_file_path> |
Chemin complet et nom de fichier pour le fichier de sauvegarde | D:\backup\dbdata.bak |
Exemple :
BACKUP DATABASE mytestdata TO DISK='D:\backup\dbdata.bak';
GO
Créer une sauvegarde de journal
BACKUP LOG <database_name> TO DISK='<backup_file_path>' WITH INIT;
GO
Exemple :
BACKUP LOG mytestdata TO DISK='D:\backup\dblog.bak' WITH INIT;
GO
Configurer la tâche de synchronisation
Étape 1 : Ouvrir la console DTS
Accédez à la page Synchronisation de données dans la console DTS.Console DTS
Vous pouvez également vous connecter à la console Data Management (DMS) . Dans la barre de navigation supérieure, cliquez sur DTS . Dans le volet de navigation de gauche, choisissez DTS (DTS) > Data Synchronization .
Étape 2 : Sélectionner une région
Dans le coin supérieur gauche, sélectionnez la région où réside l'instance de synchronisation.
Étape 3 : Créer une tâche et configurer les bases de données
Cliquez sur Create Task. Configurez les connexions aux bases de données source et de destination :
Base de données source
| Paramètre | Valeur |
|---|---|
| Type de base de données | SQL Server |
| Méthode d'accès | Self-managed Database on ECS |
| Région de l'instance | Région de l'instance ECS hébergeant SQL Server |
| ID de l'instance ECS | ID de l'instance ECS |
| Compte de base de données | Compte disposant des privilèges sysadmin |
| Mot de passe de la base de données | Mot de passe du compte |
| Chiffrement | Sélectionnez Non-encrypted ou SSL-encrypted |
Base de données de destination
| Paramètre | Valeur |
|---|---|
| Type de base de données | AnalyticDB for PostgreSQL |
| Méthode d'accès | Alibaba Cloud Instance |
| Région de l'instance | Région de l'instance de destination |
| ID de l'instance | ID de l'instance AnalyticDB for PostgreSQL de destination |
| Nom de la base de données | Nom de la base de données cible |
| Compte de base de données | Compte disposant des autorisations requises |
| Mot de passe de la base de données | Mot de passe du compte |
Étape 4 : Tester la connectivité et configurer l'accès réseau
Cliquez sur Test Connectivity and Proceed. DTS vérifie la connexion aux deux bases de données et configure automatiquement l'accès réseau lorsque c'est possible :
Instances de base de données Alibaba Cloud : DTS ajoute automatiquement les blocs CIDR du serveur DTS à la liste d'autorisation de l'instance.
Bases de données auto-gérées sur ECS : DTS ajoute automatiquement les blocs CIDR du serveur DTS aux règles du groupe de sécurité ECS. Ajoutez manuellement ces blocs CIDR à la liste d'autorisation de la base de données auto-gérée sur l'instance ECS.
Bases de données sur site ou sur cloud tiers : Ajoutez manuellement les blocs CIDR du serveur DTS à la liste d'autorisation de la base de données. Pour connaître les blocs CIDR à ajouter, consultez Ajouter les blocs CIDR des serveurs DTS aux paramètres de sécurité des bases de données sur site.
L'ajout des blocs CIDR du serveur DTS aux listes d'autorisation ou aux règles de groupe de sécurité expose ces endpoints au réseau. Prenez des précautions : utilisez des identifiants forts, restreignez les ports exposés, authentifiez les appels API, auditez régulièrement les entrées de la liste d'autorisation et envisagez d'utiliser Express Connect, VPN Gateway ou Smart Access Gateway pour une connectivité privée.
Une fois la tâche DTS terminée ou libérée, supprimez les blocs CIDR DTS des listes d'autorisation et des règles de groupe de sécurité. Supprimez tout groupe de liste d'autorisation d'adresse IP dont le nom contient
dtsde la liste d'autorisation de l'instance Alibaba Cloud et des règles de groupe de sécurité ECS, et supprimez les blocs CIDR DTS de la liste d'autorisation de la base de données auto-gérée.
Étape 5 : Sélectionner les objets et configurer les paramètres
Paramètres de base

| Paramètre | Description |
|---|---|
| Étapes de la tâche | Sélectionnez Schema Synchronization et Full Data Synchronization en plus de la valeur par défaut Incremental Data Synchronization. La synchronisation complète des données charge les données historiques dans la destination avant le début de la synchronisation incrémentielle. |
| Mode de traitement des tables conflictuelles | Precheck and Report Errors : fait échouer la pré-vérification si la destination contient déjà des tables portant les mêmes noms que la source. Utilisez le mappage de nom d'objet pour résoudre les conflits de nommage. Ignore Errors and Proceed : ignore la pré-vérification. Pendant la synchronisation complète, les enregistrements existants avec des clés primaires correspondantes sont conservés dans la destination. Pendant la synchronisation incrémentielle, ils sont écrasés. |
| Opérations DDL et DML à synchroniser | Sélectionnez les opérations à synchroniser. Pour connaître les opérations prises en charge, consultez Opérations prises en charge. Pour sélectionner les opérations d'une table spécifique, faites un clic droit sur la table dans Selected Objects et choisissez les opérations. |
| Mode de synchronisation incrémentielle SQL Server | Sélectionnez un mode en fonction de vos types de tables et des contraintes de la base de données source. Pour obtenir des conseils, consultez Choisir un mode de synchronisation incrémentielle. |
| Sélectionner les objets | Dans Source Objects, sélectionnez les objets à synchroniser et cliquez sur |
| Renommer les bases de données et les tables | Pour renommer un seul objet, faites un clic droit dessus dans Selected Objects. Pour renommer plusieurs objets à la fois, cliquez sur Batch Edit. Consultez Mapper les noms d'objets. |
| Filtrer les données | Spécifiez des conditions WHERE pour filtrer les lignes. Consultez Utiliser des conditions SQL pour filtrer les données. |
Advanced settings
| Paramètre | Description |
|---|---|
| Définir des alertes | Configurez l'alerting en cas d'échec de tâche ou de latence de synchronisation dépassant un seuil. Sélectionnez Yesalert notifications pour spécifier un seuil d'alerte et des contacts. Consultez Configurer la surveillance et l'alerting. |
| Durée de nouvelle tentative pour les connexions échouées | Plage de temps pendant laquelle DTS tente de nouveau une connexion échouée après le démarrage de la tâche. Plage : 10–1440 minutes. Par défaut : 720 minutes. Définissez cette valeur sur plus de 30 minutes. Si la durée de nouvelle tentative la plus courte est définie sur plusieurs tâches partageant la même base de données source ou de destination, cette valeur la plus courte est prioritaire. Remarque
Si DTS tente de nouveau une connexion, vous serez facturé pour l'instance DTS. Spécifiez la plage de temps de nouvelle tentative en fonction de vos besoins métier, ou libérez l'instance DTS rapidement après la libération des instances source et de destination. |
Étape 6 : Configurer les colonnes de clé primaire et de clé de distribution
Cliquez sur Next: Configure Database and Table Fields. Définissez les colonnes de clé primaire et les colonnes de clé de distribution pour chaque table de destination.

Étape 7 : Exécuter la pré-vérification
Cliquez sur Next: Save Task Settings and Precheck.
La tâche ne peut pas démarrer tant qu'elle n'a pas réussi la pré-vérification.
Pour tout élément ayant échoué, cliquez sur View Details , corrigez le problème et cliquez sur Precheck Again .
Pour un élément d'alerte que vous pouvez ignorer en toute sécurité, cliquez sur Confirm Alert Details à côté de l'élément, puis cliquez sur Ignore > OK > Precheck Again . Ignorer les alertes peut entraîner une incohérence des données.
Étape 8 : Attendre la fin de la pré-vérification
Attendez que le taux de réussite atteigne 100 %, puis cliquez sur Next: Purchase Instance.
Étape 9 : Acheter l'instance de synchronisation
Configurez la facturation et la classe d'instance :
| Paramètre | Description |
|---|---|
| Méthode de facturation | Subscription : paiement anticipé ; rentable pour une utilisation à long terme. Pay-as-you-go : facturation horaire ; adapté à une utilisation à court terme. Libérez l'instance lorsqu'elle n'est plus nécessaire pour éviter des frais continus. |
| Classe d'instance | Sélectionnez une classe en fonction du débit de synchronisation requis. Consultez Spécifications des instances de synchronisation de données. |
| Durée de l'abonnement | Si vous utilisez la facturation par abonnement, sélectionnez 1 à 9 mois ou 1 à 3 ans. |
Étape 10 : Accepter les conditions de service
Lisez et cochez la case pour Data Transmission Service (Pay-as-you-go) Service Terms.
Étape 11 : Démarrer la tâche
Cliquez sur Buy and Start. La tâche apparaît dans la liste des tâches. Surveillez la progression de la synchronisation à partir de là.
Étapes suivantes
Mapper les noms d'objets — renommer les objets source dans la base de données de destination
Topologies de synchronisation — configurer des topologies un-à-plusieurs ou plusieurs-à-un
Mappages de types de données pour la synchronisation de schéma — examiner le comportement de conversion des types
Présentation de la facturation — comprendre les frais de synchronisation incrémentielle