繁体   English   中英

如何在SQL 2000/2005上为Oracle数据库设置链接服务器?

[英]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*;
  • 密码: UserPassword
  • 用户ID: UserName
  • 允许保存密码:true

如何使用上面定义的数据源将链接服务器设置为Oracle数据库?

我能够将链接服务器设置为远程Oracle数据库,最终成为一个多步骤的过程:

  1. 在SQL Server上安装Oracle ODBC驱动程序。
  2. 在SQL Server上创建系统DSN到Oracle数据库。
  3. 使用系统DSN在SQL Server上创建链接服务器。

步骤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)
  )
)

注意:实际HOSTPORTSERVICE_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 ,选择它作为值。
  • 用户ID :{Oracle用户名}

选择测试连接按钮。 系统将提示您提供{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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM