zoukankan      html  css  js  c++  java
  • SQL Server2012创建连接服务器到ORACLE11G

    做ETL,肯定少不了经常会从不同的数据库直接进行数据的操作,为了更好的进行跨库操作,SQL SERVER 2012拥有LinkedServer功能。前段时间写了个SQL SERVER同种数据库直接的链接数据库的链接,具体请参考:http://blog.csdn.net/waterxcfg304/article/details/42004753

    下面我来介绍下如何通过SQL SERVER 2012来建立ORACLE11G的链接服务器。

    一,创建链接服务

    1, 创建链接服务器之前,一定要确保你的SQL SERVER服务器上有ORACLE的客户端程序或者安装了ORACLE数据库服务器。

    下图可以看出我的SQL SERVER服务器上是有ORACLE11G的驱动程序的。

    二,通过图形界面建立链接服务器

    需要填写的信息:

    1, 链接服务器:ORACLE11G,这个是随便写的

    2, 服务器类型:选择ORACLEProvider for OLE DB

    3, 产品名称: 写 ORACLE,一般都写这个

    4, 数据源:ORCL 这ORCL不是随便写的,一定是tnsnames.ora里的服务名,还要注意listener的配置。

    下面是我tnsnames.ora里的配置信息:

    ORCL =

     (DESCRIPTION =

       (ADDRESS = (PROTOCOL = TCP)(HOST =R9HDET7.vscsh.com)(PORT = 1521))

       (CONNECT_DATA =

         (SERVER = DEDICATED)

         (SERVICE_NAME = ORCL)

       )

     )

    下面是我的listener.ora的配置:

    SID_LIST_LISTENER=

     (SID_LIST =

         (SID_DESC =

           (SID_NAME = CLRExtProc)

           (ORACLE_HOME =D:oracle11gappproduct11.2.0dbhome_1)

           (PROGRAM = extproc)

           (ENVS ="EXTPROC_DLLS=ONLY:D:oracle11gappproduct11.2.0dbhome_1inoraclr11.dll")

         )

         (SID_DESC =

            (GLOBAL_DBNAME =orcl)

            (ORACLE_HOME =D:oracle11gappproduct11.2.0dbhome_1)

            (SID_NAME =orcl)

         )

    ))

    LISTENER =

     (DESCRIPTION_LIST =

       (DESCRIPTION =

         (ADDRESS = (PROTOCOL = IPC)(KEY =EXTPROC1521))

         (ADDRESS = (PROTOCOL = TCP)(HOST =R9HDET7.vscsh.com)(PORT = 1521))

       )

     )

    三,链接服务器安全性配置

    1,选择—〉使用此安全上下文建立链接,输入登录ORACLE数据库的用户名和密码

    2,点击[确定],出现如下的错误。

    四,解决[无法创建链接服务器“ORACLE11G”的 OLE DB 访问接口“OraOLEDB.Oracle”的实例。 (.NetSqlClient Data Provider)]的错误

    这个问题一般是由于注册表中缺少相关信息造成的,我们只需要补全这部分信息即可解决。

    解决方法如下:

    1, 打开“运行”窗口,输入“regedit”,回车。

    2, HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoftSQLServerMSSQL11.MSSQLSERVERProviders

    在Providers下面一般来说是看不到OraOLEDB.Oracle这一项的,于是新建这一项。

    在Providers上面右键选择New -> Key,把新增加的项改名为“OraOLEDB.Oracle”

    3, 为“OraOLEDB.Oracle”这个键新增一个DWORD Value,把名字改为“AllowInProcess”

    4, 为“OraOLEDB.Oracle”这个键新增一个DWORDValue,把名字改为“AllowInProcess”

    5, 把“AllowInProcess”的值改为“00000001”

    6,改好后的效果如图。修改即刻生效,现在就可以再去访问链接服务器上的Oracle数据库了。

    7,但是这个时候我再次做链接服务器的时候,还是出现了上面同样的错误提示如下:

    8,百思考不知道原因啊??突然我发现如下:链接服务器—〉访问接口—〉OraOLEDB.Oracle—〉允许进程内没有勾上,但是我想上面的配置4里已经有(为“OraOLEDB.Oracle”这个键新增一个DWORD Value,把名字改为“AllowInProcess”),不知道为什么不起作用?????,那好吧,我只好手动的勾上了。

    7, 手动勾上允许进程内

    8, 再次测试是否连通

    从上面的这个图可以看出,已经链接成功,SQL SERVER2012和ORACLE11G服务器之间的链接服务器已经建立成功。

    五,下面我来测试如何在SQL SERVER2012里通过上面建立的链接服务器查询ORACLE11G里的表数据。

    1, 在ORACLE数据库里建立一个测试表

    2, 我用OPENQUERY来查询ORACLE数据库里的数据如下:

    select * from openquery(ORACLE11G,'SELECT * FROM TESTLINKED_SERVER')

    从上面可以看出,我查询到了我再ORACLE数据库里刚才建立的表和表数据信息。

  • 相关阅读:
    linux rename命令批量修改文件名
    深度学习在推断阶段(inference)的硬件实现方法概述
    pkg-config原理及用法
    可测性分析
    CMD常用命令
    CMD命令:不是内部或者外部命令也不是可运行的程序或批处理文件
    main函数的参数argc和argv
    Eclipse中的特殊注释:TODO、XXX、FIXME
    whl文件(python)安装方法
    linux软链接和硬链接
  • 原文地址:https://www.cnblogs.com/husam/p/7686592.html
Copyright © 2011-2022 走看看