Considerações sobre a replicação de banco de dados¶
Este tópico descreve o comportamento de certos recursos do Snowflake em bancos de dados secundários quando se usa replicação de banco de dados. Para obter orientação adicional sobre como trabalhar com objetos e dados replicados, consulte Considerações sobre a replicação.
Nota
A Snowflake recomenda o uso do recurso de replicação de conta para replicar bancos de dados. Os grupos de replicação e failover permitem a replicação de vários bancos de dados e outros objetos de conta com consistência pontual para os objetos no grupo. Para obter uma lista completa da disponibilidade do recurso e objetos suportados, consulte Introdução à replicação e failover em várias contas.
Neste tópico:
Objetos de segurança e replicação de banco de dados¶
Esta seção descreve o comportamento de replicação de banco de dados de segredos e políticas de segurança.
- Políticas de mascaramento e acesso a linhas:
A operação de replicação falha se uma das seguintes condições for verdadeira:
O banco de dados primário está em uma conta Enterprise (ou superior) e contém uma política/tag, mas uma ou mais das contas aprovadas para replicação estão em edições inferiores.
Um objeto contido no banco de dados primário tem uma referência pendente a uma tag em um banco de dados diferente.
O comportamento de referência pendente para a replicação de banco de dados pode ser evitado ao replicar múltiplos bancos de dados em um grupo de replicação ou failover.
- Políticas de mascaramento baseadas em tags:
A operação de replicação falha se uma das seguintes condições for verdadeira:
O banco de dados primário está em uma conta Enterprise (ou superior) e contém uma política/tag, mas uma ou mais das contas aprovadas para replicação estão em edições inferiores.
Um objeto contido no banco de dados primário tem uma referência pendente a uma tag em um banco de dados diferente.
Para obter mais informações sobre as políticas de mascaramento baseadas em tag, consulte Políticas de mascaramento baseadas em tags.
- Políticas de senha, sessão e autenticação:
A operação de replicação falha se uma das seguintes condições for verdadeira:
O banco de dados primário está em uma conta Enterprise (ou superior) e contém uma política, mas uma ou mais das contas aprovadas para replicação estão em edições anteriores.
Qualquer um destes objetos contidos no banco de dados primário é anexado a um usuário na mesma conta. Neste caso, Snowflake não executa a operação de replicação.
Para evitar a falha na operação de replicação de banco de dados devido a uma referência a um usuário, use um grupo de replicação ou failover em vez disso.
Para obter mais detalhes, consulte Políticas de segurança e replicação.
- Segredos:
Você não pode replicar um segredo usando a replicação de banco de dados. Use um grupo de replicação ou failover para replicar um segredo. Para obter mais detalhes, consulte Replicação e segredos.
Referências pendentes¶
Referências a objetos em outro banco de dados¶
Analise cuidadosamente se as exibições ou restrições de tabelas em um banco de dados primário fazem referência a objetos em outro banco de dados. Para objetos de banco de dados, você pode visualizar as dependências de objetos no Account Usage Exibição OBJECT_DEPENDENCIES.
A tabela a seguir descreve o comportamento de replicação do banco de dados quando um objeto (o objeto de referência) em um banco de dados faz referência a um objeto (o objeto de referência) em outro banco de dados:
Objeto de referência |
Objeto referenciado |
Comportamento de replicação |
---|---|---|
Objeto |
Com êxito |
|
Objeto |
Com falha |
|
Exibição materializada |
Com falha |
|
Chave primária |
Com falha |
|
Tabela |
Com falha |
|
Política de mascaramento, política de acesso a linhas ou tag |
A tag/política de objeto é atribuída a |
Com falha |
Objeto |
Com falha |
Exibições não materializadas¶
Exibições não materializadas que fazem referência a qualquer objeto em outro banco de dados (por exemplo, colunas de tabelas, outras exibições, UDFs ou estágios) podem ser replicadas, porque este tipo de referência é baseado no nome. As referências com base em nomes não fazem com que a replicação falhe; entretanto, as consultas sobre a exibição em bancos de dados secundários falharão se os outros bancos de dados não forem replicados na mesma região.
Por exemplo, imagine que a exibição v1
no banco de dados d1
faz referência às tabelas t1
e t2
nos bancos de dados d1
e d2
, respectivamente. Para consultar com sucesso a exibição v1
no banco de dados secundário d1
, o banco de dados secundário d2
também deve existir na conta (por exemplo, como outro banco de dados secundário). Além disso, para resultados de consulta consistentes com os bancos de dados primários, os bancos de dados secundários d1
e d2
devem ser atualizados ao mesmo tempo.
Exibições materializadas¶
Referências pendentes em exibições materializadas podem fazer com que a replicação falhe com a seguinte mensagem de erro:
Dangling references in the snapshot. Correct the errors before refreshing again. The following references are missing (referred entity <- [referring entities])
Estas referências pendentes podem ocorrer se:
Uma exibição materializada faz referência a qualquer objeto em outro banco de dados.
Exibições materializadas referenciam objetos por ID em vez de nome. Um instantâneo do banco de dados não pode resolver referências baseadas em ID a objetos fora do banco de dados.
Para contornar esta limitação, replicar os dois bancos de dados juntos no mesmo grupo de replicação ou failover. Alternativamente, você pode armazenar exibições materializadas e os objetos que elas referenciam no mesmo banco de dados.
Uma exibição materializada é inválida (ou seja, referências a um objeto descartado).
Para evitar um erro de referência pendente para exibições materializadas inválidas, identifique e corrija o problema com a exibição materializada. Consulte a seção Solução de problemas no tópico das exibições materializadas.
Restrições¶
Atualmente, chaves estrangeiras pendentes causam a falha da replicação com a seguinte mensagem de erro:
Dangling references in the snapshot. Correct the errors before refreshing again. The following references are missing
(referredentity <- [referring entities])
Esta situação ocorre quando uma chave estrangeira no banco de dados primário faz referência a uma chave primária em outro banco de dados, ou vice-versa. Isso porque as referências de restrição são baseadas em ID. Um instantâneo do banco de dados não pode resolver referências baseadas em ID a objetos fora de seu próprio banco de dados.
Para visualizar as referências de chave estrangeira em sua conta, consulte o Information Schema Exibição TABLE_CONSTRAINTS ou Account Usage Exibição TABLE_CONSTRAINTS.
Para contornar esta limitação, replicar os dois bancos de dados juntos no mesmo grupo de replicação ou failover. Alternativamente, você pode armazenar tabelas vinculadas no mesmo banco de dados.
Sequências¶
Atualmente, sequências pendentes causam a falha da replicação com a seguinte mensagem de erro:
Dangling references in the snapshot. Correct the errors before refreshing again. The following references are missing
(referred entity <- [referring entities])
Esta situação ocorre quando uma tabela em um banco de dados primário faz referência a uma sequência em outro banco de dados. Isso porque as referências de sequência são baseadas em ID. Um instantâneo do banco de dados não pode resolver referências baseadas em ID a objetos fora de seu próprio banco de dados.
Para contornar esta limitação, replicar os dois bancos de dados juntos no mesmo grupo de replicação ou failover. Alternativamente, você pode fazer referência a sequências no mesmo banco de dados.
Referências a objetos descartados¶
Descartar um objeto que é referenciado por outro objeto no mesmo banco de dados, ou em outro, resulta em uma referência pendente. Quando um objeto no banco de dados primário faz referência a um objeto descartado, uma operação de replicação falha com a seguinte mensagem de erro:
Dangling references in the snapshot. Correct the errors before refreshing again. The following references are missing
(referred entity <- [referring entities])
Para contornar esta limitação, recomendamos que você complete qualquer um dos seguintes passos:
Descartar qualquer objeto referenciado.
Modificar os objetos de referência (por exemplo, modificar uma exibição materializada usando ALTER MATERIALIZED VIEW). Referenciar um objeto diferente ou remover a referência ao objeto descartado.
Descartar quaisquer objetos no banco de dados primário que referenciem objetos descartados.
Replicação de múltiplos bancos de dados¶
Quando múltiplos bancos de dados são replicados, a consistência pontual entre bancos de dados não está disponível. Um instantâneo de cada banco de dados primário é criado de forma independente, e as alterações no banco de dados secundário são confirmadas de forma independente. Isto pode ser problemático se você tiver exibições que se juntam através de tabelas em diferentes bancos de dados ou dependem de transações entre bancos de dados. Por exemplo, uma transação que atualiza dois bancos de dados primários atomicamente pode não ser refletida nos bancos de dados secundários ao mesmo tempo.
Para replicar múltiplos bancos de dados com consistência de ponto no tempo, use um grupo de replicação ou failover.