Compartilhar via


Solução de problemas do Oracle Publishers

Este tópico lista uma série de problemas que podem surgir ao configurar e usar um Publicador Oracle.

Um erro é gerado em relação ao cliente Oracle e ao software de rede

A conta na qual o Microsoft SQL Server é executado no Distribuidor deve receber permissões de leitura e execução para o diretório (e todos os subdiretórios) em que o software de rede cliente Oracle está instalado. Se as permissões não forem concedidas ou os componentes do cliente Oracle não estiverem instalados corretamente, você receberá a seguinte mensagem de erro:

"Falha na conexão com o servidor com [Provedor OLE DB da Microsoft para Oracle]. O cliente Oracle e os componentes de rede não foram encontrados. Esses componentes são fornecidos pela Oracle Corporation e fazem parte da instalação de software cliente oracle versão 7.3.3 ou posterior. O provedor não poderá funcionar até que esses componentes sejam instalados."

Se um cliente Oracle apropriado tiver sido instalado no Distribuidor, verifique se o SQL Server foi interrompido e reiniciado após a conclusão da instalação do cliente. Isso é necessário para que o SQL Server reconheça os componentes do cliente.

Se você verificou que as permissões são concedidas e se os componentes estão instalados corretamente, mas esse erro persiste, verifique se as configurações do Registro em HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI estão corretas:

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

    • OracleOciLib = oci.dll

    • OracleSqlLib = orasql10.dll

    • OracleXaLib = oraclient10.dll

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

    • OracleOciLib = oci.dll

    • OracleSqlLib = orasql9.dll

    • OracleXaLib = oraclient9.dll

O distribuidor do SQL Server não pode se conectar à instância do Banco de Dados Oracle

Se o Distribuidor do SQL Server não puder se conectar ao Publicador Oracle, verifique se:

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

  • O banco de dados Oracle está online e você pode se conectar a ele usando uma ferramenta como SQL*Plus.

  • A replicação de logon que se conecta ao Publicador Oracle possui permissões suficientes. Para obter mais informações, consulte Configurar um Publicador Oracle.

  • Os nomes TNS definidos durante a configuração do Publicador Oracle são listados no arquivo tnsnames.ora.

  • A página inicial e o caminho corretos do Oracle são usados. Mesmo que você tenha apenas um conjunto de binários Oracle instalados no Distribuidor do SQL Server, verifique se as variáveis de ambiente relacionadas ao Oracle Home estão definidas corretamente. Se você alterar os valores de variável de ambiente, deverá parar e reiniciar o SQL Server para que a alteração entre em vigor.

Para obter mais informações sobre como configurar e testar a conectividade, consulte "Instalando e configurando o Software de Rede do Cliente Oracle no Distribuidor do SQL Server" na configuração de um Publicador Oracle.

O Publicador Oracle está associado a outro distribuidor

Um Publicador Oracle só pode ser associado a um Distribuidor do SQL Server. Se um Distribuidor diferente estiver associado ao Publicador Oracle, ele deverá ser descartado antes que outro Distribuidor possa ser usado. Se o Distribuidor não for desconectado primeiro, você receberá uma das seguintes mensagens de erro:

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

  • "O servidor Oracle '<OracleServerName>' já está definido como publicador '<OraclePublisherName>' no distribuidor '<SQLServerDistributorName>.<DistributionDatabaseName>'. Remova o editor ou remova o sinônimo público '<SynonymName>' para recriar.

Quando um Publicador Oracle é removido, os objetos de replicação no banco de dados Oracle são limpos automaticamente. No entanto, a limpeza manual dos objetos de replicação oracle é necessária em alguns casos. Para limpar manualmente os objetos de replicação oracle criados pela replicação:

  1. Conecte-se ao publicador Oracle com permissões DBA.

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

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

O erro 21663 do SQL Server é gerado em relação à falta de uma chave primária

Os artigos em publicações transacionais devem ter uma chave primária válida. Se eles não tiverem uma chave primária válida, você receberá a seguinte mensagem de erro ao tentar adicionar um artigo:

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

Para obter informações sobre requisitos para chaves primárias, consulte a seção "Índices e restrições exclusivos" no tópico Considerações e limitações de design para editores Oracle.

O erro 21642 do SQL Server é levantado em relação a um login duplicado de servidor vinculado

Quando um Publicador Oracle é configurado inicialmente, uma entrada de servidor vinculada é criada para a conexão entre o Publicador e o Distribuidor. O servidor vinculado tem o mesmo nome que o nome do serviço Oracle TNS. Se você tentar criar um servidor vinculado com o mesmo nome, a seguinte mensagem de erro será mostrada:

"Os editores heterogêneos exigem um servidor vinculado. Já existe um servidor vinculado chamado '<LinkedServerName>'. Remova o servidor vinculado ou escolha um nome de editor diferente."

Esse erro poderá ocorrer se você tentar criar o servidor vinculado diretamente ou se tiver descartado anteriormente a relação entre o Publicador Oracle e o Distribuidor do SQL Server e agora estiver tentando reconfigurá-lo. Se você receber esse erro ao tentar reconfigurar o Publicador, remova o servidor vinculado com sp_dropserver (Transact-SQL).

Se você precisar se conectar ao Publicador Oracle por meio de uma conexão de servidor vinculada, crie outro nome de serviço TNS e use esse nome ao chamar sp_addlinkedserver (Transact-SQL). Para obter informações sobre como criar nomes de serviço TNS, consulte a documentação do Oracle.

Erro do SQL Server 21617 foi gerado

A publicação da Oracle usa o aplicativo Oracle SQL*PLUS para baixar o pacote de código de suporte do Publisher para o banco de dados Oracle. Antes de tentar configurar o Publicador Oracle, o SQL Server verifica se o SQL*PLUS está acessível por meio do caminho do sistema no Distribuidor. Se o SQL*PLUS não puder ser carregado, a seguinte mensagem de erro será mostrada:

"Não é possível executar o SQL*PLUS. Verifique se uma versão atual do código do cliente Oracle está instalada no distribuidor."

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

  1. Clique com o botão direito do mouse em Meu Computadore, em seguida, clique em Propriedades.

  2. Clique na guia Avançado e 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 Caminho e 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 variável , edite a cadeia de caracteres para incluí-la.

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

Se você 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 Publicador Oracle.

Erro 21620 do SQL Server foi gerado

Se você estiver se conectando a um banco de dados Oracle anterior à versão 8.1, a publicação Oracle exigirá que o software de cliente Oracle instalado no Distribuidor seja da versão 9. Se você estiver se conectando a um banco de dados Oracle versão 8.1 ou posterior, recomendamos que o software cliente Oracle seja versão 10 ou posterior.

Antes de tentar configurar o Publicador Oracle, a publicação da Oracle verifica se a versão do SQL*PLUS acessível por meio do caminho do sistema no Distribuidor é a versão 9 ou posterior. Se não estiver, a seguinte mensagem de erro será mostrada:

A versão do SQL*PLUS que é acessível por meio da variável Path do sistema não é atual o suficiente para suportar a publicação Oracle. Verifique se uma versão atual do código do cliente Oracle está instalada no distribuidor."

Se você tiver várias versões do software cliente Oracle instaladas no Distribuidor, verifique se a versão mais atual é pelo menos a versão 9 e se a variável de caminho do sistema se refere primeiro a essa versão (as referências a outras versões podem aparecer desde que a mais recente apareça primeiro). Para obter mais informações sobre como editar a variável de caminho do sistema, consulte a seção "Erro do SQL Server 21617 é gerado" anteriormente neste tópico.

O erro 21624 ou o erro 21629 do SQL Server foi gerado

Para Distribuidores de 64 bits, a publicação Oracle usa o Oracle OLEDB Provider for Oracle (OraOLEDB.Oracle). Verifique se o provedor Oracle OLEDB está instalado e registrado no Distribuidor. Se o provedor não estiver instalado e registrado, uma ou ambas as seguintes mensagens de erro serão mostradas:

  • Não é possível localizar o provedor Oracle OLEDB registrado, OraOLEDB.Oracle, no distribuidor '%s'. Verifique se uma versão atual do provedor Oracle OLEDB está instalada e registrada no distribuidor."

  • "A chave do registro CLSID que indica que o Provedor Oracle OLEDB para Oracle, OraOLEDB.Oracle, foi registrado não está presente no distribuidor. Verifique se o provedor Oracle OLEDB está instalado e registrado no distribuidor."

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

Se o provedor Oracle OLEDB estiver instalado, verifique se ele está registrado. Para registrar a DLL do provedor, execute o seguinte comando do diretório no qual a DLL está instalada e, em seguida, interrompa e reinicie a instância do SQL Server:

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

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

Para verificar se o ambiente de publicação oracle está configurado corretamente, o SQL Server tenta se conectar ao Oracle Publisher com as credenciais de logon especificadas durante a configuração. Se o Distribuidor do SQL Server não puder se conectar ao Publicador Oracle, a seguinte mensagem de erro será mostrada:

  • Não é possível se conectar ao servidor de banco de dados Oracle '%s' usando o provedor OLEDB da Oracle, OraOLEDB.Oracle.

Se essa mensagem de erro for mostrada, verifique a conectividade com o banco de dados Oracle executando SQL*PLUS diretamente usando o mesmo logon e senha especificados durante a configuração do Oracle Publisher. Para obter mais informações, consulte a seção "O Distribuidor do SQL Server não pode se conectar à Instância do Banco de Dados Oracle" anteriormente neste tópico.

O erro 21628 do SQL Server foi gerado

Para Distribuidores de 64 bits, a publicação Oracle usa o Oracle OLEDB Provider for Oracle (OraOLEDB.Oracle). O SQL Server cria uma entrada de registro para permitir que o provedor Oracle seja executado em processo com o SQL Server. Se houver um problema ao ler ou gravar esta entrada do Registro, a seguinte mensagem de erro será mostrada:

"Não é possível atualizar o registro do distribuidor '%s' para permitir que o provedor OraOLEDB.Oracle do Oracle seja executado em processo com o SQL Server. Verifique se o logon atual está autorizado a modificar as chaves do Registro de propriedade do SQL Server."

A publicação do Oracle requer que a entrada do Registro exista e seja definida como 1 para Distribuidores de 64 bits. Se a entrada não existir, o SQL Server tentará criá-la. Se a entrada existir, mas estiver definida como 0, a configuração não será alterada; a configuração do Publicador Oracle falhará.

Para exibir e modificar a configuração do Registro:

  1. Clique em Iniciar e em Executar.

  2. Na caixa de diálogo Executar , digite regedit e clique em OK.

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

    Deve haver uma pasta chamada OraOLEDB.Oracle incluída em Provedores. Dentro dessa pasta deve ser o nome do valor DWORD AllowInProcess, com um valor de 1.

  4. Se você determinar que AllowInProcess está definido como 0, atualize a entrada do Registro para 1:

    1. Clique com o botão direito do mouse na entrada e clique em Modificar.

    2. Na caixa de diálogo Editar Cadeia de Caracteres , digite 1 no campo de dados Valor .

O erro 21684 do SQL Server foi gerado

Se a conta de usuário administrativo não tiver privilégios suficientes, a seguinte mensagem de erro será mostrada:

"As permissões associadas ao logon do administrador para o publicador oracle '%s' não são suficientes."

Para verificar as permissões concedidas ao usuário, execute a seguinte consulta: SELECT * from session_privs. A saída deve ser semelhante ao seguinte:

PRIVILEGE

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

CREATE SESSION

CREATE TABLE

CREATE PUBLIC SYNONYM

DROP PUBLIC SYNONYM

CREATE VIEW

CREATE SEQUENCE

CREATE PROCEDURE

CREATE TRIGGER

Você encontra problemas de permissões para o esquema de usuário de replicação

O esquema de usuário de replicação deve ter as permissões descritas em "Criando o esquema de usuário manualmente" na configuração de um Publicador Oracle.

Erro do Oracle ORA-01000

A replicação utiliza cursores no Publicador Oracle ao adicionar artigos a uma publicação. É possível exceder o número máximo de cursores disponíveis no Publicador durante esse processo. Se isso ocorrer, o seguinte erro será gerado:

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

Para evitar esse problema, verifique se a configuração de max_open_cursors nos bancos de dados Oracle está definida como um número suficientemente alto (pelo menos 1000). Para obter mais informações sobre essa configuração, consulte a documentação do Oracle.

Erro do Oracle ORA-01555

O erro de banco de dados Oracle a seguir não está relacionado à replicação de instantâneo; está relacionado à forma como Oracle constrói visões consistentes de leitura dos dados:

"ORA-01555: Instantâneo muito antigo"

Usando objetos conhecidos como segmentos de reversão, o Oracle constrói exibições de dados consistentes com leitura a partir do momento em que uma instrução SQL é emitida. Um erro "instantâneo muito antigo" pode ocorrer quando as informações de reversão são substituídas por outras sessões simultâneas. Antes do Oracle 9i, o método recomendado de reduzir a frequência desse erro era aumentar o tamanho e/ou o número de segmentos de reversão e atribuir transações grandes a um segmento de reversão específico.

No Oracle 9i, a Oracle introduziu o conceito de espaço de tabela UNDO, que substitui o segmento de reversão. Para evitar o erro "instantâneo muito antigo" no Oracle 9i, é recomendável que você:

  • Crie um espaço de tabela UNDO com uma quantidade apropriada 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 do Oracle UNDO_MANAGEMENT e UNDO_RETENTION.

Para obter mais detalhes sobre como evitar o erro "snapshot muito antigo", consulte a documentação da Oracle.

Erro do Oracle ORA-22285

Se uma tabela incluir uma coluna BFILE, os dados da coluna serão armazenados no sistema de arquivos. A conta de usuário administrativo de replicação deve ter acesso ao diretório no qual os dados são armazenados usando a seguinte sintaxe:

GRANT READ ON DIRECTORY <directory_name> TO <replication_administrative_user_schema>

Se o acesso não for concedido, o seguinte erro será gerado pelo Agente de Leitor de Log:

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

São feitas alterações que exigem a reconfiguração do Publicador

As alterações em tabelas ou procedimentos de metadados de replicação exigem que você remova e reconfigure o Publicador. Para reconfigurar o Publicador, você deve remover o Publicador e configurá-lo novamente usando o SQL Server Management Studio, o Transact-SQL ou o RMO. Para obter informações sobre como configurar o Publicador, consulte Configurar um Publicador Oracle.

Para excluir um Publicador Oracle (SQL Server Management Studio)

  1. Conecte-se ao Distribuidor para o Publicador Oracle no SQL Server Management Studio e expanda o nó do servidor.

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

  3. Na página Publicadores da caixa de diálogo Propriedades do Distribuidor, desmarque a caixa de seleção do Publicador Oracle.

  4. Clique em OK.

Para remover um Publicador Oracle (Transact-SQL)

Consulte Também

Configurar um Publicador Oracle
Visão geral da publicação do Oracle