Compartilhar via


Configurar e solucionar problemas de um servidor vinculado a um banco de dados Oracle no SQL Server

Este artigo descreve como configurar um servidor vinculado de um computador que está executando o Microsoft SQL Server para um banco de dados Oracle e fornece etapas básicas de solução de problemas para erros comuns que você pode enfrentar ao configurar um servidor vinculado a um banco de dados Oracle.

Versão original do produto: Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server 2005 Express Edition, Microsoft SQL Server 2005 Workgroup Edition
Número original do KB: 280106

Resumo

Este artigo descreve como configurar um servidor vinculado de um computador que está executando o Microsoft SQL Server para um banco de dados Oracle e fornece etapas básicas de solução de problemas para erros comuns que você pode enfrentar ao configurar um servidor vinculado ao Oracle. A maioria das informações neste artigo é aplicável a ambientes configurados para usar o Microsoft OLEDB Provider for Oracle (MSDAORA). Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. Use o provedor OLE DB da Oracle.

Para obter mais informações sobre como configurar um servidor vinculado usando o provedor OLEDB da Oracle, consulte Como começar a usar o Oracle e os Servidores Vinculados.

Importante

A versão atual do Microsoft ODBC Driver for Oracle está em conformidade com a especificação ODBC 2.5, enquanto o OLE DB Provider for Oracle é um provedor de API Oracle 7 OCI nativo. O driver e o provedor usam o cliente SQL*Net (ou cliente Net8 para Oracle 8x) e a biblioteca Oracle Call Interface (OCI) e outros componentes do cliente Oracle para estabelecer conexão com bancos de dados Oracle e recuperar dados. Os componentes do cliente Oracle são importantes e devem ser configurados corretamente para se conectar com êxito aos bancos de dados Oracle usando o driver e o provedor.

A partir do Microsoft Data Access Components (MDAC) versão 2.5 e versões posteriores, o Microsoft ODBC Driver e o OLE DB Provider dão suporte SOMENTE ao Oracle 7 e ao Oracle 8i com as seguintes limitações:

  • Os tipos de dados específicos do Oracle 8.x, como CLOB, BLOB, BFILE, NCHAR, NCLOB e NVARCHAR2, não são suportados.

  • O recurso Unicode em servidores Oracle 7.x e 8.x não é suportado.

  • Várias instâncias de cliente Oracle, ou vários Oracle homes, não são suportados porque dependem da primeira ocorrência do Oracle home na variável SYSTEM PATH.

  • Não há suporte para o retorno de vários conjuntos de resultados de um procedimento armazenado ou instrução SQL em lote usando ADO ou OLEDB.

  • Não há suporte para junções externas aninhadas.

  • A persistência XML não é suportada.

  • A versão maior que 8i não é suportada usando esses drivers.

Observação

Os produtos de terceiros descritos neste artigo são fabricados por empresas que são independentes da Microsoft. A Microsoft não fornece garantias, implícitas ou de outro tipo, em relação ao desempenho ou à confiabilidade desses produtos.

Etapas para configurar um servidor vinculado ao Oracle

  1. Você deve instalar o software cliente Oracle no computador que está executando o SQL Server em que o servidor vinculado está configurado.

  2. Instale o driver desejado no computador que está executando o SQL Server. A Microsoft oferece suporte apenas ao Microsoft OLE DB Provider for Oracle e ao Microsoft ODBC Driver for Oracle. Se você usar um provedor ou driver de terceiros para se conectar à Oracle, deverá entrar em contato com o respectivo fornecedor para quaisquer problemas que possa ter ao usar seu provedor ou driver.

  3. Se você usar o Microsoft OLE DB Provider for Oracle e o Microsoft ODBC Driver for Oracle, considere o seguinte:

    • O provedor OLE DB e o driver ODBC incluídos no Microsoft Data Access Components (MDAC) exigem o SQL*Net 2.3.x ou uma versão posterior. Você deve instalar o software cliente Oracle 7.3.x, ou uma versão posterior, no computador cliente. O computador cliente é o computador que está executando o SQL Server.

    • Verifique se você tem o MDAC 2.5 ou uma versão posterior instalado no computador que está executando o SQL Server. Com o MDAC 2.1 ou com uma versão anterior, você não pode se conectar a bancos de dados que usam o Oracle 8. x ou uma versão posterior.

    • Para permitir que o MDAC 2.5 ou versões posteriores funcionem com o software cliente Oracle, o registro deve ser modificado no computador cliente que está executando o SQL Server, conforme indicado na tabela a seguir.

      Oracle
      Client               Microsoft Windows 2000 and later versions
      --------------------------------------------------------------------------
      
      7.x                  [HKEY_LOCAL_MACHINE\SOFTWARE
                           Microsoft\MSDTC\MTxOCI]
                           "OracleXaLib"="xa73.dll"
                           "OracleSqlLib"="SQLLib18.dll"
                           "OracleOciLib"="ociw32.dll"
      
      8.0                  [HKEY_LOCAL_MACHINE\SOFTWARE
                           \Microsoft\MSDTC\MTxOCI]
                           "OracleXaLib"="xa80.dll"
                           "OracleSqlLib"="sqllib80.dll"
                           "OracleOciLib"="oci.dll"
      
      8.1                  [HKEY_LOCAL_MACHINE\SOFTWARE
                           \Microsoft\MSDTC\MTxOCI]
                           "OracleXaLib"="oraclient8.dll"
                           "OracleSqlLib"="orasql8.dll"
                           "OracleOciLib"="oci.dll"
      
  4. Reinicie o computador que está executando o SQL Server depois de instalar o software cliente Oracle.

  5. No computador que está executando o SQL Server, configure um servidor vinculado usando o script a seguir.

    -- Adding linked server (from SQL Server Books Online):
    /* sp_addlinkedserver [@server =] 'server'[, [@srvproduct =] 'product_name']
     [, [@provider =] 'provider_name']
     [, [@datasrc =] 'data_source']
     [, [@location =] 'location'] [, [@provstr =] 'provider_string'] 
     [, [@catalog =] 'catalog']
    */
    
    EXEC sp_addlinkedserver 'Ora817Link', 'Oracle', 'MSDAORA', 'oracle817'
    
    -- Adding linked server login:
    /* sp_addlinkedsrvlogin [@rmtsrvname =] 'rmtsrvname'[,[@useself =] 'useself']
     [,[@locallogin =] 'locallogin']
     [,[@rmtuser =] 'rmtuser']
     [,[@rmtpassword =] 'rmtpassword']
    */
    
    EXEC sp_addlinkedsrvlogin 'Ora817Link', 'FALSE',NULL, 'scott', 'tiger'
    
    -- Help on the linked server:
    EXEC sp_linkedservers
    EXEC sp_helpserver
    select * from sysservers
    

    Observação

    Se você usar o Microsoft ODBC Driver for Oracle, poderá usar o @datasrc parâmetro para especificar um nome DSN. Para uma conexão sem DSN, a cadeia de caracteres do provedor é fornecida por meio do parâmetro @provstr . Com o Microsoft OLE DB Provider for Oracle, use o alias do servidor Oracle configurado no arquivo TNSNames.Ora para o parâmetro @datasrc . Para obter mais informações, consulte o tópico "sp_addlinkedserver" nos Manuais Online do SQL Server.

Mensagens de erro comuns e como solucioná-las

Importante

Esta seção, método ou tarefa contém etapas que descrevem como modificar o Registro. Entretanto, sérios problemas poderão ocorrer caso você modifique o Registro incorretamente. Portanto, certifique-se de seguir essas etapas com atenção. Para proteção acrescida, faça backup do Registro antes de modificá-lo. Em, é possível restaurar o Registro caso ocorra um problema. Para obter mais informações sobre como fazer backup e restaurar o registro, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento Microsoft: 322756 Como fazer backup e restaurar o registro no Windows

Você pode usar um dos dois métodos a seguir para recuperar informações estendidas sobre qualquer erro que ocorra ao executar uma consulta distribuída.

  • Método 1

    Conecte-se ao SQL Server usando o SQL Server Management Studio e execute o código a seguir para ativar o sinalizador de rastreamento 7300.

    DBCC Traceon(7300)
    
  • Método 2

    Capture o evento "Erros OLEDB" localizado na categoria de evento "Erros e Avisos" no SQL Profiler. O formato da mensagem de erro é o seguinte:

    Interface::Method falhou com o código de erro hexadecimal.

    Você pode pesquisar o código de erro hexadecimal no arquivo Oledberr.h incluído no SDK (Software Development Kit) do MDAC.

Veja a seguir uma lista de mensagens de erro comuns que podem ocorrer, juntamente com informações sobre como solucionar problemas da mensagem de erro.

Observação

Se você estiver usando o SQL Server 2005 ou versões posteriores, essas mensagens de erro poderão ser um pouco diferentes. No entanto, as IDs de erro dessas mensagens de erro são as mesmas que em versões mais antigas do SQL Server. Portanto, você pode identificá-los pelas IDs de erro. Para problemas relacionados ao desempenho, pesquise nos Manuais Online do SQL Server o tópico Otimizando consultas distribuídas.

  • Mensagem 1

    Erro 7399: o provedor OLE DB "%ls" para o servidor vinculado "%ls" relatou um erro. %ls

    Ative o sinalizador de rastreamento 7300 ou use o SQL Profiler para capturar o evento Erros OLEDB para recuperar informações de erro OLEDB estendidas.

  • Mensagem 2a

    "ORA-12154: TNS:não foi possível resolver o nome do serviço"

  • Mensagem 2b

    "O cliente Oracle(tm) e os componentes de rede não foram encontrados. Esses componentes são fornecidos pela Oracle Corporation e fazem parte da instalação do software cliente Oracle versão 7.3.3 (ou superior)"

    Esses erros ocorrem quando há um problema de conectividade com o servidor Oracle. Consulte a seção Técnicas para solucionar problemas de conectividade com o servidor Oracle abaixo para obter solução de problemas adicionais.

  • Mensagem 3

    Erro 7302: Não é possível criar uma instância do provedor OLE DB 'MSDAORA' para o servidor vinculado "%ls".

    Certifique-se de que o arquivo MSDAORA.dll esteja registrado corretamente. (O arquivo MSDAORA.dll é o provedor OLE DB da Microsoft para o arquivo Oracle.) Use RegSvr32.exe para registrar o Microsoft OLE DB Provider for Oracle.

    Observação

    Se você usar um provedor Oracle de terceiros e seu provedor Oracle não puder ser executado fora de um processo do SQL Server, habilite-o para ser executado em processo alterando as opções do provedor. Para alterar as opções do provedor, use um dos seguintes métodos:

    • Método 1: Localize a seguinte chave de registro. Em seguida, altere o valor da entrada AllowInProcess (DWORD) para 1. Essa chave do Registro está localizada sob o nome do provedor correspondente: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\ProviderName.

    • Método 2: siga estas etapas para definir a opção Permitir em processo para provedores que usam o SSMS (SQL Server Management Studio).

    1. Abra o SSMS e conecte-se à instância do SQL Server.
    2. No Pesquisador de Objetos, navegue até Provedores de Servidores>Vinculados a Objetos>de Servidor.
    3. Clique com o botão direito do mouse no provedor que você deseja configurar e selecione Propriedades.
    4. Na janela Opções do provedor, marque a caixa Habilitar para a opção Permitir em processo.
  • Mensagem 4

    Erro 7303: Não é possível inicializar o objeto de fonte de dados do provedor OLE DB 'MSDAORA' para o servidor vinculado "%ls". [Mensagem retornada do provedor OLE/DB: ORA-01017: nome de usuário/senha inválidos; logon negado] Rastreamento de erro do OLE DB [OLE/DB Provider 'MSDAORA' IDBInitialize::Initialize retornado 0x80040e4d].

    Essa mensagem de erro indica que o servidor vinculado não possui o mapeamento de login correto. Você pode executar o sp_helplinkedsrvlogin procedimento armazenado para definir as informações de logon corretamente. Além disso, verifique se você especificou os parâmetros corretos para a configuração do servidor vinculado.

  • Mensagem 5

    Erro 7306: Não é possível abrir a tabela ' %ls A tabela especificada não existe. [Mensagem retornada pelo provedor OLE/DB: A tabela não existe.][Mensagem retornada pelo provedor OLE/DB: ORA-00942: tabela ou exibição não existe] Rastreamento de erro OLE DB [Provedor OLE/DB 'MSDAORA' IOpenRowset::OpenRowset retornado 0x80040e37: A tabela especificada não existe.].

    Erro 7312: uso inválido do esquema e/ou catálogo para o provedor OLE DB '%ls' para o servidor vinculado "%ls". Um nome de quatro partes foi fornecido, mas o provedor não expõe as interfaces necessárias para usar um catálogo e/ou esquema.

    Erro 7313: Um esquema ou catálogo inválido foi especificado para o provedor "%ls" para o servidor vinculado "%ls".

    Erro 7314: O provedor OLE DB "%ls" para o servidor vinculado "%ls" não contém a tabela "%ls". A tabela não existe ou o usuário atual não tem permissões sobre essa tabela.

    Se você receber essas mensagens de erro, uma tabela pode estar ausente no esquema Oracle ou você pode não ter permissões nessa tabela. Verifique se o nome do esquema foi digitado usando letras maiúsculas. O caso alfabético da tabela e das colunas deve ser conforme especificado nas tabelas do sistema Oracle.

    No lado do Oracle, uma tabela ou coluna criada sem aspas duplas é armazenada em maiúsculas. Se a tabela ou a coluna estiver entre aspas duplas, a tabela ou a coluna será armazenada como está.

    A chamada a seguir mostra se a tabela existe no esquema Oracle. Essa chamada também mostra o nome exato da tabela.

    sp_tables_ex @table_server=Ora817Link, @table_schema='your_schema_name'
    
  • Mensagem 6

    Erro 7413: Não foi possível conectar-se ao servidor vinculado '%ls' (Provedor OLE DB '%ls'). Habilite a delegação ou use um logon de SQL Server remoto para o usuário atual. Msg 18456, Nível 14, Estado 1, Linha 1 Falha no login para o usuário ''.

    Essa mensagem de erro indica que uma consulta distribuída está sendo tentada para um logon autenticado do Microsoft Windows sem um mapeamento de logon explícito. Em um ambiente de sistema operacional no qual a delegação de segurança não é suportada, os logons autenticados do Windows NT precisam de um mapeamento explícito para um logon remoto e uma senha criados usando sp_addlinkedsrvlogino .

  • Mensagem 7

    Erro 7391: A operação não pôde ser executada porque o provedor OLE DB 'MSDAORA' para o servidor vinculado "%ls" não pôde iniciar uma transação distribuída. Rastreamento de erro do OLE DB [Provedor OLE/DB 'MSDAORA' ITransactionJoin::JoinTransaction retornado 0x8004d01b]

    Verifique se as versões do OCI estão registradas corretamente, conforme descrito anteriormente neste artigo.

    Observação

    Se as entradas do Registro estiverem todas corretas, o arquivo MtxOCI.dll será carregado. Se o arquivo MtxOCI.dll não estiver carregado, você não poderá executar transações distribuídas no Oracle usando o Microsoft OLE DB Provider for Oracle ou usando o Microsoft ODBC Driver for Oracle. Se você estiver usando um provedor de terceiros e receber o Erro 7391, verifique se o provedor OLE DB que você está usando oferece suporte a transações distribuídas. Se o provedor OLE DB oferecer suporte a transações distribuídas, verifique se o MSDTC (Coordenador de Transações Distribuídas da Microsoft) está em execução e tem o acesso à rede habilitado.

  • Mensagem 8

    Erro 7392: Não é possível iniciar uma transação para o provedor OLE DB 'MSDAORA' para o servidor vinculado "%ls". Rastreamento de erro OLE DB [OLE/DB Provider 'MSDAORA' ITransactionLocal::StartTransaction retornado 0x8004d013: ISOLEVEL=4096].

    O provedor OLE DB retornou o erro 7392 porque apenas uma transação pode estar ativa para essa sessão. Esse erro indica que uma instrução de modificação de dados está sendo tentada em um provedor OLE DB quando a conexão está em uma transação explícita ou implícita e o provedor OLE DB não oferece suporte a transações aninhadas. O SQL Server requer esse suporte para que, em determinadas condições de erro, ele possa encerrar os efeitos da instrução de modificação de dados enquanto continua com a transação.

    Se SET XACT_ABORT estiver ON, o SQL Server não exigirá suporte a transações aninhadas do provedor OLE DB. Portanto, execute SET XACT_ABORT ON antes de executar instruções de modificação de dados em tabelas remotas em uma transação implícita ou explícita. Faça isso caso o provedor OLE DB que você está usando não ofereça suporte a transações aninhadas.

Técnicas para solucionar problemas de conectividade com o servidor Oracle

Para depurar os problemas de conectividade do Oracle com o driver ODBC da Microsoft para Oracle ou o Microsoft OLE DB Provider para Oracle, siga estas etapas:

  1. Use o utilitário Oracle SQL Plus (um utilitário de consulta baseado em linha de comando) para verificar se você pode se conectar ao Oracle e recuperar dados.

    Observação

    Se você não puder se conectar ao Oracle e recuperar dados, você tem uma instalação ou configuração incorreta dos Componentes do Oracle Client ou não criou corretamente um alias de serviço TNS (Transparent Network Substrate) para o servidor Oracle quando usou o utilitário SQL*Net Easy Configuration ou Oracle Net8 Easy Configuration. Entre em contato com o administrador de banco de dados Oracle (DBA) para verificar se os componentes Oracle que você deve ter estão instalados e configurados corretamente.

  2. Verifique a versão do cliente Oracle (versão SQL*Net) instalada no computador. O driver ODBC da Microsoft para Oracle e o Microsoft OLE DB Provider para Oracle exigem a instalação do SQL*Net versão 2.3 ou posterior no computador cliente.

    A conectividade do SQL Plus (a ferramenta de consulta do cliente Oracle) pode parecer funcionar, mas você deve reiniciar o computador para que a conectividade ODBC/OLE DB funcione corretamente.

    Observação

    Quando você usa o Oracle 8i, o arquivo .rgs está vazio.

  3. Se o cliente Oracle estiver instalado e você receber um erro que indique que o Oracle Client Components 7.3 ou posterior deve ser instalado no computador, verifique se a variável de ambiente PATH no computador cliente contém a pasta na qual o cliente Oracle foi instalado, como Oracle_Root\Bin. Se você não conseguir encontrar essa pasta, adicione-a à variável PATH para resolver o erro.

  4. Verifique se o arquivo Ociw32.dll está na pasta Oracle_Root\bin . Esse arquivo .dll não pode existir em nenhum outro local no computador cliente. Certifique-se de que as DLLs do Componente do Oracle Client (por exemplo, o arquivo Core40.dll e o arquivo Ora*.dll) não existam fora da pasta ou subpastas Oracle_Root .

  5. Verifique se uma única versão do cliente Oracle está instalada no computador. Várias versões do SQL*Net não podem existir no mesmo computador cliente com interferências e operações críticas (por exemplo, pesquisas de TNS e alias).

  6. A Microsoft recomenda que você tenha uma instalação local do cliente Oracle e não faça isso mapeando um cliente Oracle remoto em seu computador e inclua-o no caminho do sistema para se conectar ao Oracle por meio de ODBC/OLE DB. Mas o provedor e o driver são testados com um cliente Oracle instalado localmente e não em um compartilhamento de rede.

Confira também