Réplication des partages entre les régions et les plateformes Cloud¶
Lorsqu’ils partagent des données dans Snowflake Marketplace ou Data Exchange, les fournisseurs reçoivent des demandes de régions distantes. Cette rubrique fournit des instructions sur la manière d’utiliser la réplication de compte pour répliquer les partages de données entre les régions et les plates-formes Cloud.
La réplication de comptes permet la réplication d’objets d’un compte source vers un ou plusieurs comptes cible dans la même organisation. Les objets répliqués dans chaque compte cible sont appelés objets secondaires et sont des répliques des objets principaux du compte source.
Important
Si vous répliquez une base de données vers une région géographique différente ou un pays différent de la région/du pays dans laquelle ou lequel se trouve votre compte Snowflake source, vous devez confirmer que votre entreprise n’est soumise à aucune restriction légale ou réglementaire en ce qui concerne l’emplacement où vos données peuvent être transférées ou hébergées.
Dans ce chapitre :
Transition de la réplication de base de données à la réplication par groupe
Groupe de réplication¶
Un groupe de réplication est une collection définie d’objets dans un compte source qui sont répliqués comme une unité vers un ou plusieurs comptes cibles. Les groupes de réplication fournissent un accès en lecture seule pour les objets répliqués. Les groupes de réplication assurent la cohérence ponctuelle des objets (par exemple, les bases de données et les partages) de la collection.
Un fournisseur crée un groupe de réplication principal dans un compte source et active la réplication vers des comptes cibles pour les consommateurs. Pour les partages standards, les fournisseurs de données n’ont besoin que de créer une copie du partage par région ; et non une copie par consommateur.
Note
Cette rubrique est une sous-section des fonctionnalités disponibles avec la réplication de compte. La réplication de comptes permet la réplication de bases de données et de partages, en plus de la réplication et du basculement d’objets de comptes.
Objets répliqués¶
Réplication de base de données¶
Cette fonction prend en charge la réplication des bases de données. Un instantané inclut les modifications apportées aux objets et aux données. L’actualisation d’une base de données secondaire synchronise les accords de privilèges sur la base de données et les objets de la base de données (schémas, tables, vues, etc.). Les privilèges accordés aux rôles sur ces objets sont synchronisés du compte source vers un compte cible. Notez que seuls les accords de privilèges sur les objets pris en charge par la réplication de la base de données sont synchronisés. Pour obtenir la liste des objets, voir Objets de base de données répliqués.
Les octrois futurs sur les objets de base de données pris en charge et non pris en charge sont synchronisés au niveau de la base de données et du schéma. Après qu’une base de données secondaire a été promue pour devenir la base de données principale d’un ensemble, la création d’objets d’un type spécifique accorde automatiquement des privilèges à des rôles, tels que définis par les futurs accords de privilèges. Pour plus d’informations sur les futures autorisations, voir Simplifier la gestion des autorisations à l’aide des autorisations futures.
Réplication de partages¶
Cette fonctionnalité prend en charge la réplication d’objets de partage ainsi que des privilèges d’accès accordés à des partages sur des objets de base de données.
Utilisateur qui actualise les objets dans un compte cible¶
Un utilisateur qui exécute la commande ALTER REPLICATION GROUP … REFRESH pour actualiser des objets dans un compte cible à partir du compte source doit utiliser un rôle avec le privilège REPLICATE sur le groupe de réplication. Snowflake protège cet utilisateur dans le compte cible en échouant dans les scénarios suivants :
Si l’utilisateur n’existe pas dans le compte source, l’opération d’actualisation échoue.
Si l’utilisateur existe dans le compte source, mais qu’un rôle avec le privilège REPLICATE n’a pas été accordé à l’utilisateur, l’opération d’actualisation échoue.
Privilèges de réplication¶
Voir Privilèges de réplication pour la liste des privilèges de réplication qui peuvent être accordés à des rôles pour spécifier les opérations que les utilisateurs peuvent effectuer sur les objets du système.
Planification de réplication¶
En tant que meilleure pratique, Snowflake recommande de programmer des actualisations automatiques en utilisant le paramètre REPLICATION_SCHEDULE. La planification peut être définie lors de la création d’un nouveau groupe de réplication avec CREATE REPLICATION GROUP ou plus tard (en utilisant ALTER REPLICATION GROUP).
Lorsqu’un groupe de réplication secondaire est créé, une actualisation initiale est automatiquement exécutée. L’actualisation suivante est planifiée en fonction de la date de début de l’actualisation précédente et de l’intervalle de planification, ou de la prochaine heure valide en fonction de l’expression cron. Par exemple, si l’intervalle de planification de l’actualisation est de 10 minutes et que l’opération d’actualisation précédente (qu’il s’agisse d’une actualisation planifiée ou d’une actualisation déclenchée manuellement) commence à 12:01, la prochaine actualisation est prévue pour 12:11.
Snowflake garantit qu’une seule actualisation est exécutée à un moment donné. Si une actualisation est toujours en cours d’exécution lorsque l’actualisation suivante est planifiée, cette dernière est retardée pour démarrer lorsque l’actualisation en cours d’exécution se termine. Par exemple, si une actualisation est planifiée pour s’exécuter 15 minutes après l’heure, toutes les heures, et que l’actualisation précédente se termine à 12:16, l’actualisation suivante est planifiée pour s’exécuter lorsque l’actualisation précédente est terminée.
Contraintes du groupe de réplication¶
Les bases de données et les partages sont limités dans l’appartenance à un groupe de réplication, et doivent être répliqués de manière unique sur les comptes cibles.
Les contraintes suivantes s’appliquent aux objets de base de données et de partage :
Un objet peut faire partie de plusieurs groupes de réplication, à condition que chaque groupe soit répliqué vers un compte cible différent.
Les objets secondaires (réplicas) ne peuvent pas être ajoutés à un groupe de réplication principal.
Transition de la réplication de base de données à la réplication par groupe¶
Si vous avez précédemment activé la réplication de base de données pour une base de données en suivant les instructions de Partage sécurisé des données entre les régions et les plateformes Cloud, vous devez désactiver la réplication de base de données avant d’ajouter la base de données à un groupe de réplication.
Note
Exécutez les instructions SQL de cette section en utilisant le rôle ACCOUNTADMIN.
Étape 1. Désactiver la réplication pour une base de données pour laquelle la réplication a été autorisée¶
Utilisez la fonction SYSTEM$DISABLE_DATABASE_REPLICATION pour désactiver la réplication de base de données pour une base de données principale, ainsi que de toutes les bases de données secondaires qui lui sont liées, avant de l’ajouter à un groupe de réplication
Exécutez l’instruction SQL suivante depuis le compte source avec la base de données principale :
SELECT SYSTEM$DISABLE_DATABASE_REPLICATION('mydb');
Étape 2. Ajouter des bases de données et des partages à un groupe de réplication principal et créer un groupe de réplication secondaire¶
Une fois que vous avez réussi à désactiver la réplication des bases de données, vous pouvez maintenant ajouter les bases de données principales et les partages principaux à un groupe de réplication dans le compte source.
Créez ensuite un groupe de réplication secondaire dans chaque compte cible. Lorsque le groupe de réplication secondaire est actualisé dans chaque compte cible, toutes les bases de données précédemment secondaires seront automatiquement ajoutées en tant que membres du groupe de réplication secondaire et actualisées avec les modifications de l’objet principal.
Voir les Workflow ci-dessous pour créer des groupes de réplication principaux et secondaires, et pour planifier l’actualisation automatique d’objets dans les comptes cibles.
Note
Lorsque vous ajoutez une base de données précédemment répliquée à un groupe de réplication, Snowflake ne réplique pas à nouveau les données qui ont déjà été répliquées pour cette base de données. Seules les modifications depuis la dernière actualisation sont répliquées lorsque le groupe est actualisé.
Workflow¶
Les instructions SQL suivantes démontrent le flux de travail pour activer la réplication de la base de données et du partage et actualiser les objets. Chaque étape est examinée en détail ci-dessous.
Exemple¶
Exécutez les instructions SQL suivantes dans votre client Snowflake préféré pour activer la réplication des bases de données et des partages, et actualiser les objets selon une planification.
Exécuter à partir du compte source¶
Créez un rôle et accordez-lui le privilège CREATE REPLICATION GROUP. Cette étape est facultative :
-- Execute the following SQL statements using the ACCOUNTADMIN role: USE ROLE ACCOUNTADMIN; CREATE ROLE myrole; GRANT CREATE REPLICATION GROUP ON ACCOUNT TO ROLE myrole;
CopyCréez un groupe de réplication dans le compte source et activez la réplication vers des comptes cibles spécifiques :
Note
Si vous avez des bases de données à ajouter à un groupe de réplication pour lesquelles la réplication a été activée, suivez les instructions Transition de la réplication de base de données à la réplication par groupe (dans cette rubrique) pour convertir les objets afin qu’ils soient compatibles avec le groupe de réplication avant de les ajouter à un groupe.
Pour ajouter une base de données à un groupe de réplication, le rôle actif doit disposer du privilège MONITOR sur la base de données. Pour plus de détails sur les privilèges de la base de données, voir Privilèges de base de données (dans une rubrique distincte).
Pour ajouter un partage à un groupe de réplication, le rôle actif doit avoir le privilège OWNERSHIP sur le partage.
USE ROLE myrole; -- Execute the following SQL statement using a role with the CREATE REPLICATION GROUP privilege: CREATE REPLICATION GROUP myrg OBJECT_TYPES = DATABASES, SHARES ALLOWED_DATABASES = db1, db2 ALLOWED_SHARES = s1 ALLOWED_ACCOUNTS = myorg.myaccount2, myorg.myaccount3 REPLICATION_SCHEDULE = '10 MINUTE';
Copy
Exécuté sur le compte cible¶
Créez un rôle dans le compte cible et accordez-lui le privilège CREATE REPLICATION GROUP. Cette étape est facultative :
-- Execute the following SQL statements using the ACCOUNTADMIN role: USE ROLE ACCOUNTADMIN; CREATE ROLE myrole; GRANT CREATE REPLICATION GROUP ON ACCOUNT TO ROLE myrole;
CopyCréez un groupe de réplication dans le compte cible en tant que réplica du groupe de réplication dans le compte source :
USE ROLE myrole; -- Execute the following SQL statement using a role with the CREATE REPLICATION GROUP privilege: CREATE REPLICATION GROUP myrg AS REPLICA OF myorg.myaccount1.myrg;
Copy
Actualiser manuellement un groupe de réplication secondaire¶
En tant que meilleure pratique, Snowflake recommande de programmer des actualisations automatiques en utilisant le paramètre REPLICATION_SCHEDULE. Pour plus de détails, voir Planification de réplication (dans ce chapitre). Pour actualiser manuellement tous les objets d’un groupe de réplication secondaire, exécutez les instructions SQL suivantes à partir du compte cible :
Pour actualiser manuellement les objets d’un compte cible, exécutez la commande ALTER REPLICATION GROUP … REFRESH.
Note
Si l’utilisateur qui appelle la fonction dans le compte cible a été détruit dans le compte source, l’opération d’actualisation échoue.
Accordez le privilège REPLICATE sur le groupe de réplication au rôle — Facultatif¶
Le privilège REPLICATE est actuellement non répliqué et doit être accordé à un groupe de réplication dans les comptes source et cible.
Exécution depuis le compte source :
-- Execute the following SQL statements using a role with the OWNERSHIP privilege on the group: GRANT REPLICATE ON REPLICATION GROUP myrg TO ROLE my_replication_role;CopyExécution depuis le compte cible :
-- Execute the following SQL statements using a role with the OWNERSHIP privilege on the group: GRANT REPLICATE ON REPLICATION GROUP myrg TO ROLE my_replication_role;Copy
Actualiser manuellement un groupe de réplication secondaire¶
Par exemple, pour actualiser les objets du groupe de réplication myrg
, exécutez l’instruction suivante à partir du compte cible :
USE ROLE my_replication_role; -- Execute the following SQL statements using a role with the REPLICATE privilege: ALTER REPLICATION GROUP myrg REFRESH;Copy
Réplication des bases de données et des partages¶
Conditions préalables¶
Activer la réplication sur vos comptes¶
Un utilisateur ayant le rôle ORGADMIN doit activer la réplication pour au moins deux comptes dans votre organisation. Pour obtenir des instructions, voir Prérequis : activer la réplication des comptes dans l’organisation.
Note
Avant de configurer la réplication de données, vous devez avoir un compte existant ou en créer un dans la région où vous souhaitez partager des données et le lier à votre compte local. Pour plus d’informations sur la création de comptes, voir Création d’un compte.
Créer un partage dans votre compte source¶
Si vous avez déjà créé un partage dans votre compte source (local), vous pouvez ignorer cette étape.
Pour créer un nouveau partage :
Connectez-vous à l”Classic Console Snowflake en tant qu’utilisateur avec le rôle ACCOUNTADMIN.
Créez un partage et ajoutez des objets au partage. Pour obtenir des instructions, voir Premiers pas avec Secure Data Sharing.
Étape 1 : Créer un rôle avec le privilège CREATE REPLICATION GROUP dans le compte source — Facultatif¶
Créez un rôle et accordez-lui le privilège CREATE REPLICATION GROUP. Cette étape est facultative. Si vous avez déjà créé ce rôle, passez à Étape 2 : Créer un groupe de réplication principal dans un compte source.
-- Execute the following SQL statements using the ACCOUNTADMIN role:
USE ROLE ACCOUNTADMIN;
CREATE ROLE myrole;
GRANT CREATE REPLICATION GROUP ON ACCOUNT
TO ROLE myrole;
Étape 2 : Créer un groupe de réplication principal dans un compte source¶
Créez un groupe de réplication principal et activez la réplication des bases de données et des partages spécifiés à partir du compte actuel (source) vers un ou plusieurs comptes cibles dans la même organisation.
Voir tous les comptes pour lesquels la réplication est activée¶
Pour récupérer la liste des comptes de votre organisation pour lesquels la réplication est activée, utilisez SHOW REPLICATION ACCOUNTS.
SHOW REPLICATION ACCOUNTS;
+------------------------+-------------------------+--------------+-----------------+-----------------+-------------------+
| snowflake_region | created_on | account_name | account_locator | comment | organization_name |
+------------------------+-------------------------+--------------+-----------------+-----------------+-------------------+
| AWS_US_WEST_2 | 2020-07-15 21:59:25.455 | myaccount1 | myacctlocator1 | | myorg |
+------------------------+-------------------------+--------------+-----------------+-----------------+-------------------+
| AWS_US_EAST_1 | 2020-07-23 14:12:23.573 | myaccount2 | myacctlocator2 | | myorg |
+------------------------+-------------------------+--------------+-----------------+-----------------+-------------------+
| AWS_US_EAST_2 | 2020-07-25 19:25:04.412 | myaccount3 | myacctlocator3 | | myorg |
+------------------------+-------------------------+--------------+-----------------+-----------------+-------------------+
Afficher l’appartenance à un groupe de réplication¶
Les objets de base de données et de partage ont des contraintes de groupe de réplication sur l’adhésion. Avant de créer de nouveaux groupes ou d’ajouter des objets à des groupes existants, vous pouvez consulter la liste des groupes de réplication existants et des objets de chaque groupe.
Note
Seuls un administrateur de compte (utilisateur avec le rôle ACCOUNTADMIN) ou le propriétaire du groupe (rôle avec le privilège OWNERSHIP sur le groupe) peuvent exécuter les instructions SQL de cette section.
Visualisez tous les groupes de réplication liés au compte actuel, ainsi que les types d’objets dans chaque groupe :
SHOW REPLICATION GROUPS;Copy
Visualisez toutes les bases de données du groupe de réplication myrg
:
SHOW DATABASES IN REPLICATION GROUP myrg;Copy
Visualisez tous les partages du groupe de réplication myrg
:
SHOW SHARES IN REPLICATION GROUP myrg;Copy
Activer la réplication des bases de données et des partages d’un compte source vers un compte cible¶
Créez un groupe de réplication des bases de données et des partages spécifiés dans le compte source et activez la réplication vers une liste de comptes cibles. Pour plus d’informations sur la syntaxe, voir CREATE REPLICATION GROUP.
Par exemple, activez la réplication des bases de données db1
et db2
, et partagez s1
du compte source vers le compte myaccount2
dans la même organisation.
Exécution sur le compte source :
USE ROLE myrole;
-- Execute the following SQL statement using a role with the CREATE REPLICATION GROUP privilege:
CREATE REPLICATION GROUP myrg
OBJECT_TYPES = databases, shares
ALLOWED_DATABASES = db1, db2
ALLOWED_SHARES = s1
ALLOWED_ACCOUNTS = myorg.myaccount2;
Étape 3 : Créer un rôle avec le privilège CREATE REPLICATION GROUP dans le compte cible — Facultatif¶
Créez un rôle dans le compte cible et accordez-lui le privilège CREATE REPLICATION GROUP. Cette étape est facultative. Si vous avez déjà créé ce rôle, passez à l’étape 4 : Créer un groupe de réplication secondaire dans le compte cible.
-- Execute the following SQL statements using the ACCOUNTADMIN role:
USE ROLE ACCOUNTADMIN;
CREATE ROLE myrole;
GRANT CREATE REPLICATION GROUP ON ACCOUNT
TO ROLE myrole;
Étape 4 : Créer un groupe de réplication secondaire dans le compte cible¶
Créez un groupe de réplication secondaire dans le compte cible en tant que réplica du groupe de réplication principal dans le compte source.
Exécutez une instruction CREATE REPLICATION GROUP … AS REPLICA OF dans chaque compte cible pour lequel vous avez activé la réplication dans Étape 2 : Créer un groupe de réplication principal dans un compte source (dans cette rubrique).
Exécution à partir de chaque compte cible :
USE ROLE myrole;
-- Execute the following SQL statement using a role with the CREATE REPLICATION GROUP privilege:
CREATE REPLICATION GROUP myrg
AS REPLICA OF myorg.myaccount1.myrg;
Actualiser manuellement un groupe de réplication secondaire¶
Actualisez manuellement un groupe de réplication secondaire dans le compte cible. Cette opération actualise tous les objets du groupe de réplication.
Note
En tant que meilleure pratique, Snowflake recommande de programmer des actualisations automatiques en utilisant le paramètre REPLICATION_SCHEDULE. Voir Planification de réplication (dans cette rubrique).
Actualisez un groupe de réplication secondaire.
Par exemple, pour actualiser les objets du groupe de réplication
myrg
, exécutez l’instruction suivante à partir du compte cible :-- Only a user with the ACCOUNTADMIN role can execute the following SQL statement: ALTER REPLICATION GROUP myrg REFRESH;Copy
Visualiser les groupes de réplication¶
Pour visualiser les groupes de réplication, utilisez SHOW REPLICATION GROUPS :
Pour afficher tous les groupes de réplication principaux et secondaires associés au compte actuel, exécutez l’instruction SQL suivante :
SHOW REPLICATION GROUPS;Copy
Sortie de commande :
+------------------+-------------------------------+--------------+------+-------------+---------+------------+------------------+--------------------------------------+------------------------------------------+--------------------+-----------------+----------------------+-----------------+------------+
| snowflake_region | created_on | account_name | name | type | comment | is_primary | primary | object_types | allowed_accounts | organization_name | account_locator | replication_schedule | secondary_state | owner |
+------------------+-------------------------------+--------------+------+-------------+---------+------------+------------------+--------------------------------------+------------------------------------------+--------------------+-----------------+----------------------+-----------------+------------+
| AWS_US_EAST_1 | 2022-01-14 16:59:01.462 -0800 | MYACCOUNT2 | MYRG | REPLICATION | NULL | false | MYORG.MYACCOUNT1 | | | MYORG | MYACCTLOCATOR2 | 15 MINUTE | SUSPENDED | NULL |
| AWS_US_WEST_2 | 2022-01-14 16:56:10.497 -0800 | MYACCOUNT1 | MYRG | REPLICATION | NULL | true | MYORG.MYACCOUNT1 | DATABASES, SHARES | MYORG.MYACCOUNT2 | MYORG | MYACCTLOCATOR1 | 15 MINUTE | NULL | MYROLE |
+------------------+-------------------------------+--------------+------+-------------+---------+------------+------------------+--------------------------------------+------------------------------------------+--------------------+-----------------+----------------------+-----------------+------------+