Resolução de Problemas Oracle Publisher

Aplica-se a: SQL Server

Este artigo lista vários problemas que podem surgir ao configurar e utilizar um Oracle Publisher.

Surge um erro relativamente ao cliente Oracle e ao software de rede

Deve conceder à conta sob a qual o Microsoft SQL Server corre no Distribuidor permissões de leitura e execução para o diretório e todos os subdiretórios onde o software de rede cliente Oracle está instalado. Se não conceder as permissões ou se os componentes do cliente Oracle não estiverem instalados corretamente, recebe a seguinte mensagem de erro:

"A ligação ao servidor falhou com [Microsoft OLE DB Provider for Oracle]. Não foram encontrados componentes de rede e cliente Oracle. Esses componentes são fornecidos pela Oracle Corporation e fazem parte da instalação do software cliente Oracle Versão 7.3.3 ou posterior. O fornecedor não pode funcionar até que estes componentes sejam instalados."

Se instalar um cliente Oracle apropriado no Distribuidor, certifique-se de que para e depois reinicia o SQL Server após a instalação do cliente terminar. Esta etapa é necessária para que o SQL Server reconheça os componentes do cliente.

Se conceder as permissões e instalar corretamente os componentes, mas o erro persistir, verifique se as definições do registo em HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI estão corretas:

  • Para Oracle 10g, as definições corretas são:

    • OracleOciLib = oci.dll

    • OracleSqlLib = orasql10.dll

    • OracleXaLib = oraclient10.dll

  • Para o Oracle 9i, as definições corretas são:

    • OracleOciLib = oci.dll

    • OracleSqlLib = orasql9.dll

    • OracleXaLib = oraclient9.dll

O SQL Server Distributor não consegue ligar-se à instância da base de dados Oracle

Se o SQL Server Distributor não conseguir ligar-se ao Oracle Publisher, certifique-se de que:

  • O software Oracle necessário está instalado no Distribuidor.

  • A base de dados Oracle está online e pode ligar-se a ela usando uma ferramenta como SQL*Plus.

  • A replicação de login usada para se ligar ao Oracle Publisher tem permissões suficientes. Para obter mais informações, consulte Configurar um editor Oracle.

  • O ficheiro tnsnames.ora lista os nomes TNS que definiste durante a configuração do Oracle Publisher.

  • Estás a usar o Oracle Home e o caminho corretos. Mesmo que tenha apenas um conjunto de binários Oracle instalado no SQL Server Distributor, certifique-se de que as variáveis de ambiente relacionadas com o Oracle Home estão corretamente definidas. Se alterar os valores das variáveis de ambiente, tem de parar e reiniciar o SQL Server para que a alteração tenha efeito.

Para mais informações sobre como configurar e testar a conectividade, consulte "Instalação e Configuração do Software de Rede Cliente Oracle no Distribuidor SQL Server" em Configurar um Publisher Oracle.

O Oracle Publisher está associado a outro Distribuidor

Um Oracle Publisher só pode estar associado a um distribuidor SQL Server. Se um distribuidor diferente estiver associado ao Oracle Publisher, retire-o antes de usar outro distribuidor. Se não eliminar primeiro o distribuidor, recebe uma das seguintes mensagens de erro:

  • "A instância do servidor Oracle '<OraclePublisherName>' foi previamente configurada para usar '<SQLServerDistributorName>' como seu Distribuidor. Para começar a usar '<NewSQLServerDistributorName>' como seu Distribuidor, deve remover a configuração atual de replicação na instância do servidor Oracle, o que irá apagar todas as publicações nessa instância do servidor."

  • "O servidor Oracle '<OracleServerName>' já está definido como publisher '<OraclePublisherName>' no distribuidor '<SQLServerDistributorName>.< DistributionDatabaseName>'. Elimine o publicador ou o sinónimo público '<NomeDoSinónimo>' para o recriar.

Quando se elimina um Oracle Publisher, os objetos de replicação na base de dados Oracle são automaticamente limpos. No entanto, em alguns casos, é preciso limpar manualmente os objetos de replicação da Oracle. Para limpar manualmente objetos de replicação Oracle criados por replicação:

  1. Ligue-se ao editor Oracle com permissões de DBA.

  2. Execute o comando SQL DROP PUBLIC SYNONYM MSSQLSERVERDISTRIBUTOR;.

  3. Emita o comando SQL DROP USER <replication_administrative_user_schema>``CASCADE;.

O erro SQL Server 21663 é apresentado relativamente à ausência de uma chave primária

Artigos em publicações transacionais devem ter uma chave primária válida. Se não tiverem uma chave primária válida, recebe a seguinte mensagem de erro quando tenta adicionar um artigo:

"Nenhuma chave primária válida encontrada para a tabela fonte [<TableOwner>].[<TableName>]"

Para informações sobre os requisitos para chaves primárias, consulte a secção "Índices e Restrições Únicas" no artigo Considerações e Limitações de Design para Editoras Oracle.

O erro 21642 do SQL Server é gerado relativamente a um início de sessão duplicado para um servidor ligado

Quando configura inicialmente um Publicador Oracle, o processo cria uma entrada de servidor ligado para a ligação entre o Publicador e o Distribuidor. O servidor ligado tem o mesmo nome do nome do serviço Oracle TNS. Se tentar criar um servidor ligado com o mesmo nome, verá a seguinte mensagem de erro:

"Editores heterogéneos precisam de um servidor ligado. Já existe um servidor ligado chamado '<LinkedServerName>'. Por favor, remova o servidor ligado ou escolha um nome de editora diferente."

Este erro pode ocorrer se tentar criar o servidor ligado diretamente ou se anteriormente perdeu a relação entre o Oracle Publisher e o SQL Server Distributor, e agora estiver a tentar reconfigurá-la. Se receber este erro ao tentar reconfigurar o Publisher, remova o servidor ligado utilizando sp_dropserver (Transact-SQL).

Se precisar de se ligar ao Oracle Publisher através de uma ligação a um servidor ligado, crie outro nome de serviço TNS e, em seguida, utilize esse nome ao chamar o sp_addlinkedserver (Transact-SQL). Para informações sobre como criar nomes de serviços TNS, consulte a documentação da Oracle.

É gerado o erro 21617 do SQL Server

A Oracle publishing utiliza a aplicação Oracle SQL*PLUS para descarregar o pacote de código de suporte ao Publisher para a base de dados Oracle. Antes de tentar configurar o Oracle Publisher, o SQL Server verifica se o SQL*PLUS é acessível através do caminho do sistema no Distribuidor. Se o SQL*PLUS não puder ser carregado, é mostrada a seguinte mensagem de erro:

"Impossível correr SQL*PLUS. Certifique-se de que uma versão atual do código cliente Oracle está instalada no distribuidor."

Tente localizar o SQLPLUS no Distribuidor. Para uma instalação cliente Oracle 10g, o nome deste executável é sqlplus.exe. Normalmente é instalado em %ORACLE_HOME%/bin. Para verificar se o caminho do SQLPLUS aparece no caminho do sistema, examine o valor da variável do sistema Caminho:

  1. Clique com o botão direito do rato em O Meu Computador e, em seguida, clique em Propriedades.

  2. Clique no separador Avançado e, em seguida, clique em Variáveis de ambiente.

  3. Na caixa de diálogo Variáveis de Ambiente , na lista de variáveis do Sistema , selecione a variável Path e depois clique em Editar.

  4. Na caixa de diálogo Editar Variável do Sistema : se o caminho para a pasta que contém sqlplus.exe não estiver presente na caixa de texto Valor da Variável , edite a cadeia para a incluir.

  5. Clica em OK em cada caixa de diálogo aberta para sair e guardar as alterações.

Se não conseguir localizar sqlplus.exe no Distribuidor, instale uma versão atual do software cliente Oracle no Distribuidor. Para obter mais informações, consulte Configurar um editor Oracle.

É gerado o erro 21620 do SQL Server

Se estiver a ligar-se a uma base de dados Oracle anterior à versão 8.1, a publicação Oracle exige que o software cliente Oracle instalado no Distribuidor seja da versão 9. Se estiver a ligar-se a uma base de dados Oracle versão 8.1 ou posterior, use o software cliente Oracle versão 10 ou posterior.

Antes de tentar configurar o Oracle Publisher, a Oracle Publishing verifica se a versão do SQL*PLUS acessível através do caminho do sistema no Distribuidor é a versão 9 ou posterior. Se não estiver, é mostrada a seguinte mensagem de erro:

"A versão do SQL*PLUS acessível através da variável Path do sistema não é suficientemente atual para suportar a publicação da Oracle. Certifique-se de que uma versão atual do código cliente Oracle está instalada no distribuidor."

Se tiver várias versões do software cliente Oracle instaladas no Distribuidor, certifique-se de que a versão mais recente é pelo menos a versão 9 e que a variável de caminho do sistema se refere primeiro a esta versão (referências a outras versões podem aparecer desde que a mais recente apareça primeiro). Para mais informações sobre como editar a variável de sistema PATH, consulte a secção "SQL Server is Raised" anteriormente neste artigo.

É gerado o erro 21624 ou o erro 21629 do SQL Server

Para distribuições de 64 bits, a publicação da Oracle utiliza o fornecedor OLE DB da Oracle para Oracle (OraOLEDB.Oracle). Certifique-se de que o fornecedor Oracle OLEDB está instalado e registado no Distribuidor. Se o fornecedor não estiver instalado e registado, verá uma ou ambas as seguintes mensagens de erro:

  • "Não foi possível localizar o fornecedor Oracle OLEDB registado, OraOLEDB.Oracle, no distribuidor '%s'. Certifique-se de que uma versão atual do fornecedor Oracle OLEDB está instalada e registada no distribuidor."

  • "A chave do registo CLSID que indica que o Fornecedor Oracle OLEDB para Oracle, OraOLEDB.Oracle, foi registado não está presente no distribuidor. Certifique-se de que o fornecedor Oracle OLEDB está instalado e registado no distribuidor."

Se estiveres a usar o software cliente Oracle versão 10g, o fornecedor é OraOLEDB10.dll; para a versão 9i, é OraOLEDB.dll. O fornecedor está instalado no %ORACLE_HOME%\BIN (por exemplo, C:\oracle\product\10.1.0\Client_1\bin). Se determinar que o fornecedor Oracle OLEDB não está instalado no Distribuidor, instale-o a partir do disco de instalação do software cliente Oracle fornecido pela Oracle. Para obter mais informações, consulte Configurar um editor Oracle.

Se o fornecedor Oracle OLEDB estiver instalado, certifique-se de que está registado. Para registar a DLL do fornecedor, execute o seguinte comando a partir do diretório onde a DLL está instalada, e depois pare e reinicie a instância do SQL Server:

  1. regsvr32 OraOLEDB10.dll ou regsvr32 OraOLEDB.dll.

O erro 21626 do SQL Server ou o erro 21627 é gerado

Para verificar se o ambiente de publicação Oracle está configurado corretamente, o SQL Server tenta ligar-se ao Oracle Publisher usando as credenciais de login que especificou durante a configuração. Se o SQL Server Distributor não conseguir ligar-se ao Oracle Publisher, verá a seguinte mensagem de erro:

  • "Não é possível ligar-se ao servidor de base de dados Oracle '%s' usando o fornecedor Oracle OLEDB OraOLEDB.Oracle."

Se vir esta mensagem de erro, verifique a conectividade à base de dados Oracle executando SQL*PLUS diretamente, usando o mesmo login e palavra-passe especificados durante a configuração do Oracle Publisher. Para mais informações, consulte a secção "O Distribuidor do SQL Server Não Consegue Conectar-se à Oracle Database Instance" anteriormente neste artigo.

O erro SQL Server 21628 é levantado

Para distribuições de 64 bits, a publicação da Oracle utiliza o fornecedor OLE DB da Oracle para Oracle (OraOLEDB.Oracle). O SQL Server cria uma entrada no registo para permitir que o fornecedor Oracle corra em processo com o SQL Server. Se houver algum problema na leitura ou escrita desta entrada do registo, aparece a seguinte mensagem de erro:

"Não foi possível atualizar o registo do distribuidor '%s' para permitir que o fornecedor Oracle OLEDB OraOLEDB.Oracle corra em processo com SQL Server. Certifique-se de que o login atual está autorizado a modificar chaves de registo pertencentes ao SQL Server."

A publicação por oráculo exige que a entrada do registo exista e esteja definida para 1 para Distribuidores de 64 bits. Se a entrada não existir, o SQL Server tenta criá-la. Se a entrada existir mas estiver definida para 0, a definição não muda e a configuração do Oracle Publisher falha.

Para visualizar e modificar a definição do registo:

  1. Selecione Iniciar e, em seguida, selecione Executar.

  2. Na caixa de diálogo Executar, escreve regedit e depois seleciona OK.

  3. Navegue para HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<InstanceName>\Providers.

    Em Providers, encontre uma pasta chamada OraOLEDB.Oracle. Nesta pasta, localize o valor DWORD AllowInProcess com o valor 1.

  4. Se verificar que AllowInProcess está definido como 0, atualize a entrada do registo para 1:

    1. Clique com o botão direito na entrada e depois selecione Modificar.

    2. Na caixa de diálogo Editar String, introduza 1 no campo Dados do valor.

O erro 21684 do SQL Server é gerado

Se a conta de utilizador administrativo não tiver privilégios suficientes, verá a seguinte mensagem de erro:

"As permissões associadas ao login de administrador para o editor Oracle '%s' não são suficientes."

Para verificar as permissões concedidas ao utilizador, execute a seguinte consulta: SELECT * from session_privs. O resultado deve ser semelhante ao seguinte:

PRIVILEGE

------------------

CREATE SESSION

CREATE TABLE

CREATE PUBLIC SYNONYM

DROP PUBLIC SYNONYM

CREATE VIEW

CREATE SEQUENCE

CREATE PROCEDURE

CREATE TRIGGER

Tem problemas de permissões no esquema do utilizador de replicação

O esquema de utilizador de replicação deve ter as permissões descritas em "Criar o Esquema de Utilizador Manualmente" em Configurar um Oracle Publisher.

Erro Oracle ORA-01000

A replicação utiliza cursores no Oracle Publisher durante o processo de adicionar artigos a uma publicação. É possível exceder o número máximo de cursores disponíveis no Publisher durante este processo. Se isto ocorrer, é apresentado o seguinte erro:

ORA-01000: número máximo de cursores abertos excedido

Para evitar este problema, certifique-se de que a definição de max_open_cursors nas bases de dados Oracle está definida para um número suficientemente alto (pelo menos 1000). Para mais informações sobre esta configuração, consulte a documentação da Oracle.

Erro Oracle ORA-01555

O seguinte erro da base de dados Oracle não está relacionado com a replicação de snapshots; está relacionado com a forma como a Oracle constrói vistas de dados com consistência em leitura:

"ORA-01555: Snapshot demasiado antigo"

Utilizando objetos conhecidos como segmentos de rollback, a Oracle constrói vistas de dados com consistência de leitura a partir do momento em que uma instrução SQL é emitida. Pode ocorrer um erro "snapshot too old" quando a informação de rollback é sobrescrita por outras sessões concorrentes. Antes do Oracle 9i, o método recomendado para reduzir a frequência deste erro era aumentar o tamanho e/ou número de segmentos de rollback e atribuir grandes transações a um segmento de rollback específico.

No Oracle 9i, a Oracle introduziu o conceito de espaço de tabela UNDO, que substitui o segmento de rollback. Para evitar o erro "snapshot too old" no Oracle 9i, recomenda-se que:

  • Crie um espaço de tabelas UNDO com uma quantidade adequada de espaço livre.

  • Defina a garantia de retenção no espaço de tabela (Oracle 10G e superior).

  • Configure os parâmetros de inicialização da Oracle UNDO_MANAGEMENT e UNDO_RETENTION.

Para mais detalhes sobre como evitar o erro "snapshot too old", consulte a documentação da Oracle.

Erro de oráculo ORA-22285

Se uma tabela incluir uma coluna BFILE, os dados dessa coluna são armazenados no sistema de ficheiros. Deve conceder à conta de utilizador administrativa da replicação acesso ao diretório onde os dados são armazenados, utilizando a seguinte sintaxe:

GRANT READ ON DIRECTORY <directory_name> TO <replication_administrative_user_schema>

Se não conceder acesso, o Agente Leitor de Registo gera o seguinte erro:

"ORA-22285: diretório ou ficheiro inexistente para operação FILEOPEN"

Alterações que exigem reconfiguração do Publisher

Se fizer alterações em tabelas ou procedimentos de metadados de replicação, deve eliminar e reconfigurar o Publisher. Para reconfigurar o Publisher, deve abandonar o Publisher e configurá-lo novamente usando o SQL Server Management Studio, Transact-SQL ou RMO. Para mais informações sobre a configuração do Publisher, consulte Configurar um Oracle Publisher.

Para eliminar um Oracle Publisher (SQL Server Management Studio)

  1. Ligue-se ao distribuidor do Oracle Publisher no SQL Server Management Studio e expanda o nó do servidor.

  2. Clique com o botão direito em Replicação e depois clique em Propriedades do Distribuidor.

  3. Na página Publishers da caixa de diálogo Propriedades do Distribuidor, despeje a caixa de seleção do Oracle Publisher.

  4. Clique em OK.

Eliminar um Publicador Oracle (Transact-SQL)