Replicação de compartilhamentos em regiões e plataformas de nuvem

Ao compartilhar dados no Snowflake Marketplace ou no Data Exchange, os provedores recebem solicitações de regiões remotas. Este tópico fornece instruções sobre como utilizar a replicação de contas para replicar compartilhamentos de dados entre regiões e plataformas de nuvem.

A replicação de contas permite a replicação de objetos de uma conta de origem para uma ou mais contas de destino na mesma organização. Os objetos replicados em cada conta de destino são referidos como objetos secundários e são réplicas dos objetos primários na conta de origem.

Importante

Se você estiver replicando um banco de dados para uma região geográfica ou país diferente daquele em que sua conta Snowflake de origem está localizada, deve confirmar que sua organização não tem nenhuma restrição legal ou regulamentar quanto ao local onde seus dados podem ser transferidos ou hospedados.

Neste tópico:

Grupo de replicação

Um grupo de replicação é uma coleção definida de objetos em uma conta de origem que são replicados como uma unidade para uma ou mais contas de destino. Grupos de replicação fornecem acesso somente leitura para os objetos replicados. Os grupos de replicação fornecem consistência pontual para os objetos (por exemplo, bancos de dados e compartilhamentos) da coleção.

Um provedor cria um grupo primário de replicação em uma conta de origem e habilita a replicação a contas de destino para os consumidores. Para compartilhamentos padrão, os provedores de dados só precisam criar uma cópia do compartilhamento por região; e não uma cópia por consumidor.

Nota

Este tópico é uma subseção dos recursos disponíveis com a Replicação de contas. A replicação de contas permite a replicação de bancos de dados e compartilhamentos, além da replicação e failover de objetos de conta.

Objetos replicados

Replicação de banco de dados

Esse recurso oferece suporte à replicação de bancos de dados. Um instantâneo inclui alterações nos objetos e dados. A atualização de um banco de dados secundário sincroniza as concessões de privilégios sobre banco de dados e objetos no banco de dados (esquemas, tabelas, exibições etc.). Os privilégios concedidos às funções sobre esses objetos são sincronizados da conta de origem para uma conta de destino. Observe que somente as concessões de privilégios sobre objetos compatíveis com a replicação de banco de dados são sincronizadas. Para obter a lista de objetos, consulte Objetos de banco de dados replicados.

Concessões futuras sobre objetos de banco de dados com e sem suporte são sincronizadas em nível de banco de dados e esquema. Depois que um banco de dados secundário é promovido para se tornar o banco de dados primário em um conjunto, a criação de objetos de um tipo específico concede automaticamente privilégios às funções, conforme definido pelas futuras concessões. Para obter mais informações sobre concessões futuras, consulte Simplificação do gerenciamento de concessões usando concessões futuras.

Replicação de compartilhamentos

Esse recurso oferece suporte à replicação de objetos de compartilhamento, bem como privilégios de acesso concedidos a compartilhamentos sobre objetos de banco de dados.

Usuário que atualiza objetos em uma conta de destino

Um usuário que executa o comando ALTER REPLICATION GROUP … REFRESH para atualizar objetos em uma conta de destino a partir da conta de origem deve usar uma função com o privilégio REPLICATE no grupo de replicação. O Snowflake protege esse usuário na conta de destino, apresentando falha nos seguintes cenários:

  • Se o usuário não existir na conta de origem, a operação de atualização falha.

  • Se o usuário existir na conta de origem, mas uma função com o privilégio REPLICATE não foi concedida ao usuário, a operação de atualização falha.

Privilégios de replicação

Consulte Privilégios de replicação para obter a lista de privilégios de replicação que estão disponíveis para serem concedidos a funções para especificar as operações que os usuários podem realizar nos objetos do sistema.

Cronograma de replicação

Como prática recomendada, o Snowflake indica a programação de atualizações automáticas usando o parâmetro REPLICATION_SCHEDULE. O cronograma pode ser definido ao criar um novo grupo de replicação com CREATE REPLICATION GROUP ou posteriormente (usando ALTER REPLICATION GROUP).

Quando um grupo secundário de replicação é criado, uma atualização inicial é executada automaticamente. A próxima atualização é programada com base no início da atualização anterior e no intervalo de programação, ou a próxima vez válida com base na expressão cron. Por exemplo, se o intervalo de atualização é de 10 minutos e a operação anterior de atualização (seja uma atualização programada ou manualmente acionada) começa em 12:01, a próxima atualização é programada para 12:11.

O Snowflake garante que apenas uma atualização seja executada em um determinado momento. Se uma atualização ainda estiver sendo executada quando a próxima atualização estiver programada, a próxima atualização será adiada para começar quando a atualização atualmente em execução estiver concluída. Por exemplo, se uma atualização estiver programada para executar 15 minutos após a hora, a cada hora, e a atualização anterior for concluída em 12:16, a próxima atualização será programada para ser executada quando a atualização executada anteriormente for concluída.

Restrições do grupo de replicação

Os bancos de dados e compartilhamentos são restritos na inscrição de grupos de replicação, devendo ser replicados exclusivamente para contas de destino.

As seguintes restrições se aplicam ao banco de dados e aos objetos compartilhados:

  • Um objeto pode estar em vários grupos de replicação desde que cada grupo seja para uma conta de destino diferente.

  • Objetos secundários (réplicas) não podem ser adicionados a um grupo primário de replicação.

Transição da replicação de banco de dados para a replicação baseada em grupos

Se você tiver habilitado anteriormente a replicação de banco de dados para um banco de dados seguindo as instruções em Compartilhamento de dados de forma segura entre regiões e plataformas de nuvem, você deve desabilitar a replicação de banco de dados antes de adicionar o banco de dados a um grupo de replicação.

Nota

Execute as instruções SQL nesta seção usando a função ACCOUNTADMIN.

Etapa 1. Desabilitar a replicação para um banco de dados habilitado para replicação

Use a função SYSTEM$DISABLE_DATABASE_REPLICATION para desativar a replicação de bancos de dados para um banco de dados primário, juntamente com bancos de dados secundários ligados a ele, antes de adicioná-lo a um grupo de replicação.

Execute a seguinte instrução SQL a partir da conta de origem com o banco de dados primário:

SELECT SYSTEM$DISABLE_DATABASE_REPLICATION('mydb');
Copy

Etapa 2. Adicionar bancos de dados e compartilhamentos a um grupo primário de replicação e criar um grupo secundário de replicação

Uma vez que você tenha desativado com sucesso a replicação de banco de dados, você pode agora adicionar os bancos de dados primários e compartilhamentos primários a um grupo de replicação na conta de origem.

Em seguida, crie um grupo secundário de replicação em cada conta de destino. Quando o grupo secundário de replicação é atualizado em cada conta de destino, os bancos de dados secundário anteriores serão automaticamente adicionados como membros do grupo secundário de replicação e atualizado com as alterações do objeto primário.

Consulte o Fluxo de trabalho abaixo para criar grupos primário e secundário de replicação, e para programar a atualização automática de objetos nas contas de destino.

Nota

Quando você adiciona um banco de dados previamente replicado a um grupo de replicação, o Snowflake não replica os dados que já foram replicados para aquele banco de dados. Somente as alterações desde a última atualização são replicadas quando o grupo é atualizado.

Fluxo de trabalho

As seguintes instruções SQL demonstram o fluxo de trabalho para habilitar a replicação de bancos de dados e compartilhamentos, além de atualizar objetos. Cada etapa é discutida em detalhes abaixo.

Exemplo

Execute as seguintes instruções SQL em seu cliente Snowflake preferido para habilitar a replicação de bancos de dados e compartilhamentos, além da atualização de objetos em um cronograma.

Executado na conta de origem

  1. Crie uma função e conceda o privilégio CREATE REPLICATION GROUP. Essa etapa é opcional:

    -- Execute the following SQL statements using the ACCOUNTADMIN role:
    USE ROLE ACCOUNTADMIN;
    
    CREATE ROLE myrole;
    
    GRANT CREATE REPLICATION GROUP ON ACCOUNT
      TO ROLE myrole;
    
    Copy
  2. Crie um grupo de replicação na conta de origem e habilite a replicação para contas de destino específicas:

    Nota

    • Se você tiver bancos de dados para adicionar a um grupo de replicação que tenham sido previamente habilitados para replicação, siga as instruções Transição da replicação de banco de dados para a replicação baseada em grupos (neste tópico) para deixar os objetos compatíveis com grupo de replicação antes de adicioná-los a um grupo.

    • Para adicionar um banco de dados a um grupo de replicação, a função ativa deve ter o privilégio MONITOR sobre o banco de dados. Para obter mais detalhes sobre privilégios de banco de dados, consulte Privilégios de banco de dados (em um tópico separado).

    • Para adicionar um compartilhamento a um grupo de replicação, a função ativa deve ter o privilégio OWNERSHIP sobre o compartilhamento.

    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

Executado na conta de destino

  1. Crie uma função na conta de destino e conceda o privilégio CREATE REPLICATION GROUP. Essa etapa é opcional:

    -- Execute the following SQL statements using the ACCOUNTADMIN role:
    USE ROLE ACCOUNTADMIN;
    
    CREATE ROLE myrole;
    
    GRANT CREATE REPLICATION GROUP ON ACCOUNT
        TO ROLE myrole;
    
    Copy
  2. Crie um grupo de replicação na conta de destino como uma réplica do grupo de replicação na conta de origem:

    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

Atualizar um grupo de replicação secundário manualmente

Como prática recomendada, o Snowflake indica a programação de atualizações automáticas usando o parâmetro REPLICATION_SCHEDULE. Para obter mais detalhes, consulte Cronograma de replicação (neste tópico). Para atualizar manualmente todos os objetos de um grupo secundário de replicação, execute as seguintes instruções SQL a partir da conta de destino:

Para atualizar manualmente os objetos em uma conta de destino, execute o comando ALTER REPLICATION GROUP … REFRESH.

Nota

Se o usuário que chama a função na conta de destino foi descartado na conta de origem, a operação de atualização falha.

Conceder o privilégio REPLICATE sobre um grupo de replicação a uma função — Opcional

O privilégio REPLICATE atualmente não é replicado e deve ser concedido sobre um grupo de replicação tanto na conta de origem quanto na conta de destino.

Executado a partir da conta de origem:

-- 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

Executado a partir da conta de destino:

-- 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

Atualização manual de um grupo secundário de replicação

Por exemplo, para atualizar os objetos do grupo de replicação myrg, execute a seguinte instrução a partir da conta de destino:

USE ROLE my_replication_role;

-- Execute the following SQL statements using a role with the REPLICATE privilege:
ALTER REPLICATION GROUP myrg REFRESH;
Copy

Replicação de bancos de dados e compartilhamentos

Pré-requisitos

Habilitar a replicação em suas contas

Um usuário com a função ORGADMIN deve habilitar a replicação para duas ou mais contas em sua organização. Consulte Pré-requisito: Habilitar a replicação para contas na organização para obter instruções.

Nota

Antes de configurar a replicação de dados, você deve ter uma conta existente ou criar uma conta na região onde deseja compartilhar dados e vinculá-la à sua conta local. Para obter mais informações sobre a criação de contas, consulte Criação de uma conta.

Criar um compartilhamento na sua conta de origem

Se você já criou anteriormente um compartilhamento em sua conta de origem (local), você pode pular esta etapa.

Para criar um novo compartilhamento:

  1. Entre na Classic Console do Snowflake como um usuário com a função ACCOUNTADMIN.

  2. Crie um compartilhamento e adicione objetos ao compartilhamento. Para obter instruções, consulte Começando a utilizar o Secure Data Sharing.

Etapa 1: criar uma função com o privilégio CREATE REPLICATION GROUP na conta de origem — Opcional

Crie uma função e conceda o privilégio CREATE REPLICATION GROUP. Essa etapa é opcional. Se você já criou essa função, pule para Etapa 2: criar um grupo primário de replicação em uma conta de origem.

-- Execute the following SQL statements using the ACCOUNTADMIN role:
USE ROLE ACCOUNTADMIN;

CREATE ROLE myrole;

GRANT CREATE REPLICATION GROUP ON ACCOUNT
    TO ROLE myrole;
Copy

Etapa 2: criar um grupo primário de replicação em uma conta de origem

Crie um grupo primário de replicação e habilite a replicação de bancos de dados e compartilhamentos específicos da conta atual (origem) para uma ou mais contas de destino na mesma organização.

Exibição de todas as contas habilitadas para replicação

Para recuperar a lista de contas em sua organização que estão habilitadas para replicação, use 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             |
+------------------------+-------------------------+--------------+-----------------+-----------------+-------------------+
Copy

Exibição de inscrição de grupo de replicação

Os objetos de banco de dados e compartilhamento têm Restrições do grupo de replicação em relação à inscrição. Antes de criar novos grupos ou adicionar objetos aos grupos existentes, você pode rever a lista de grupos de replicação existentes e os objetos em cada grupo.

Nota

Somente um administrador de conta (usuário com a função ACCOUNTADMIN) ou o proprietário do grupo (função com o privilégio OWNERSHIP sobre o grupo) pode executar as instruções SQL nesta seção.

Veja todos os grupos de replicação vinculados à conta atual e os tipos de objetos em cada grupo:

SHOW REPLICATION GROUPS;
Copy

Veja todos os bancos de dados no grupo de replicação myrg:

SHOW DATABASES IN REPLICATION GROUP myrg;
Copy

Veja todos os compartilhamentos no grupo de replicação myrg:

SHOW SHARES IN REPLICATION GROUP myrg;
Copy

Habilitar a replicação de bancos de dados e compartilhamentos de uma conta de origem para uma conta de destino

Crie um grupo de replicação de bancos de dados e compartilhamentos específicos na conta de origem e habilite a replicação para uma lista de contas de destino. Consulte CREATE REPLICATION GROUP para sintaxe.

Por exemplo, habilite a replicação de bancos de dados db1 e db2 e compartilhamento s1 da conta de origem para a conta myaccount2 na mesma organização.

Executado na conta de origem:

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;
Copy

Etapa 3: criar uma função com o privilégio CREATE REPLICATION GROUP na conta de destino — Opcional

Crie uma função na conta de destino e conceda o privilégio CREATE REPLICATION GROUP. Essa etapa é opcional. Se você já criou essa função, pule para Etapa 4: criar um grupo de replicação secundário na conta de destino.

-- Execute the following SQL statements using the ACCOUNTADMIN role:
USE ROLE ACCOUNTADMIN;

CREATE ROLE myrole;

GRANT CREATE REPLICATION GROUP ON ACCOUNT
    TO ROLE myrole;
Copy

Etapa 4: criar um grupo de replicação secundário na conta de destino

Crie um grupo de replicação secundário na conta de destino como uma réplica do grupo de replicação primário na conta de origem.

Execute uma instrução CREATE REPLICATION GROUP … AS REPLICA OF em cada conta de destino para a qual você habilitou a replicação em Etapa 2: criar um grupo primário de replicação em uma conta de origem (neste tópico).

Executado a partir de cada conta de destino:

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

Atualizar um grupo de replicação secundário manualmente

Atualize manualmente um grupo de replicação secundário na conta de destino. Isso atualiza todos os objetos no grupo de replicação.

Nota

Como prática recomendada, o Snowflake indica a programação de atualizações automáticas usando o parâmetro REPLICATION_SCHEDULE. Consulte Cronograma de replicação (neste tópico).

Atualize um grupo secundário de replicação.

Por exemplo, para atualizar os objetos do grupo de replicação myrg, execute a seguinte instrução a partir da conta de destino:

-- Only a user with the ACCOUNTADMIN role can execute the following SQL statement:
ALTER REPLICATION GROUP myrg REFRESH;
Copy

Exibição de grupos de replicação

Para ver os grupos de replicação, use SHOW REPLICATION GROUPS:

Para mostrar todos os grupos primário e secundário de replicação associados à conta atual, execute a seguinte instrução SQL:

SHOW REPLICATION GROUPS;
Copy

Saída do comando:

+------------------+-------------------------------+--------------+------+-------------+---------+------------+------------------+--------------------------------------+------------------------------------------+--------------------+-----------------+----------------------+-----------------+------------+
| 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    |
+------------------+-------------------------------+--------------+------+-------------+---------+------------+------------------+--------------------------------------+------------------------------------------+--------------------+-----------------+----------------------+-----------------+------------+
Copy