代码改变世界

使用SQL Server远程连接Oracle

2012-10-19 20:45  imyang  阅读(2045)  评论(3编辑  收藏  举报

工作当中有同时用到SQL Server和Oracle的情况,在无法使用web service的情况下,如果需要在SQL Server中直接访问Oracle数据库,那么SQL Server有提供相应的功能,即链接服务器。

下面说一下如何创建链接服务器和远程操作Oracle数据库。以下操作假定已经在本机配置好对远端Oracle数据库的访问。

在SQL数据库的服务器对象下有链接服务器,如下图所示:

ScreenClip

右键单击,选择“新建链接服务器”,弹出窗口:

“常规”选项卡

链接服务器:可以自定义输入

服务器类型:选择其他数据源

访问接口:选择"Microsoft OLE DB Provider for Oracle"

产品名称:输入"Oracle"

数据源:输入Oracle在本机器的服务名称,即tnsnames文件中的服务名

“安全性”选项卡

选择使用此安全上下文建立连接

输入Oracle数据库的用户名和密码

点击确定,即创建链接服务器。

以查询为例,远程调用有两种方法:

第一:使用SQL Server的内置函数openquery(http://technet.microsoft.com/zh-cn/library/ms188427.aspx)

select * from openquery(ORCL ,'select * from sysuser')

openqeury函数的第一个参数为链接服务器的名称,第二个参数为查询语句(符合Oracle语法)

第二种方法:直接进行查询

select * from ORCL..SYSTEM .SYSUSER

from后面的第一个参数为链接服务器名称,第二个参数为用户名,第三个为Oracle中的数据表,这里用的是SQL语法,注意一定要大写,否则会报错

那么,这两种写法的区别是什么呢,我们看一下执行计划

 

一个是远程扫描,一个是远程查询,开销是一样的。

再计算一下执行时间吧

分别执行100次的查询,看耗费多长时间

declare @time datetime,
@count int
set @count = 1
set @time = GETDATE()

select * from openquery(ORCL ,'select * from sysuser')
while @count < 100
       begin
       select * from openquery(ORCL ,'select * from sysuser')
       set @count = @count + 1
       end
select DATEDIFF (ms, @time,getdate ())

再替换测试语句二

一共执行五次,结果为:

7910 8783

7866 8856

7976 8793

7856 8860

7910 8833

由此可见,第一种查询方法比第二种查询方法稍快一些

上述的测试是Oracle和SQL Server在同一台机器上的情况,如果分布在不同的服务器上,那么执行时间可能会更长。

以上,做个简单的记录,以备后查