问题描述
我正在创建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链接,我的网关位于“中性”计算机上。就像我说的那样,没关系,因为在通信路径的每个链接都在走的时候我们需要保持直立。
-
在listener.ora的SID_LIST部分中,您有两个相同的“ SID_NAME = CLRExtProc”条目
-
在listener.ora的SID_LIST部分中,您似乎没有网关条目的SID_NAME为“(SID_NAME =)”。
-
在listener.ora中,使用(HOST = Serverlab3)配置了侦听器。 Serverlab3可以解析为IP地址吗?
-
数据库的ORACLE_HOME / network / admin中的tnsnames.ora是否具有数据库链接?
-
您显示的tnsnames条目具有“(HOST = localhost)”。这意味着请求将循环回到请求计算机,并转到地址127.0.0.1。您可能应该更正它,以指定侦听器的实际主机名或IP地址。
-
在您的tnsame中,您通过服务名称指定了连接。使用网关时,在这种情况下,应改为指定SID。
您问“一个问题:在TNSNAMES中,主机必须是LOCALHOST和端口1521”。 HOST必须指定运行侦听器和网关的主机。 PORT必须是在其上配置侦听器的端口,很少有理由使端口不是1521。
我在https://edstevensdba.wordpress.com/2018/09/19/the-oracle-transparent-gateway/上写了一篇带图片的冗长文章