Replicar tabelas e índices particionados

Aplica-se a:SQL Server Instância Gerenciada de SQL do Azure

O particionamento facilita o gerenciamento de grandes tabelas ou índices, permitindo o acesso e o gerenciamento de subconjuntos de dados de forma rápida e eficaz, ao mesmo tempo em que mantém a integridade geral da coleção de dados. Para obter mais informações, consulte Tabelas e Índices Particionados. A replicação dá suporte ao particionamento fornecendo um conjunto de propriedades que especificam como tabelas e índices particionados devem ser tratados.

Propriedades de artigo para replicação transacional e de mesclagem

A tabela a seguir lista os objetos que são usados para particionar dados.

Objeto Criado usando
Tabela ou índice particionado CREATE TABLE ou CREATE INDEX
Função de partição CREATE PARTITION FUNCTION
Esquema de partição CREATE PARTITION SCHEME

As propriedades de particionamento são as opções de esquema de artigo que determinam se os objetos de particionamento devem ser copiados para o Assinante. Defina essas opções de esquema das seguintes maneiras:

  • Na página Propriedades do Artigo do Assistente de Nova Publicação ou na caixa de diálogo Propriedades da Publicação. Para copiar os objetos listados na tabela anterior, especifique um valor de true para as propriedades Copiar esquemas de particionamento de tabela e Copiar esquemas de particionamento de índice. Para obter informações sobre como acessar a página Propriedades do artigo, consulte Exibir e modificar as propriedades da publicação.

  • Usando o parâmetro schema_option de um dos procedimentos armazenados a seguir:

    Para copiar os objetos listados na tabela anterior, especifique os valores de opção de esquema apropriados. Para obter informações sobre como especificar opções de esquema, consulte Specify Schema Options.

A replicação copia objetos para o Assinante durante a sincronização inicial. Se o esquema de partição usar grupos de arquivo diferentes do grupo de arquivo PRIMARY, esses grupos deverão existir no Assinante antes da sincronização inicial.

Depois que o Assinante é inicializado, as alterações de dados são propagadas para o Assinante e aplicadas nas partições apropriadas. No entanto, mudanças no esquema de partição não são suportadas. A replicação transacional e de merge não dão suporte à replicação dos seguintes comandos: ALTER PARTITION FUNCTION, ALTER PARTITION SCHEME ou da instrução REBUILD WITH PARTITION de ALTER INDEX. As mudanças associadas a eles não são automaticamente replicadas ao Assinante. Você precisa fazer alterações semelhantes manualmente no Assinante.

Suporte à replicação para comutação de partições

Um dos principais benefícios do particionamento de tabela é a possibilidade de mover subconjuntos de dados entre partições com rapidez e eficiência. Use o SWITCH PARTITION comando para mover dados. Por padrão, quando você habilita uma tabela para replicação, o sistema bloqueia SWITCH PARTITION operações pelos seguintes motivos:

  • Se você mover os dados para ou de uma tabela que existe no Publicador, mas não existe no Assinante, ambos ficarão inconsistentes entre si. Esse problema normalmente ocorre quando você move dados para dentro ou fora de uma tabela de staging.

  • Se o Assinante tiver uma definição diferente para a tabela particionada da do Publisher, o Agente de Distribuição falha ao tentar aplicar alterações no Assinante.

Apesar desses possíveis problemas, você pode habilitar a troca de partições para replicação transacional. Antes de habilitar a troca de partições, certifique-se de que todas as tabelas envolvidas na troca de partições existam no Publisher e no Assinante, e que as definições de tabela e partição sejam as mesmas.

Quando as partições têm o esquema de partição exato nos publicadores e assinantes, você pode ativar o allow_partition_switch junto com replication_partition_switch, que somente replicará a instrução switch da partição para o assinante. Você também pode ativar o allow_partition_switch sem replicar o DDL. Isto é útil no caso em que você deseja reverter meses antigos da partição, mas persistir a partição replicada no local durante outro ano para fins de backup no assinante.

Se você habilitar a comutação de partição no SQL Server 2008 R2 até a versão atual, também poderá precisar de operações de divisão e mesclagem em um futuro próximo. Antes de executar uma operação de divisão ou fusão em uma tabela replicada ou compatível com CDC, certifique-se de que a partição em questão não tenha comandos replicados pendentes. Você também deve garantir que nenhuma operação DML seja executada na partição durante as operações de divisão e mesclagem. Se houver transações que o leitor de log ou o trabalho de captura CDC não processaram, ou se você realizar operações DML em uma partição de uma tabela replicada ou habilitada por CDC enquanto uma operação de divisão ou fusão está sendo executada (envolvendo a mesma partição), isso pode levar a um erro de processamento (erro 608 - Nenhuma entrada de catálogo encontrada para ID de partição) com agente de leitor de log ou trabalho de captura CDC. Para corrigir o erro, talvez seja necessário reinicializar a assinatura ou desativar o CDC nessa tabela ou banco de dados.

Cenários sem suporte

Os seguintes cenários não são suportados ao usar replicação com troca de partições:

Replicação ponto a ponto
A replicação peer-to-peer não é suportada com troca de partições.

Uso de variáveis com alternância de partição

Não há suporte ao uso de variáveis com alternância de partição em tabelas publicadas com replicação transacional ou Captura de Dados de Alterações (CDC) na instrução ALTER TABLE ... SWITCH TO ... PARTITION ....

Por exemplo, o código de troca de partições a seguir não funciona com o CDC ativado no banco de dados, nem com a Tabela A participando de uma publicação transacional:

DECLARE @SomeVariable INT = $PARTITION.pf_test(10);
ALTER TABLE dbo.TableA
SWITCH TO dbo.TableB 
PARTITION @SomeVariable;

Em vez disso, troque sua partição usando diretamente a função de partição, como no exemplo a seguir:

ALTER TABLE NonPartitionedTable 
SWITCH TO PartitionedTable PARTITION $PARTITION.pf_test(10);

Habilitando a alternância de partições

As seguintes propriedades para publicações transacionais permitem que você controle o comportamento da troca de partições em um ambiente replicado:

  • @allow_partition_switch: Quando definido como true, você pode rodar SWITCH PARTITION contra o banco de dados de publicações.

  • @replicate_partition_switch: Determina se a instrução DDL SWITCH PARTITION deve ser replicada para os Assinantes. Esta opção só é válida quando @allow_partition_switch é definido como true.

Defina essas propriedades usando sp_addpublication ao criar a publicação, ou usando sp_changepublication depois de criar a publicação. Como mencionado anteriormente, a replicação de fusão não suporta troca de partições. Para executar SWITCH PARTITION em uma tabela configurada para replicação de mesclagem, remova a tabela da publicação.