使用dg4msql问题将Oracle 11gr2连接到Sql Server

时间:2011-01-11 14:59:03

标签: sql-server-2005 oracle11g dblink heterogeneous

对谁可以回应, 我们在Redhat Enterprise Linux 5.4上安装了Oracle 11g r2。我们正在尝试连接到Sql Server 2005,在应用了一些注释后,下面的错误是我们得到的结果: “异构远程代理中的ORA-28513内部错误”。


listener.ora如下:

[oracle@oracledb admin]$ less listener.ora
)
(SID_DESC =
(SID_NAME = dg4msql)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(PROGRAM = dg4msql)
(ENVS=LD_LIBRARY_PATH=/u01/app/oracle/product/11.2.0/db_1/dg4msql/lib:/u01/app/oracle/product/11.2.0/db_1/lib)
)
)

LOGGING_LISTENER = on

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracledb)(PORT = 1521))
)
)

ADR_BASE_LISTENER = /u01/app/oracle

TRACE_LEVEL_LISTENER = on

tnsnames.ora如下:

[oracle@oracledb admin]$ less tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

fasdat =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracledb)(PORT = 1521))
)
(CONNECT_DATA =
(SID = fasdat)
)
)
dg4msql =
(DESCRIPTION =
(ADDRESS =
(PROTOCOL= TCP)
(HOST = oracledb)
(PORT = 1521)
)
(CONNECT_DATA=
(SID=dg4msql) )
(HS=OK))

init4msql.ora如下:

[oracle@oracledb admin]$ less initdg4msql.ora
# This is a customized agent init file that contains the HS parameters
# that are needed for the Database Gateway for Microsoft SQL Server

#
# HS init parameters
#
HS_FDS_CONNECT_INFO=192.168.1.48:1433//NAVISION
# alternate connect format is hostname/serverinstance/databasename
#HS_FDS_TRACE_LEVEL=0
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
#HS_LANGUAGE=turkish_turkey.WE8ISO8859P9
HS_NLS_NCHAR=WE8ISO8859P9
#HS_FDS_TRACE_LEVEL=DEBUG

我们在Sql Server 2005上设置了名为'dg4msql'的系统dsn,选择驱动程序为'Sql Server',服务器选为'local'

我们很高兴听到任何解决此问题的想法,

1 个答案:

答案 0 :(得分:1)

您似乎使用的是Gateway for MySQL设置而不是异构网关(用于ODBC连接)。以下是该过程的概述

在SQL Server上创建数据库用户,并通过Oracle数据库链接为您想要读取的数据库/表提供读访问权。

在网关家中,您要访问的每个SQL Server数据库都应该有一个init.ora 位于$ OH / dg4msql / admin中的形式为initsid.ora,其中sid是其名称 要在链接中使用的数据库(例如initbob.ora),所以创建一个

HS_FDS_CONNECT_INFO=msserver1:1234//Example_Database
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
HS_TRANSACTION_MODEL=READ_ONLY

现在必须使用现有SID_LIST中的附加SID_DESC部分将新sid添加到网关home中的listener.ora,例如

(SID_DESC =
(SID_NAME=bob)
(ORACLE_HOME=/oracle/gateway/product/11.2.0)
(ENVS=LD_LIBRARY_PATH=/oracle/gateway/product/11.2.0/dg4msql/driver/lib;/oracle/gateway/product/11.2.0/lib)
(PROGRAM=dg4msql)
)

您现在应该停止并重新启动网关侦听器,以便新的sid成为 活性。 NB重新加载是不够的。

您现在必须在tnsnames.ora文件中为每个侦听器添加新的sid 您将在其中创建链接的数据库。您不需要在网关家中执行此操作,除非它也是您将在其中创建数据库链接的数据库主目录。

bob =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = severname.example.com)(PORT = 1690))
(CONNECT_DATA = (SID = bob))
(HS = OK)
)

注意:主机和端口用于网关而不是SQL Server数据库

在每个需要链接到MS-SQL数据库的数据库中,您应该创建一个指向新网关sid的数据库链接。

CREATE PUBLIC DATABASE LINK bob
CONNECT TO "ms_user" IDENTIFIED BY "ms-passwd" USING 'bob';

其中ms-user和ms-password是您在开始时创建的SQL Server用户。

现在您可以测试新的数据库链接

SELECT COUNT(*) FROM "Table_Name"@bob;

完成此操作后,您可以更改initsid.ora文件以添加适合您的连接的参数。如果您这样做,您可以通过网关轻松添加和管理许多不同的数据库。