Replicar tabelas e índices particionados

Aplica-se a: SQL ServerAzure SQL Managed Instance

A partição torna tabelas ou índices grandes mais geríveis porque a partição permite gerir e aceder a subconjuntos de dados de forma rápida e eficiente, mantendo ao mesmo tempo a integridade de uma coleção de dados. Para obter mais informações, consulte Tabelas Particionadas e Índices. A replicação suporta particionamento fornecendo um conjunto de propriedades que especificam como as tabelas e índices particionados devem ser tratados.

Propriedades do Artigo para Replicação Transacional e de Fusão

A tabela seguinte lista os objetos que são usados para particionar os 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 partição são as opções do esquema do artigo que determinam se os objetos de partição devem ser copiados para o Assinante. Defina estas opções de esquema das seguintes formas:

  • Na página de Propriedades do Artigo do Assistente de Novas Publicações ou na caixa de diálogo Propriedades de Publicação. Para copiar os objetos listados na tabela anterior, especifique o valor true para as propriedades Copiar esquemas de particionamento da tabela e Copiar esquemas de particionamento do índice. Para informações sobre como aceder à página de Propriedades do Artigo , consulte Visualizar e Modificar Propriedades de Publicação.

  • Utilizando o parâmetro schema_option de um dos seguintes procedimentos armazenados:

    Para copiar os objetos listados na tabela anterior, especifique os valores apropriados das opções de esquema. Para informações sobre como especificar opções de esquema, consulte Especificar Opções de Esquema.

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

Após a inicialização do Assinante, as alterações nos dados são propagadas para o Assinante e aplicadas às partições apropriadas. No entanto, alterações ao esquema de partição não são suportadas. A replicação transacional e a fusão não suportam replicar os seguintes comandos: ALTER PARTITION FUNCTION, ALTER PARTITION SCHEME, nem a instrução REBUILD WITH PARTITION de ALTER INDEX. As alterações associadas a eles não são automaticamente replicadas para o Assinante. Tens de efetuar manualmente alterações semelhantes no subscritor.

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

Um dos principais benefícios da partição de tabelas é a capacidade de mover rápida e eficientemente subconjuntos de dados entre partições. Use o SWITCH PARTITION comando para mover dados. Por defeito, quando ativas uma tabela para replicação, o sistema bloqueia SWITCH PARTITION as operações pelas seguintes razões:

  • Se mover dados para dentro ou fora de uma tabela que existe no Publisher mas não existe no Assinante, o Publisher e o Subscritor podem tornar-se inconsistentes entre si. Este problema ocorre tipicamente quando se move dados para dentro ou para fora de uma tabela de staging.

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

Apesar destes potenciais problemas, pode ativar a troca de partições para replicação transacional. Antes de ativar a troca de partições, certifique-se de que todas as tabelas envolvidas na troca de partições existem no Publisher e no Assinante, e assegure que as definições de tabela e partição são as mesmas.

Quando as partições têm exatamente o mesmo esquema de partição nos editores e assinantes, podes ativar allow_partition_switch juntamente com replication_partition_switch, o que só replica a instrução de troca de partição para o assinante. Também podes ativar allow_partition_switch sem replicar o DDL. Isto é útil no caso de querer extrair os meses antigos da partição, mas manter a partição replicada por mais um ano para efeitos de backup junto do assinante.

Se ativar a comutação de partições no SQL Server 2008 R2 até à versão atual, também poderá vir a precisar de operações de divisão e fusão num futuro próximo. Antes de executar uma operação de divisão ou fusão numa tabela replicada ou compatível com CDC, certifique-se de que a partição em questão não tem comandos replicados pendentes. Deve também garantir que nenhuma operação DML é executada na partição durante as operações de divisão e fusão. Se houver transações que o leitor de registos ou o trabalho de captura CDC não tenham processado, ou se realizar operações DML numa partição de uma tabela replicada ou compatível com CDC enquanto uma operação de divisão ou fusão está a ser executada (envolvendo a mesma partição), 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 registo ou trabalho de captura CDC. Para corrigir o erro, pode ser necessário reinicializar a subscrição ou desativar o CDC nessa tabela ou base de dados.

Cenários não suportados

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

Replicação entre pares
A replicação peer-to-peer não é suportada com comutação de partições.

Utilização de variáveis com comutação de partição

A utilização de variáveis com comutação de partições em tabelas publicadas com replicação transacional ou Captura de Dados de Alterações (CDC) não é suportada na instrução ALTER TABLE ... SWITCH TO ... PARTITION ....

Por exemplo, o seguinte código de comutação de partições não funciona com o CDC ativado na base de dados, nem com a Tabela A a participar numa publicação transacional:

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

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

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

Ativação da comutação de partições

As seguintes propriedades para publicações transacionais permitem-lhe controlar o comportamento da troca de partições num ambiente replicado:

  • @allow_partition_switch: Quando definido para true, pode ser executado SWITCH PARTITION contra a base de dados de publicações.

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

Defina estas propriedades usando sp_addpublication quando criar a publicação, ou usando sp_changepublication depois de criar a publicação. Como referido anteriormente, a replicação de fusão não suporta a troca de partições. Para correr SWITCH PARTITION numa tabela que esteja ativada para replicação de fusões, remova a tabela da publicação.