Configurar e solucionar problemas de um servidor vinculado para 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 experimentar ao configurar um servidor vinculado para 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 Edição Enterprise, Microsoft SQL Server 2005 Express Edition, Microsoft edição do grupo de trabalho SQL Server 2005
Número de KB original: 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 experimentar ao configurar um servidor vinculado para o Oracle. A maioria das informações neste artigo é aplicável a ambientes configurados para usar o Provedor OLEDB da Microsoft para Oracle (MSDAORA). Evite usar esse recurso em um novo trabalho de desenvolvimento e planeje modificar aplicativos que atualmente usam esse recurso. Em vez disso, use o provedor OLE DB da Oracle.

Para obter mais informações sobre como configurar um servidor vinculado usando o provedor OLEDB da Oracle, examine Como se atualizar e executar com o Oracle e o Linked Servers.

Importante

A versão atual do Microsoft ODBC Driver para Oracle está em conformidade com a especificação ODBC 2.5, enquanto o Provedor OLE DB para Oracle é um provedor nativo de API OCI do Oracle 7. O driver e o provedor usam o CLIENTE SQL*Net (ou cliente Net8 para Oracle 8x) e a biblioteca OCI (Oracle Call Interface) e outros componentes do cliente Oracle para se conectar aos 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.

Nas versões MDAC (Componentes do Microsoft Data Access) versão 2.5 e posterior, tanto o Microsoft ODBC Driver quanto o Provedor OLE DB dB dão suporte somente ao Oracle 7 e ao Oracle 8i com as seguintes limitações:

  • Não há suporte para tipos de dados específicos do Oracle 8.x, como CLOB, BLOB, BFILE, NCHAR, NCLOB e NVARCHAR2.

  • Não há suporte para o recurso Unicode em servidores Oracle 7.x e 8.x.

  • Várias instâncias de cliente Oracle ou várias casas Oracle não têm suporte porque dependem da primeira ocorrência da casa oracle na variável SYSTEM PATH.

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

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

  • Não há suporte para persistência XML.

  • Não há suporte para versão maior que 8i 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 para o Oracle

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

  2. Instale o driver desejado no computador que está executando SQL Server. A Microsoft só dá suporte a Provedor Microsoft OLE DB para Oracle e o Microsoft ODBC Driver para Oracle. Se você usar um provedor de terceiros ou um driver de terceiros para se conectar à Oracle, entre em contato com o respectivo fornecedor para obter problemas que você possa enfrentar usando seu provedor ou driver.

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

    • Tanto o provedor OLE DB quanto o driver ODBC incluídos no MDAC (Componentes do Microsoft Data Access) exigem 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 SQL Server.

    • Verifique se você tem o MDAC 2.5 ou uma versão posterior instalado no computador que está executando 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 habilitar o MDAC 2.5 ou versões posteriores, para trabalhar com o software cliente Oracle, o registro deve ser modificado no computador cliente que está executando 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 SQL Server depois de instalar o software cliente Oracle.

  5. No computador que está executando 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 para 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 Provedor Microsoft OLE DB para Oracle, use o alias do servidor Oracle configurado no arquivo TNSNames.Ora para o parâmetro @datasrc. Para obter mais informações, confira o tópico "sp_addlinkedserver" no SQL Server Books Online.

Mensagens de erro comuns e como solução de problemas

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, siga essas etapas cuidadosamente. Para mais proteção, faça o backup do registro antes de modificá-lo. Em seguida, você poderá restaurar o registro se ocorrer um problema. Para obter mais informações sobre como fazer backup e restaurar o registro, clique no seguinte número de artigo para exibir o artigo na Base de Dados de Conhecimento da 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 você tiver ao executar uma consulta distribuída.

  • Método 1

    Conecte-se a SQL Server usando 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 do OLEDB" localizado na categoria de evento "Erros e Avisos" no SQL Profiler. O formato de mensagem de erro é o seguinte:

    Interface::O método falhou com o código de erro hex.

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

A seguir está 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 SQL Server versões 2005 ou posteriores, essas mensagens de erro poderão ser ligeiramente diferentes. No entanto, as IDs de erro dessas mensagens de erro são iguais a elas em versões mais antigas do SQL Server. Portanto, você pode identificá-los pelas IDs de erro. Para problemas relacionados ao desempenho, pesquise SQL Server Livros Online para o tópico Otimizando consultas distribuídas.

  • Mensagem 1

    Erro 7399: o provedor OLE DB "%ls" do 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 pôde resolve nome do serviço"

  • Mensagem 2b

    "Os componentes de rede e cliente Oracle(tm) 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. Examine Técnicas para solucionar problemas de conectividade na seção do servidor Oracle abaixo para solução de problemas adicionais.

  • Mensagem 3

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

    Verifique se o arquivo MSDAORA.dll está registrado corretamente. (O arquivo MSDAORA.dll é o provedor do Microsoft OLE DB para arquivo Oracle.) Use RegSvr32.exe para registrar Provedor Microsoft OLE DB para Oracle.

    Observação

    Se você usar um provedor Oracle de terceiros e seu provedor Oracle não puder executar fora de um processo de SQL Server, habilite-o para executar 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 chave do registro a seguir. 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 inprocess para provedores usando SQL Server Management Studio (SSMS).

    1. Abra o SSMS e conecte-se à sua instância de SQL Server.
    2. Em Pesquisador de Objetos, navegue atéProvedoresde Servidores>vinculados> de 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, marcar a caixa Habilitar para a opção Permitir inprocessamento.
  • Mensagem 4

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

    Essa mensagem de erro indica que o servidor vinculado não tem o mapeamento de logon correto. Você pode executar o sp_helplinkedsrvlogin procedimento armazenado para definir corretamente as informações de logon. 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' do provedor OLE DB 'MSDAORA' para servidor vinculado "%ls". A tabela especificada não existe. [Mensagem retornada do provedor OLE/DB: a tabela não existe.] [Provedor OLE/DB retornado mensagem: 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 de esquema e/ou catálogo para o provedor OLE DB '%ls' para 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 servidor vinculado "%ls".

    Erro 7314: o provedor OLE DB "%ls" para 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 nessa tabela.

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

    No lado oracle, uma tabela ou uma coluna que é criada sem aspas duplas é armazenada na maiúscula. Se a tabela ou a coluna estiver entre aspas duplas, a tabela ou a coluna serão armazenadas 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 se conectar 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. Falha no logon do msg 18456, Nível 14, Estado 1, Logon da Linha 1 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 do sistema operacional no qual não há suporte para a delegação de segurança, Windows NT logons autenticados precisam de um mapeamento explícito para um logon remoto e senha criado usando sp_addlinkedsrvlogin.

  • Mensagem 7

    Erro 7391: A operação não pôde ser executada porque o provedor OLE DB 'MSDAORA' para servidor vinculado "%ls" não pôde iniciar uma transação distribuída. Rastreamento de erro 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 for carregado, você não poderá executar transações distribuídas no Oracle usando Provedor Microsoft OLE DB para Oracle ou usando o Microsoft ODBC Driver para Oracle. Se você estiver usando um provedor de terceiros e receber o Erro 7391, verifique se o provedor OLE DB que você está usando dá suporte a transações distribuídas. Se o provedor OLE DB der 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 [Provedor OLE/DB 'MSDAORA' ITransactionLocal::StartTransaction retornado 0x8004d013: ISOLEVEL=4096].

    O provedor OLE DB retornou o erro 7392 porque apenas uma transação pode estar ativa para esta sessão. Esse erro indica que uma instrução de modificação de dados está sendo tentada em relação a 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 dá suporte a transações aninhadas. 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 for ON, 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 dê suporte a transações aninhadas.

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

Para depurar os problemas de conectividade oracle com o driver ODBC da Microsoft para Oracle ou o Provedor Microsoft OLE DB 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ê terá uma instalação ou configuração incorreta dos Componentes do Cliente Oracle ou não criou corretamente um alias de serviço TNS (Transparent Network Substrate) para o servidor Oracle quando você usou o utilitário SQL*Net Easy Configuration ou Oracle Net8 Easy Configuration. Entre em contato com seu DBA (administrador de banco de dados Oracle) 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 do SQL*Net) instalada no computador. O driver ODBC da Microsoft para Oracle e o Provedor Microsoft OLE DB 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 seu computador para que a conectividade ODBC/OLE DB funcione corretamente.

    Observação

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

  3. Se o cliente Oracle estiver instalado e você receber um erro que indica que os Componentes do Cliente Oracle 7.3 ou posterior devem ser instalados no computador, verifique se a variável ambiental 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 pasta à variável PATH para resolve 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. Verifique se as DLLs do Componente do Cliente Oracle (por exemplo, o arquivo Core40.dll e o arquivo Ora*.dll) não existem fora da pasta Oracle_Root ou subpastas.

  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 com 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 do 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