• Oracle通过ODBC链接SqlServer数据库


    原网址:https://www.cnblogs.com/jijm123/p/11598515.html

    第一步、创建ODBC数据源

    这一步要考虑数据源是32位还是64位的问题,其实就是选择不同的exe打开上面的界面,

    win764位操作系统的64-bit ODBC 默认的位置:

    C:WindowsSystem32odbcad32.exe

    win764位操作系统的32-bit ODBC 默认的位置:

    C:WindowsSysWOW64odbcad32.exe

    添加数据源:

     

     

     

     

     

     

     

    测试通过代表数据源配置成功

    第二步、检查DG4ODBC驱动是否已经安装

    方法如下:

    在Oracle服务器上,cmd窗口中执行命令(dg4odbc或hsodbc)

    上图代表安装了DG4ODBC驱动(如果没有安装,需自行下载安装,此处不介绍具体操作)

    第三步、配置hsodbc

     此目录下默认存在initdg4odbc.ora,复制这个文件,粘贴到上图目录中,并将后复制的文件改名为initodbc_test.ora,用记事本打开就该配置并保存如下图

    注:每个使用DG4ODBC的实例,都必须单独一个"init*.ora"文件,文件命名规则:init+<网关sid>+.ora


    HS_FDS_CONNECT_INFO = ODBC数据源管理中的DSN名称【本实验为testodbc】

    HS_FDS_TRACE_LEVEL = OFF 【追踪级别参数,出于性能影响一般不配置或者配置为"OFF",若遇到网关问题需要跟踪日志,

    则配置为"Debug",跟踪日志文件存放在"ORACLE_HOMEhs race"目录下】

    第四步、配置lisenter(服务端透明网关监听)

     

    第五步、重启监听

    在命令提示符窗口依次输入如下命令

    停止监听:lsnrctl stop

    启动监听:lsnrctl start

    一般停止监听没有问题,但是如果启动不了监听(启动监听服务失败),多半说明第四部字符串配置有错误,注意检查。

    第六步、配置TNS(客户端服务命名)

     

     第七步、创建oracle的DBLINK

    在PLsql中或者sqlplus和环境下运行上述sql命令创建DataBase Link

    第八步、访问测试

     

    扩展:

    (1) 、六、七两步可以合并,直接创建dblink

    create public database link test_sql connect to "sqlserver用户名" identified by "sqlserver密码" using '(description=
            (address= (protocol=tcp)(host=xxx.xxx.xxx.xxx)(port=1521)) --xxx.xxx.xxx.xxx  代表的是Oracle数据库服务地址
    (connect_data=(SID=SID名称)) (HS=OK) )'; --SID名称即:

    注意:采用上面的合并方式,则不受tnsnames.ora配置文件的限制,推荐使用,推荐是因为,tnsnames.ora的配置是客户端的,这样要求所有客户端都需要这样配置第六步,如果采用推荐方式,因为databaselink的配置文件是在服务端的,服务端配置一次,所有客户端都可以用了。

    (2)、如果要把oracle这边的时间类型插到SQLserver类型为datatime的字段中,需要采用to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')的方式,就是转成字符串;

    (3)、不仅仅可以连接SQL Server,其他类型ODBC数据源也可以,如mysql等;

    (4)、如果32位应用环境,配置ODBC数据源的时候也必须配置32ODBC数据源,否则报错如下:

    [ODBC 驱动程序管理器]在指定的DNS中,驱动程序和应用程序之间的体系结构不匹配{IM014};

    (5)、如果报错找不到ODBC数据源,很可能是以上步骤中数据源名称错误,或者创建的ODBC数据源不是系统DSN,而是错选了用户DSN。

    如上是我在借鉴搜索引擎上oracle连接odbc数据源的一些文章的过程中个人理解后整理,以作备忘,如有错误或不妥欢迎指教。

    (6)、上面的步骤配置完,发现可以像使用oracle的表一样使用,select * from 表名/视图名@linkname,但是 select id from 表名@linkname 会报id标识符无效,也就是可以用*查询所有列,但是不能用列名查询指定列,解决办法是将列名用双引号引起来,并且双引号内列名区分大小写,如select "id" from 表名/视图名@linkname where“id”=‘A01’

     
    listener文件中添加的地址:

    (SID_DESC =
    (SID_NAME = odbc_test)
    (ORACLE_HOME = E:appAdministratorproduct12.2.0dbhome_1)
    (PROGRAM = dg4odbc)
    )

     创建链接服务器代码

    create public database link test_sql connect to "sa" identified by "sa.123" using '(description=
    (address= (protocol=tcp)(host=localhost)(port=1521))
    (connect_data=(SID=odbc_test))
    (HS=OK)
    )';

    select * from dbo.Task_Main@test_sql;

  • 相关阅读:
    nodeJs小练习之爬取北京昌平区房价
    2016,加油,奋斗
    1339 字符串王国的种族
    1333 明信片和照片
    1316 你能知道这是几进制数?
    1309 简化版九宫格
    1295 爱翻译
    1288 幸运转盘(一)
    1287 孙武练兵
    1284 喜羊羊的新年礼物
  • 原文地址:https://www.cnblogs.com/Bokeyan/p/11641751.html
Copyright © 2020-2023  润新知