zoukankan      html  css  js  c++  java
  • 使用SQL Server远程连接Oracle

    工作当中有同时用到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在同一台机器上的情况,如果分布在不同的服务器上,那么执行时间可能会更长。

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

  • 相关阅读:
    BZOJ1880: [Sdoi2009]Elaxia的路线(最短路)
    「BZOJ1433」[ZJOI2009] 假期的宿舍(二分图,网络流)
    BZOJ 1061 [Noi2008]志愿者招募(费用流)
    [BZOJ2879][Noi2012]美食节(费用流)
    bzoj 1834 [ZJOI2010] network 网络扩容(费用流)
    BZOJ2668:[CQOI2012]交换棋子(费用流)
    bzoj1070【SCOI2007】修车(费用流)
    【BZOJ 1877】 [SDOI2009]晨跑(费用流)
    SQLite_Home
    GeoMesa-单机搭建
  • 原文地址:https://www.cnblogs.com/zhaohuayang/p/2731614.html
Copyright © 2011-2022 走看看