Considerações de design e limitações para Editores Oracle
A publicação de um banco de dados Oracle é projetada para funcionar de forma praticamente idêntica à publicação de um banco de dados 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 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 Publicador 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
Seqüências
Sinônimos
Para obter mais informações sobre tipos de dados que oferecem suporte, consulte Mapeamento de tipo de dados para Publicadores Oracle.
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 em SQL Server. Para obter 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 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 de SQL Server; 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 Mapeamento de tipo de dados para Publicadores Oracle.
Índices e restrições exclusivos
Tanto para replicação de instantâneo como transacionais, colunas contidas em índices e restrições exclusivas (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 em 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 Mapeamento de tipo de dados para Publicadores Oracle.
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:
Oracle e SQL Server tratam NULL de forma diferente: Oracle permite várias linhas com valores NULL para colunas que permitem NULL e estão incluídas em restrições ou índices exclusivos. SQL Server aplica exclusividade permitindo apenas uma única linha com valor NULL 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 por SQL Server mas não pelo Oracle.
Assim como na replicação de transação 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 de transação.
Diferenças entre publicação do Oracle e replicação de transação padrão
Um Publicador Oracle não pode ter o mesmo nome de seu Distribuidor SQL Server ou o mesmo nome que qualquer um dos Editores 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 Publicador 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 Publicador 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 SQL Server 2005 e versões posteriores. Para versões anteriores de 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 Publicador 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 obter mais informações sobre como usar procedimentos armazenados, consulte Especificando como as alterações são propagadas para Artigos Transacionais.
Suporte de recursos de replicação de transação
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.
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 Validando 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 subseqüente 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 Inicializando uma assinatura transacional sem um instantâneo.
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 de transação padrão, com as seguintes exceções:
A conta sob a qual o Snapshot Agent e o Log Reader Agent fazem conexões do Distribuidor para o Processador é especificada por um dos seguintes métodos:
O parâmetro @security_mode de sp_adddistpublisher (Transact-SQL) (você também especifica valores para @ logon e @ senha se a Autenticação Oracle for usada)
Na caixa de diálogo Conectar ao Servidor no SQL Server Management Studio, que você usa ao configurar o Publicador Oracle no Distribuidor SQL Server.
Em replicação de transação padrão, a conta é especificada com sp_addpublication_snapshot (Transact-SQL) e sp_addlogreader_agent (Transact-SQL).
A conta sob a qual o Snapshot Agent e o Log Reader Agent fazem conexões não pode ser alterada com sp_changedistpublisher (Transact-SQL) ou por uma folha de propriedade, mas a senha pode ser alterada.
Se você especificar um valor de 1 (Autenticação Integrada do Windows) para o parâmetro @security_mode de sp_adddistpublisher (Transact-SQL):
A conta e senha de processo usadas para o Snapshot Agent e Log Reader Agent (os parâmetros @job_login e @job_password de sp_addpublication_snapshot (Transact-SQL) e sp_addlogreader_agent (Transact-SQL)) devem ser as mesmas que a conta e senha usadas para a conexão com o Publicador Oracle.
Não é possível alterar o parâmetro @job_login por sp_changepublication_snapshot (Transact-SQL) ou sp_changelogreader_agent (Transact-SQL), mas a senha pode ser alterada.
Para obter mais informações sobre segurança de replicação, consulte Segurança e proteção (Replicação).