Considerações de design e limitações para Publicadores Oracle

Aplica-se a: SQL Server

A publicação de um banco de dados Oracle foi projetada para funcionar de maneira praticamente idêntica à publicação de um banco de dados do Microsoft SQL Server. Porém, deve-se estar atento às seguintes limitações e problemas:

  • A opção Oracle Gateway fornece desempenho melhorado em relação à opção Oracle Complete; entretanto, essa opção não pode ser usada para publicar a mesma tabela em várias publicações transacionais. Uma tabela pode aparecer no máximo em uma publicação transacional e em qualquer número de publicações de instantâneo. Se você precisa publicar a mesma tabela em várias publicações transacionais, escolha a opção Oracle Complete.

  • Replicação oferece suporte para tabelas de publicação, índices e exibições materializadas. Outros objetos não são replicados.

  • Há algumas pequenas diferenças entre o armazenamento e o processamento de dados no Oracle e em bancos de dados do SQL Server que afetam a replicação.

  • Há várias diferenças relativas à maneira como recursos de replicação transacionais oferecem suporte ao usar um Editor Oracle.

Suporte para publicar objetos do Oracle

A replicação oferece suporte para replicar os seguintes objetos de bancos de dados do Oracle:

  • Tabelas

  • Tabelas organizadas por índice

  • Índices

  • Exibições materializadas (replicadas como tabelas)

Os seguintes itens podem estar presentes em tabelas publicadas mas não são replicados:

  • Índices com base em domínio

  • Índices com base em função

  • Padrões

  • Verificar restrições

  • Chaves estrangeiras

  • Opções de armazenamento (tablespaces, clusters etc.)

Os seguintes objetos não podem ser replicados:

  • Tabelas aninhadas

  • Exibições

  • Pacotes, corpos de pacote, procedimentos e gatilhos

  • Filas

  • Sequências

  • Sinônimos

Para obter mais informações sobre tipos de dados com suporte, consulte Data Type Mapping for Oracle Publishers.

Diferenças entre Oracle e SQL Server

  • Oracle tem limites de tamanho máximo diferentes para alguns objetos. Quaisquer objetos criados no banco de dados de publicação Oracle devem aderir aos limites máximos de tamanho para os objetos correspondentes no SQL Server. Para mais informações sobre limites no SQL Server, consulte Especificações de capacidade máxima do SQL Server.

  • Por padrão nomes de objeto do Oracle são criados com maiúscula. Certifique-se de fornecer os nomes de objetos Oracle em maiúscula ao publicá-los por meio de um Distribuidor do SQL Server se eles tiverem maiúscula no banco de dados do Oracle. Falha ao especificar os objetos com maiúscula ou minúscula pode resultar em uma mensagem de erro indicando que o objeto não pode ser encontrado.

  • O Oracle tem um dialeto de SQL ligeiramente diferente do SQL Server. Os filtros de linha devem ser gravados em sintaxe compatível com Oracle.

Considerações para objetos grandes

Dados de objeto grande (LOB) não são armazenados na tabela de log de artigo; atualizações para dados LOB são sempre recuperados diretamente da tabela publicada. Atualizações são replicadas em publicações transacionais somente se a operação que afete LOB acionar gatilhos de replicação na tabela replicada. Gatilhos Oracle são acionados quando linhas contendo LOBs são inseridas ou excluídas; entretanto, atualizações para colunas LOB não disparam gatilhos. Uma atualização para uma coluna LOB será replicada imediatamente somente se a coluna não LOB da mesma linha também for atualizada na mesma transação Oracle. Caso contrário, a coluna LOB será atualizada no Assinante quando a próxima atualização para uma coluna não LOB ocorrer na mesma linha. Verifique se esse comportamento é aceitável para seu aplicativo.

Para replicar atualizações para colunas LOB em publicações transacionais, considere uma das seguintes estratégias ao gravar o aplicativo:

  • Exclua e volte a inserir as linhas em uma transação em vez de atualizar a linha: especifique a nova LOB ao reinserir a linha. Por excluir e inserir os dois gatilhos, a linha será replicada.

  • Inclua uma coluna não LOB na atualização de linha além da coluna LOB ou atualize uma coluna não LOB da linha como parte da mesma transação Oracle. Em ambos os casos, a atualização da coluna não LOB assegura o acionamento do gatilho.

Para obter mais informações sobre LOBs, consulte Data Type Mapping for Oracle Publishers.

Índices e restrições exclusivos

Tanto para replicação de instantâneo quanto para a replicação transacional, as colunas contidas em índices e restrições exclusivos (incluindo restrições de chave primária) devem se ater a determinadas restrições. Se não aderirem a essas restrições, a restrição ou índice não é replicado.

  • O número máximo de colunas permitido em um índice no SQL Server é 16.

  • Todas as colunas incluídas em restrições exclusivas devem ter tipos de dados com suporte. Para obter mais informações sobre tipos de dados, consulte Data Type Mapping for Oracle Publishers.

  • Todas as colunas incluídas em restrições exclusivas devem ser publicadas (não podem ser filtradas).

  • Colunas envolvidas em restrições ou índices exclusivos não devem ser nulas.

Considere também os seguintes problemas:

  • A Oracle e o SQL Server tratam o NULL diferentemente: a Oracle permite várias linhas com valores nulos para colunas que permitem o NULL e são incluídas em restrições ou índices exclusivos. O SQL Server impõe exclusividade permitindo somente uma única linha com um valor nulo para a mesma coluna. Não é possível publicar uma restrição ou índice exclusivo que permita NULL uma vez que haveria uma violação de restrição no Assinante se a tabela publicada tiver várias linhas com valores NULL para qualquer uma das colunas incluídas no índice ou restrição.

  • Ao testar exclusividade, espaços em branco em um campo são ignorados pelo SQL Server mas não pelo Oracle.

Assim como na replicação transacional do SQL Server, as tabelas em publicações transacionais do Oracle exigem uma chave primária; a chave primária deve ser exclusiva com base nas regras acima especificadas. Se a chave primária não aderir às regras definidas nos pontos anteriores, a tabela não pode ser publicada para replicação transacional.

Diferenças entre publicação do Oracle e replicação transacional padrão

  • Um Editor Oracle não pode ter o mesmo nome de seu Distribuidor do SQL Server ou o mesmo nome que qualquer um dos Editores do SQL Server que usam o Distribuidor ou que qualquer Assinante que recebe a publicação. Publicações com o mesmo Distribuidor devem ter cada uma um nome exclusivo.

  • Uma tabela publicada em uma publicação do Oracle não pode receber dados replicados. Assim, a publicação do Oracle não oferece suporte para: publicações com assinaturas de atualização imediata ou enfileirada; ou topologias nas quais tabelas de publicação também funcionam com tabelas de assinatura, tais como replicação ponto a ponto e bidirecional.

  • Chave primária para relações da chave estrangeira no banco de dados Oracle não é replicada para Assinantes. Porém, os relações são mantidas nos dados conforme as alterações são aplicadas.

  • Publicações transacionais padrão oferecem suporte para tabelas de até 1000 colunas. Publicações transacionais Oracle oferecem suporte para 995 colunas (a replicação adiciona cinco colunas a cada tabela publicada).

  • Cláusulas de agrupamento são adicionadas às instruções CREATE TABLE para habilitar comparações que diferenciam maiúscula de minúscula, o que é importante para chaves primárias e restrições exclusivas. Este comportamento é controlado com a opção de esquema 0x1000, especificada com o parâmetro @schema_option de sp_addarticle (Transact-SQL).

  • Se você usar procedimentos armazenados para configurar ou manter um Editor Oracle, não coloque os procedimentos dentro de uma transação explícita. Isso não oferece suporte sobre o servidor vinculado usado para conexão com o Editor Oracle.

  • Se você criar uma assinatura pull para uma publicação do Oracle com um assistente, deve-se usar o Assistente para Nova Assinatura fornecido com o SQL Server 2005 (9.x) e versões posteriores. Para versões anteriores do SQL Server, é possível, entretanto, usar o procedimento armazenado e interfaces SQL-DMO para configurar assinaturas pull para publicações do Oracle.

  • Se usar procedimentos armazenados para propagar alterações para Assinantes (o padrão), lembre-se de que a sintaxe MCALL tem suporte, mas tem um comportamento diferente quando a publicação é de um Editor Oracle. Normalmente, MCALL fornece um bitmap que mostra que colunas foram atualizadas no Publicador. Com uma publicação do Oracle, o bitmap sempre mostra que todas as colunas foram atualizadas. Para mais informações sobre o uso de procedimentos armazenados, consulte Especificar como as alterações são propagadas para artigos transacionais.

Suporte de recursos de replicação transacional

  • As publicações do Oracle não oferecem suporte para todas as opções de esquema que as publicações do SQL Server oferecem suporte. Para obter mais informações sobre opções de esquema, consulte sp_addarticle (Transact-SQL).

  • Assinantes de publicações do Oracle não podem usar assinaturas de atualização imediata ou enfileiradas ou ser nós em uma topologia ponto a ponto ou bidirecional.

  • Assinantes de publicações do Oracle não podem ser inicializados automaticamente de um backup.

  • O SQL Server oferece suporte para dois tipos de validação: binária e de contagem de linhas. Publicadores Oracle oferecem suporte para validação de contagem de linhas. Para obter mais informações, consulte Validar os dados replicados.

  • O SQL Server oferece dois formatos de instantâneo: modo de bcp nativo e modo de caractere. Publicadores Oracle oferecem suporte para instantâneos de modo de caractere.

  • Alterações de esquema para tabelas do Oracle publicadas não têm suporte. Para executar alterações de esquema, primeiro descarte a publicação, faça as alterações e, então, crie novamente a publicação e quaisquer assinaturas.

    Observação

    Se as alterações de esquema e subsequente cancelamento e recriação da publicação e assinaturas forem executados em um momento em que nenhuma atividade estiver ocorrendo nas tabelas publicadas, pode-se especificar a opção ‘suporte para replicação somente' para as assinaturas. Isso lhes permite ser sincronizados sem ter de copiar um instantâneo para cada Assinante. Para obter mais informações, consulte Initialize a Transactional Subscription Without a Snapshot.

Modelo de segurança de replicação

O modelo de segurança para publicação do Oracle é o mesmo que o modelo de segurança para replicação transacional padrão, com as seguintes exceções:

Para obter mais informações sobre a segurança de replicação, confira Exibir e modificar configurações de segurança de replicação.