Utilisez Data Transmission Service (DTS) pour établir un pipeline de données continu et unidirectionnel, d'un cluster source PolarDB for PostgreSQL (Compatible with Oracle) vers un cluster de destination. Ce pipeline couvre la synchronisation du schéma, le chargement complet des données et la capture incrémentielle des modifications de données (CDC) via la réplication logique PostgreSQL.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un cluster de destination PolarDB for PostgreSQL (Compatible with Oracle) dont la capacité de stockage est supérieure à l'espace de stockage utilisé par le cluster source. Pour plus d'informations, consultez Créer un cluster PolarDB for PostgreSQL (Compatible with Oracle)
Une base de données créée dans le cluster de destination pour recevoir les données. Pour plus d'informations, consultez Gestion des bases de données
Le paramètre
wal_leveldéfini surlogicaldans le cluster source. Pour plus d'informations, consultez Configurer les paramètres du clusterLa fonctionnalité Logical Replication Slot Failover activée sur le cluster source
Si le Database Engine du cluster source est configuré sur Oracle syntax compatible 2.0, il ne prend pas en charge la fonctionnalité Logical Replication Slot Failover. Un basculement de haute disponibilité (HA) sur un tel cluster entraîne l'échec de l'instance de synchronisation, qui devient irrécupérable.
Facturation
| Type de synchronisation | Tarification |
|---|---|
| Synchronisation du schéma et synchronisation complète des données | Gratuit |
| Synchronisation incrémentielle des données | Payant. Pour plus d'informations, consultez Aperçu de la facturation |
Objets de synchronisation pris en charge
| Objet | Détails |
|---|---|
| SCHEMA, TABLE | Inclut PRIMARY KEY, UNIQUE KEY, FOREIGN KEY, types de données intégrés et DEFAULT CONSTRAINT |
| VIEW, PROCEDURE | Nécessite PostgreSQL version 11 ou ultérieure. La prise en charge varie selon le type de base de données de destination ; vérifiez les détails dans la console |
Opérations SQL prises en charge
| Type d'opération | Instructions |
|---|---|
| DML | INSERT, UPDATE, DELETE |
| DDL | CREATE TABLE, DROP TABLE |
| DDL | ALTER TABLE — inclut RENAME TABLE, ADD COLUMN, ADD COLUMN DEFAULT, ALTER COLUMN TYPE, DROP COLUMN, ADD CONSTRAINT, ADD CONSTRAINT CHECK, ALTER COLUMN DROP DEFAULT |
| DDL | CREATE INDEX ON TABLE |
Les instructions DDL ne sont pas synchronisées dans les scénarios suivants :
L'instruction contient CASCADE ou RESTRICT
Une transaction contient à la fois des instructions DML et DDL
Seule une partie des instructions DDL d'une transaction relève du périmètre de synchronisation
L'instruction DDL est exécutée depuis une session créée par
SET session_replication_role = replicaL'instruction DDL est exécutée via un appel FUNCTION
Aucun schéma n'est défini dans l'instruction DDL (dans ce cas, le schéma public est utilisé conformément à
SHOW search_path)L'instruction DDL contient IF NOT EXISTS
Autorisations des comptes de base de données
| Base de données | Autorisation requise | Comment créer et accorder |
|---|---|---|
| Cluster source PolarDB for PostgreSQL (Compatible with Oracle) | Compte privilégié | Créer un compte de base de données |
| Cluster de destination PolarDB for PostgreSQL (Compatible with Oracle) | Propriétaire de la base de données | Créer un compte de base de données et Gestion des bases de données. Le propriétaire de la base de données est spécifié lors de la création de la base de données |
Limitations
Examinez ces limitations avant de commencer. Certaines contraintes nécessitent des actions sur la base de données source avant de configurer DTS.
Limitations de la base de données source
Bande passante Le serveur hébergeant la base de données source doit disposer d'une bande passante sortante suffisante. Une bande passante insuffisante réduit la vitesse de synchronisation.
Tables sans clé primaire ou contrainte UNIQUE Activez la fonctionnalité d'écriture Exactly-Once lors de la configuration de la tâche. Sans cette option, des données en double peuvent apparaître dans la base de données de destination. Pour plus d'informations, consultez Synchroniser des tables sans clé primaire ni contrainte UNIQUE.
Plus de 1 000 tables avec mappage de noms Si les objets de synchronisation sont des tables avec mappage de noms de table ou de colonne appliqués, et qu'une seule tâche dépasse 1 000 tables, répartissez les tables sur plusieurs tâches ou configurez la tâche pour synchroniser la base de données entière. Le dépassement de cette limite peut provoquer une erreur de requête lors de la soumission de la tâche.
Rétention WAL Activez WAL et définissez la période de rétention en fonction des types de synchronisation de votre tâche :
Synchronisation incrémentielle uniquement : conservez les journaux WAL pendant plus de 24 heures
Synchronisation complète et incrémentielle : conservez les journaux WAL pendant au moins 7 jours. Une fois la synchronisation complète terminée, vous pouvez définir la période de rétention sur plus de 24 heures
Si DTS ne parvient pas à obtenir les journaux WAL, la tâche échoue. Dans les cas extrêmes, cela peut entraîner une incohérence ou une perte de données. Les problèmes causés par une période de rétention WAL inférieure aux exigences de DTS ne sont pas couverts par l'accord de niveau de service (SLA).
Transactions de longue durée Les transactions de longue durée entraînent une accumulation de WAL jusqu'à leur validation. Cela peut épuiser l'espace disque de la base de données source lors de la synchronisation incrémentielle.
Opérations DDL pendant la synchronisation N'effectuez pas d'opérations DDL modifiant la structure de la base de données ou des tables pendant la synchronisation du schéma ou la synchronisation complète des données. Cela entraînerait l'échec de la tâche.
Écritures pendant une synchronisation complète uniquement N'écrivez pas de nouvelles données dans le cluster source si la tâche exécute uniquement la synchronisation complète des données. Cela entraînerait une incohérence des données. Pour maintenir une cohérence en temps réel, incluez la synchronisation du schéma, la synchronisation complète des données et la synchronisation incrémentielle des données dans la tâche.
Donnée incrémentielle unique supérieure à 256 Mo Si une seule donnée dépasse 256 Mo après une modification incrémentielle, l'instance de synchronisation peut échouer et devenir irrécupérable. Reconfigurez l'instance de synchronisation.
Autres limitations
Une base de données par tâche Une seule tâche de synchronisation ne peut synchroniser qu'une seule base de données. Configurez une tâche distincte pour chaque base de données supplémentaire.
Objets non pris en charge DTS ne prend pas en charge les tables d'extension TimescaleDB, les tables avec héritage inter-schémas ou les tables avec des index uniques basés sur des expressions. Les schémas créés par l'installation de plugins ne peuvent pas être synchronisés et n'apparaissent pas dans la console lors de la configuration de la tâche.
Champs de type SERIAL Si une table contient un champ de type de données SERIAL, la base de données source crée automatiquement une séquence pour ce champ. Lors de la configuration des Source Objects, si vous sélectionnez Schema Synchronization comme type de synchronisation, sélectionnez également Sequence ou synchronisez le schéma entier. Sinon, l'instance de synchronisation peut échouer.
Exigence REPLICA IDENTITY FULL Exécutez la commande suivante sur chaque table à synchroniser dans la base de données source avant d'y écrire des données. Cela garantit la cohérence des données. Ne verrouillez pas les tables lors de l'exécution de cette commande pour éviter les interblocages.
ALTER TABLE schema.table REPLICA IDENTITY FULL;
Remplacez schema et table par le nom réel du schéma et le nom de la table. Exécutez cette commande pendant les heures creuses.
Cette commande est requise dans les scénarios suivants :
Lors de la première exécution de l'instance
Vous avez sélectionné la granularité au niveau du schéma pour la sélection d'objets, et une nouvelle table est créée dans le schéma ou une table existante est reconstruite à l'aide de la commande RENAME
Vous utilisez la fonctionnalité de modification des objets de synchronisation
Si vous ignorez les éléments de précontrôle associés, DTS exécute automatiquement cette commande lors de l'initialisation de l'instance.
Tables temporaires dans la base de données source DTS crée les tables temporaires suivantes dans la base de données source pour obtenir les instructions DDL, les structures de tables incrémentielles et les informations de pulsation. Ne supprimez pas ces tables pendant la synchronisation, car cela rendrait la tâche anormale. DTS supprime automatiquement ces tables après la libération de l'instance :
public.dts_pg_class, public.dts_pg_attribute, public.dts_pg_type, public.dts_pg_enum, public.dts_postgres_heartbeat, public.dts_ddl_command, public.dts_args_session, public.aliyun_dts_instance
Table de pulsation DTS ajoute une table de pulsation nommée dts_postgres_heartbeat à la base de données source pour maintenir des métriques précises de latence de synchronisation incrémentielle.
Slot de réplication DTS crée un slot de réplication avec le préfixe dts_sync_ dans la base de données source. Ce slot conserve les journaux incrémentiels des 15 dernières minutes. Lorsque la tâche de synchronisation échoue ou que l'instance est libérée, DTS tente de supprimer automatiquement le slot.
Si vous modifiez le mot de passe du compte de la base de données source ou retirez l'adresse IP de DTS de la liste d'autorisation de la base de données source pendant la synchronisation, le slot de réplication ne peut pas être supprimé automatiquement. Supprimez manuellement le slot de réplication dans la base de données source pour éviter l'accumulation d'espace disque, ce qui pourrait rendre la base de données source indisponible. En cas de basculement dans la base de données source, connectez-vous à la base de données secondaire pour supprimer manuellement le slot.

Séquences après le basculement métier Après avoir basculé votre activité vers l'instance de destination, les séquences ne continuent pas à partir de la valeur maximale de la source. Mettez à jour la valeur de la séquence dans la base de données de destination avant le basculement métier. Pour plus d'informations, consultez Mettre à jour la valeur de la séquence dans la base de données de destination.
Impact sur les performances de la synchronisation complète La synchronisation complète des données exécute des opérations INSERT concurrentes, ce qui consomme des ressources de lecture et d'écriture sur les bases de données source et de destination et provoque une fragmentation des tables dans la destination. L'espace table de destination sera plus grand que celui de la source après la synchronisation complète. Évaluez les performances avant la synchronisation et exécutez-la pendant les heures creuses lorsque la charge CPU des deux bases de données est inférieure à 30 %.
Précision FLOAT et DOUBLE DTS lit les valeurs FLOAT et DOUBLE en utilisant ROUND(COLUMN, PRECISION). Si aucune précision explicite n'est définie, DTS utilise une précision par défaut de 38 pour FLOAT et 308 pour DOUBLE. Vérifiez que cette précision répond aux exigences de votre activité.
Récupération automatique DTS DTS tente de récupérer automatiquement les tâches échouées pendant sept jours maximum. Avant de basculer votre activité vers l'instance de destination, terminez ou libérez la tâche, ou utilisez la commande REVOKE pour révoquer les autorisations d'écriture du compte DTS sur l'instance de destination. Sans cette étape, la récupération automatique peut entraîner l'écrasement des données de destination par les données source après le basculement.
Clés étrangères, déclencheurs et déclencheurs d'événements Pour les tâches de synchronisation complète ou incrémentielle impliquant des tables avec des clés étrangères, des déclencheurs ou des déclencheurs d'événements, DTS définit temporairement session_replication_role sur replica au niveau de la session :
Si le compte de la base de données de destination est un compte privilégié ou dispose d'autorisations superutilisateur, DTS le définit automatiquement
Si le compte de destination ne dispose pas de ces autorisations, définissez manuellement
session_replication_rolesurreplicadans la base de données de destination avant l'exécution de la tâche
Pendant cette période, les opérations de mise à jour ou de suppression en cascade dans la base de données source peuvent provoquer une incohérence des données. Une fois la tâche DTS libérée, rétablissez session_replication_role sur origin.
Synchronisation du schéma et clés étrangères Pendant la synchronisation du 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 les vérifications de contraintes et les opérations en cascade de clés étrangères au niveau de la session. Une incohérence des données peut survenir si des opérations de mise à jour ou de suppression en cascade s'exécutent sur la source pendant que la tâche est active.
Récupération en cas d'échec de la tâche En cas d'échec d'une tâche, l'équipe d'assistance DTS tentera de la restaurer dans un délai de huit heures. Lors de la restauration, elle peut redémarrer la tâche ou ajuster les paramètres de la tâche DTS (et non les paramètres de la base de données). Les paramètres susceptibles d'être ajustés sont répertoriés dans Modifier les paramètres de l'instance.
Tables partitionnées Incluez à la fois la table parente et toutes ses partitions enfants comme objets de synchronisation. Les tables partitionnées PostgreSQL stockent les données uniquement dans les partitions enfants, pas dans la table parente. Si les partitions enfants sont exclues, leurs données ne sont pas synchronisées, ce qui entraîne une incohérence des données.
Configurer une tâche de synchronisation unidirectionnelle
Étape 1 : Accéder à la liste des tâches de synchronisation des données
Accédez à la liste des tâches de synchronisation pour votre région cible en utilisant l'une des consoles suivantes.
Console DTS
Connectez-vous à la console DTS.Console 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.
Console DMS
Les étapes réelles peuvent varier en fonction du mode et de la disposition de la console DMS. Pour plus d'informations, consultez
et
Personnaliser la disposition et le style de la console DMS
.
Connectez-vous à la console DMS.Console DMS
Dans la barre de menus supérieure, choisissez Data + AI > DTS (DTS) > Data Synchronization.
À droite de Data Synchronization Tasks, sélectionnez la région de l'instance de synchronisation.
Étape 2 : Créer une tâche et configurer les connexions à la base de données
Cliquez sur Create Task.
Configurez les bases de données source et de destination en utilisant les paramètres suivants.
Paramètres de la tâche
| Paramètre | Description |
|---|---|
| Task Name | DTS génère automatiquement un nom. Spécifiez un nom descriptif pour une identification facile. Le nom n'a pas besoin d'être unique |
Base de données source
| Paramètre | Description |
|---|---|
| Select Existing Connection | Sélectionnez une instance de base de données enregistrée dans la liste déroulante pour remplir automatiquement les détails de connexion. Si vous n'avez pas enregistré l'instance, configurez manuellement les champs ci-dessous. Dans la console DMS, ce champ est intitulé Select a DMS database instance |
| Database Type | Sélectionnez PolarDB (Compatible with Oracle) |
| Access Method | Sélectionnez Alibaba Cloud Instance |
| Instance Region | Sélectionnez la région où réside le cluster source |
| Replicate Data Across Alibaba Cloud Accounts | Sélectionnez No si le cluster source appartient au compte Alibaba Cloud actuel |
| Instance ID | Sélectionnez l'ID du cluster source |
| Database Name | Saisissez le nom de la base de données source contenant les objets à synchroniser |
| Database Account | Saisissez le compte de base de données. Pour les exigences en matière d'autorisations, consultez Autorisations des comptes de base de données |
| Database Password | Saisissez le mot de passe du compte de base de données |
Base de données de destination
| Paramètre | Description |
|---|---|
| Select Existing Connection | Sélectionnez une instance de base de données enregistrée dans la liste déroulante. Si vous n'avez pas enregistré l'instance, configurez manuellement les champs ci-dessous. Dans la console DMS, ce champ est intitulé Select a DMS database instance |
| Database Type | Sélectionnez PolarDB (Compatible with Oracle) |
| Access Method | Sélectionnez Alibaba Cloud Instance |
| Instance Region | Sélectionnez la région où réside le cluster de destination |
| Instance ID | Sélectionnez l'ID du cluster de destination |
| Database Name | Saisissez le nom de la base de données de destination qui recevra les données |
| Database Account | Saisissez le compte de base de données. Pour les exigences en matière d'autorisations, consultez Autorisations des comptes de base de données |
| Database Password | Saisissez le mot de passe du compte de base de données |
Cliquez sur Test Connectivity and Proceed.
Ajoutez les blocs CIDR des serveurs DTS aux paramètres de sécurité des bases de données source et de destination, soit automatiquement, soit manuellement, pour autoriser l'accès. Pour plus d'informations, consultez Ajouter la liste d'autorisation IP des serveurs DTS .
Si la source ou la destination est une base de données gérée par l'utilisateur (c'est-à-dire que Access Method n'est pas Alibaba Cloud Instance ), cliquez également sur Test Connectivity dans la boîte de dialogue CIDR Blocks of DTS Servers .
Étape 3 : Configurer les objets de synchronisation
Sur la page Configure Objects, configurez les paramètres suivants.
| Paramètre | Description |
|---|---|
| Synchronization Types | DTS sélectionne toujours Incremental Data Synchronization. Par défaut, sélectionnez également Schema Synchronization et Full Data Synchronization. Une fois le précontrôle réussi, DTS initialise le cluster de destination avec les données complètes des objets source sélectionnés comme référence pour la synchronisation incrémentielle |
| Synchronization Topology | Sélectionnez One-way Synchronization |
| Processing Mode of Conflicting Tables | Precheck and Report Errors (par défaut) : vérifie la présence de tables portant les mêmes noms dans la base de données de destination. Si des conflits sont détectés, une erreur est signalée lors du précontrôle et la tâche ne démarre pas. Pour résoudre le conflit sans supprimer ni renommer la table, mappez-la vers un nom différent dans la destination. Pour plus d'informations, consultez Mappage des noms de colonnes de tables de base de données. Ignore Errors and Proceed : ignore la vérification des noms identiques. Utilisez cette option avec prudence ; sa sélection peut entraîner une incohérence des données : lors de la synchronisation complète, DTS conserve l'enregistrement de destination et ignore l'enregistrement source en cas de conflit de valeurs de clé primaire ou unique ; lors de la synchronisation incrémentielle, DTS écrase l'enregistrement de destination avec l'enregistrement source. Si les schémas de table sont incohérents, l'initialisation des données peut échouer. Cela peut entraîner une synchronisation partielle des données ou un échec complet de la synchronisation. Utilisez avec prudence |
| Capitalization of Object Names in Destination Instance | Configure la politique de casse pour les noms de bases de données, de tables et de colonnes dans la destination. La valeur par défaut est DTS default policy. Pour plus d'informations, consultez Politique de casse pour les noms d'objets de destination |
| Source Objects | Dans la zone Source Objects, cliquez sur les objets pour les sélectionner, puis cliquez sur |
| Selected Objects | Pour renommer un seul objet dans la destination, faites un clic droit dessus dans la zone Selected Objects. Pour plus d'informations, consultez Mapper le nom d'un seul objet. Pour renommer plusieurs objets, cliquez sur Batch Edit dans le coin supérieur droit de la zone. Pour plus d'informations, consultez Mapper plusieurs noms d'objets en masse. Pour sélectionner des opérations SQL spécifiques pour une base de données ou une table, faites un clic droit sur l'objet et sélectionnez les opérations dans la boîte de dialogue. Pour les opérations prises en charge, consultez Opérations SQL prises en charge. Pour filtrer les données à l'aide d'une clause WHERE, faites un clic droit sur une table et spécifiez les conditions de filtrage. Pour plus d'informations, consultez Définir les conditions de filtrage. Si vous utilisez le mappage de noms d'objets, les objets dépendants peuvent ne pas être synchronisés |
Cliquez sur Next: Advanced Settings et configurez les options suivantes.
| Paramètre | Description |
|---|---|
| Dedicated Cluster for Task Scheduling | Par défaut, DTS utilise un cluster partagé. Pour une stabilité accrue, achetez un cluster dédié. Pour plus d'informations, consultez Qu'est-ce qu'un cluster dédié DTS ? |
| Retry Time for Failed Connections | Si la connexion à la base de données source ou de destination échoue après le démarrage de la tâche, DTS commence immédiatement à réessayer. La durée de nouvelle tentative par défaut est de 720 minutes. Définissez une valeur comprise entre 10 et 1 440 minutes ; 30 minutes ou plus sont recommandées. Si la connexion est rétablie dans ce délai, la tâche reprend automatiquement. Remarque
Si plusieurs instances DTS partagent une source ou une destination, DTS utilise la durée de nouvelle tentative la plus courte configurée parmi toutes les instances. DTS facture le temps d'exécution de la tâche pendant les nouvelles tentatives de connexion |
| Retry Time for Other Issues | Si un problème autre qu'une connexion survient (tel qu'une erreur d'exécution DDL ou DML), DTS réessaie immédiatement. La valeur par défaut est de 10 minutes. Définissez une valeur comprise entre 1 et 1 440 minutes ; 10 minutes ou plus sont recommandées. Cette valeur doit être inférieure à Retry Time for Failed Connections |
| Enable Throttling for Full Data Synchronization | Limite le taux de synchronisation complète pour réduire la pression sur la base de données de destination. Définissez Queries per second (QPS) to the source database, RPS of Full Data Migration et Data migration speed for full migration (MB/s). Disponible uniquement si Full Data Synchronization est sélectionné. Vous pouvez également ajuster ce taux pendant que l'instance est en cours d'exécution |
| Enable Throttling for Incremental Data Synchronization | Limite le taux de synchronisation incrémentielle. Définissez RPS of Incremental Data Synchronization et Data synchronization speed for incremental synchronization (MB/s) |
| Environment Tag | Sélectionnez une balise d'environnement pour identifier l'instance. Aucune sélection n'est requise pour cette tâche |
| Configure ETL | Choisissez d'activer ou non la fonctionnalité extract, transform, and load (ETL). Sélectionnez Yesalert notifications et saisissez les instructions de traitement des données dans l'éditeur de code, ou sélectionnez No pour la désactiver. Pour plus d'informations, consultez Qu'est-ce que l'ETL ? et Configurer l'ETL dans une tâche de migration ou de synchronisation de données |
| Monitoring and Alerting | Sélectionnez Yes pour recevoir des notifications en cas d'échec de la synchronisation ou si la latence dépasse le seuil. Définissez le seuil d'alerte et les contacts. Pour plus d'informations, consultez Configurer la surveillance et les alertes lors de la configuration de la tâche. Sélectionnez No pour ignorer les alertes |
Cliquez sur Next: Data Validation pour configurer une tâche de validation des données. Pour plus d'informations, consultez Configurer la validation des données.
Étape 4 : Enregistrer les paramètres et exécuter le précontrôle
Pour afficher un aperçu des paramètres API de cette tâche, placez le curseur sur Next: Save Task Settings and Precheck et cliquez sur Preview OpenAPI parameters dans l'infobulle.
Cliquez sur Next: Save Task Settings and Precheck pour enregistrer et démarrer le précontrôle.
DTS effectue un précontrôle avant le démarrage de la tâche. La tâche ne démarre qu'après la réussite du précontrôle.
Si le précontrôle échoue, cliquez sur View Details à côté de l'élément ayant échoué, corrigez le problème comme indiqué, puis relancez le précontrôle.
Si le précontrôle génère des avertissements :
Pour les avertissements non ignorables, cliquez sur View Details , corrigez le problème, puis relancez le précontrôle.
Pour les avertissements ignorables, cliquez sur Confirm Alert Details > Ignore > OK , puis cliquez sur Precheck Again . Ignorer les avertissements de précontrôle peut entraîner des incohérences de données. Procédez avec prudence.
Étape 5 : Acheter l'instance
Lorsque le Success Rate atteint 100 %, cliquez sur Next: Purchase Instance.
Sur la page Purchase, sélectionnez la méthode de facturation et la classe d'instance.
| Paramètre | Description |
|---|---|
| Billing Method | Subscription : payez à l'avance pour une durée fixe. Rentable pour les tâches continues à long terme. Pay-as-you-go : facturé à l'heure en fonction de l'utilisation réelle. Adapté aux tâches de courte durée ou de test ; libérez l'instance à tout moment pour arrêter la facturation |
| Resource Group Settings | Le groupe de ressources pour l'instance. La valeur par défaut est default resource group. Pour plus d'informations, consultez Qu'est-ce que Resource Management ? |
| Instance Class | Détermine le niveau de performance de synchronisation. Sélectionnez une classe en fonction de vos exigences de débit. Pour plus d'informations, consultez Spécifications des canaux de synchronisation de données |
| Subscription Duration | (Facturation par abonnement uniquement) Options mensuelles : 1 à 9 mois. Options annuelles : 1, 2, 3 ou 5 ans |
Cochez la case Data Transmission Service (Pay-as-you-go) Service Terms.
Cliquez sur Buy and Start, puis cliquez sur OK dans la boîte de dialogue de confirmation.
Surveillez la progression de la tâche sur la page de synchronisation des données.