SQLSERVER2000链接Oracle

      项目开发中也许会遇到这样的场景:一个系统是vb做的用的是sqlserver数据库,一个是java做的用的是oracle数据库,两个系统之间要实现一些数据的交互。异构数据库(oracle称为透明网关)可以解决这种问题,原理是在数据库A上建立一个链接服务器访问数据库B。本篇主要讲解SQLSERVER2000链接Oracle数据库,操作步骤如下:

      1.安装oracle9i客户端或者服务器,oracle企业管理器中创建远程数据库。

         host:192.168.1.10 
         sid:hjn
        端口:1521
        名称:HJN_192.168.1.10 

 

      2.安装sqlserver2000并打上sp4以上的补丁。

         查看SQL SERVER 2000是否打过SP4的补丁 其实只要查询版本号就知道。
         在查询分析器中输入
         select @@version
         或者输入 print @@version

         如果是安装过SP4的补丁。应该是下面的信息:
         Microsoft SQL Server 2000 - 8.00.2039 (Intel X86)
         May 3 2005 23:18:38
         Copyright (c) 1988-2003 Microsoft Corporation
         Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 1)

       

        安装sqlserver或者sp4补丁时很有可能提示文件挂起提示,解决办法如下:

        打开注册表编辑器,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
        中找到PendingFileRenameOperations项目,并删除它.

 

     3.由于sqlserver的链接服务器对应的是oracle8版本,因此需要修改注册表信息。

        [HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC]
        AllowonlySecureRpcCalls=0
        TurnoffRpcSecurity=1

        [HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\MSDTC\MTxOCI]
        "OracleXaLib"="oraclient9.dll"
        "OracleSqlLib"="orasql9.dll" 
        "OracleOciLib"="oci.dll"

    

     4.在sqlserver2000中建立oracle链接服务器。

       

        打开企业管理器,在安全性下找到链接服务器。新建链接服务器。

 

      

 

       链接服务器名称为MYORA,提供程序名称为Microsoft OLEB DB Provider for Oracle

       产品名称为ORACLE,数据库为刚才新建的远程数据库sid,链接字符串也是hjn。

       注意名称必须是ORACLE并且是大写。

 

    

      

 

       安全性选择不使用安全上下文,输入oracle的用户名和密码。

 

       

 

        在排序规则兼容打上勾,使用远程排序规则上也打上勾。

       

       

      

 

     5.  解决事务问题
          开始——程序——管理工具——组件服务;
          组建服务——计算机——我的电脑;
          右键属性——msdtc标签——安全性配置
          把所有能选的都选上(可能不用都选); 
          确定; 

     6. 解决连接中断问题
         修改hosts文件 (ip 计算机名)
         C:\WINDOWS\system32\drivers\etc
         192.168.0.11 test

    

     7.SQL的写法有两种
        a)使用T-SQL语法:
            SELECT * FROM LNK1..用户名.表名--注意用户名称,表名称要大写。


        b)使用PLSQL语法:
           select * from openquery(LNK1,'select * from 用户名.表名')

 

           update openquery(linked1, 'select ssn from testlinked where ssn=2') set ssn=ssn + 1


           insert openquery(linked1, 'select ssn from testlinked where 1=0') values (1000)


           delete openquery(linked1, 'select ssn from testlinked where ssn>100')


           第二种访问方式比第一种约快50%;第二种访问方式跟直连ORACLE的速度相当;
           第一种访问方式可能会导致一些意外错误,如:该表不存在,或者当前用户没有访问该表的权限。
           如果需要访问的column中使用没有精度的数据类型,这两种查询方式都可能会报错,这是ORACLE的BUG,
            无法修正,只能通过查询语句的特殊处理规避这一问题:
           OLE DB 提供程序 'OraOLEDB.Oracle' 为列提供的元数据不一致。执行时更改了元数据信息。

   

    问题与BUG。

           1.oracle9i的varchar2长度大于256时就会出现sqlserver2000访问死掉的现象。这个问题我还不知道具体的原因,但是oracle10g是没有问题的。

           2.oracle中的clob字段只能通过openquery访问。

           3.最好用oracle简单的数据类型。

          

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值