[英]How do you setup a linked server to an Oracle database on SQL 2000/2005?
我能够创建并执行将表从远程Oracle数据库复制到本地SQL服务器的DTS包,但是想要将链接服务器的连接设置为Oracle数据库。
DTS包当前使用Microsoft OLE DB Provider for Oracle,具有以下属性:
SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.3.42)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=acc)));uid=*UserName*;pwd=*UserPassword*;
如何使用上面定义的数据源将链接服务器设置为Oracle数据库?
我能够将链接服务器设置为远程Oracle数据库,最终成为一个多步骤的过程:
步骤1:在服务器上安装Oracle ODBC驱动程序
一种。 下载必要的Oracle Instant Client软件包:Basic,ODBC和SQL * Plus(可选)
湾 将软件包解压缩到SQL Server上的本地目录,通常是C:\\Oracle
。 这应该会产生一个像C:\\Oracle\\instantclient_10_2
这样的[目录],它将是本答案其余部分中引用的[目录]的值。
C。 在包含以下内容的即时客户端[目录]中创建名为tnsnames.ora
的文本文件:
OracleTnsName =
(
DESCRIPTION=
(
ADDRESS = (PROTOCOL=TCP)(HOST=10.1.3.42)(PORT=1521)
)
(
CONNECT_DATA = (SERVICE_NAME=acc)
)
)
注意:实际HOST
, PORT
和SERVICE_NAME
将根据您建立连接的Oracle服务器而有所不同。 通常可以使用侦听器下的Oracle网络客户端工具找到此信息。
OracleTnsName
可以是您要分配给Oracle数据源的任何名称,并将在设置系统DSN时使用。 如果需要,您还可以使用上面的语法在相同的tnsnames.ora文件中定义多个TNS名称。
d。 将[directory]添加到系统PATH
环境变量中。
即 创建一个名为TNS_Admin
的新系统环境变量,其值为[directory]
F。 执行[directory]\\odbc_install.exe
实用程序以安装Oracle ODBC驱动程序。
G。 建议您重新启动SQL服务器,但可能没有必要。 此外,您可能希望为此SQL Server服务器和SQL代理用户标识的目录授予安全权限。
步骤2:创建使用Oracle ODBC驱动程序的系统DNS
一种。 打开ODBC数据源管理器工具。 [管理工具 - >数据源(ODBC)]
湾 选择“系统DSN”选项卡,然后选择“添加”按钮。
C。 在驱动程序列表中,选择Instantclient {version}中的Oracle 。 (例如,'即时客户端10_2中的Oracle')然后选择完成按钮。
d。 指定以下内容:
Data Source Name
:{System DSN Name} Description
:{留空/空} TNS Service Name
:应该在列出的tnsnames.ora
文件中定义OracleTnsName
,选择它作为值。 即 选择测试连接按钮。 系统将提示您提供{Oracle用户密码}。 如果一切顺利,测试将成功。
步骤3:在SQL中为Oracle数据库创建链接服务器
在SQL Server中打开查询窗口并执行以下命令:
EXEC sp_addlinkedserver
@server = '{Linked Server Name}'
,@srvproduct = '{System DSN Name}'
,@provider = 'MSDASQL'
,@datasrc = '{System DSN Name}'
EXEC sp_addlinkedsrvlogin
@rmtsrvname = '{Linked Server Name}'
,@useself = 'False'
,@locallogin = NULL
,@rmtuser = '{Oracle User Name}'
,@rmtpassword = '{Oracle User Password}'
注意: {Linked Server Name}
可以是引用Oracle服务器时要使用的任何内容,但{System DNS Name}
必须与您之前创建的系统DSN的名称相匹配。
{Oracle User Name}
应与系统DSN使用的用户ID相同, {Oracle User Password}
应与用于成功测试ODBC连接的用户ID相同。 有关对Oracle链接服务器问题进行故障排除的信息,请参阅KB 280106
查询Oracle链接服务器
您可以使用OPENQUERY在Oracle链接服务器上执行传递查询,但请注意,对于非常大的记录集,如果在传递查询中指定ORDER BY
子句,则可能会收到ORA-01652
错误消息。 将ORDER BY
子句从传递查询移动到外部select语句为我解决了这个问题。
我有同样的问题。 我和微软通了几个小时的电话,他们没有解决方案。 这些“连接超时”设置都没有帮助我。
为了解决这个问题,我创建了一个运行proc的DTS作业,它只在一行中每两分钟更新一行的时间。 然后我在SQL Server和Oracle之间设置了一个复制,计划每3分钟从SQL复制到单个单元格的更改。 它保持连接活着!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.