创建DBLINK Oracle到SQL Server的错误

问题描述

我正在创建DBLINK Oracle(11gR2)(Windows Server 2008)到sql Server(Windows 10)。

我已经安装了Oracle Gateway。

我在ODBC数据源管理器中创建了一种数据字体,连接正常。他叫Integra。

我更改了文件listener.ora,tnsnames.ora,sqlnet.ora和initIntegra.ora。

遵循我的设置:

服务器Oracle无IP:192.168.1.22

服务器sqlServer否IP:192.168.1.18

Listener.ora

SID_LIST_LISTENER =
  (SID_LIST =
(SID_DESC =
  (SID_NAME = CLRExtProc)
  (ORACLE_HOME = D:\app\product\11.2.0\dbhome_1)
  (PROGRAM = extproc)
  (ENVS = "EXTPROC_DLLS=ONLY:D:\app\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
(SID_DESC =
  (SID_NAME = CLRExtProc)
  (ORACLE_HOME = D:\app\product\11.2.0\dbhome_1)
  (PROGRAM = extproc)
  (ENVS = "EXTPROC_DLLS=ONLY:D:\app\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
(SID_DESC =
  (SID_NAME = )
  (ORACLE_HOME = D:\app\product\11.2.0\dbhome_1)
  (PROGRAM = dg4odbc)
)
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = Serverlab3)(PORT = 1521))
    )
  )
ADR_BASE_LISTENER = D:\app

tnsnames.ora

Integra =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = Integra)
    )
  )

initIntegra.ora

# This is a sample agent init file that contains the HS parameters that are
# needed for the Database Gateway for ODBC
#
# HS init parameters
#
#
HS_FDS_CONNECT_INFO= Integra
#
# Environment variables required for the non-Oracle system
#
#set <envvar>=<value>

sqlnet.ora

# This file is actually generated by netca. But if customers choose to 
# install "Software Only",this file wont exist and without the native 
# authentication,they will not be able to connect to the database on NT.
sqlNET.AUTHENTICATION_SERVICES = (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES,EZCONNECT)

创建DBLINK

CREATE DATABASE LINK INTEGRA CONNECT TO "sa" IDENTIFIED BY "senha" USING 'Integra';

select * from tabela@INTEGRA;

sql错误[28546] [99999]:ORA-28546:连接初始化失败,可能是Net8管理员错误。 ORA-02063:INTEGRA的前一行 *

注意:我在ODBC管理器中的数据源名称为Integra。并且ODBC Windows管理员进行的连接测试非常有效。

一个问题: 在TNSNAMES中,主机必须是LOCALHOST和端口1521吗?

谢谢。

解决方法

我发现有太多问题无法在评论中列出。有些与您的问题有关,有些仅表示粗心或不了解。

您的网关是否安装在Oracle计算机,MSSQL计算机或其他计算机上?我问,因为很有可能将其安装在任何地方。在我的商店中,我有多个指向多个MSSQL数据库的oracle链接,我的网关位于“中性”计算机上。就像我说的那样,没关系,因为在通信路径的每个链接都在走的时候我们需要保持直立。

  1. 在listener.ora的SID_LIST部分中,您有两个相同的“ SID_NAME = CLRExtProc”条目

  2. 在listener.ora的SID_LIST部分中,您似乎没有网关条目的SID_NAME为“(SID_NAME =)”。

  3. 在listener.ora中,使用(HOST = Serverlab3)配置了侦听器。 Serverlab3可以解析为IP地址吗?

  4. 数据库的ORACLE_HOME / network / admin中的tnsnames.ora是否具有数据库链接?

  5. 您显示的tnsnames条目具有“(HOST = localhost)”。这意味着请求将循环回到请求计算机,并转到地址127.0.0.1。您可能应该更正它,以指定侦听器的实际主机名或IP地址。

  6. 在您的tnsame中,您通过服务名称指定了连接。使用网关时,在这种情况下,应改为指定SID。

您问“一个问题:在TNSNAMES中,主机必须是LOCALHOST和端口1521”。 HOST必须指定运行侦听器和网关的主机。 PORT必须是在其上配置侦听器的端口,很少有理由使端口不是1521。

我在https://edstevensdba.wordpress.com/2018/09/19/the-oracle-transparent-gateway/上写了一篇带图片的冗长文章