oracle odbc mysql数据库_Oracle通过ODBC数据源连接SQL Server数据库

本文详细介绍了在64位Win7系统中,如何配置32位Oracle通过ODBC数据源连接到SQL Server的过程,包括创建ODBC数据源、安装驱动、配置HSODBC、监听和TNS,以及创建DBLINK进行访问测试。此外,还提到了常见问题及解决方案,如体系结构不匹配和列名查询问题。
摘要由CSDN通过智能技术生成

应用场景:

项目系统使用oracle数据库,但是很多历史数据存储在Sqlserver数据库中

我的测试开发环境为64bitwin7PC机,本机上装有64位Oracle11g和32位Oracle11g;

本文以32位Oracle为例,通过配置ODBC数据源连接虚拟机上的Sql Server;

第一步、创建ODBC数据源

ed83410df5b2418612009aa8f1f491e1.png

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

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

C:\Windows\System32\odbcad32.exe

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

C:\Windows\SysWOW64\odbcad32.exe

添加数据源:

2ba38496acb2f709c73394a74abacb39.png

d532169ced4d7fa7b7ce8ff4676404a5.png

4e62541025866b626d889e8174bb1144.png

c994f2cd266d171b7f2782205796f6c1.png

92ea021b19364e64e04ad80ca642c3b5.png

4782da6f3bd57f72fb224456ec136ce5.png

67d56c9cf21696a0f1017e28950f5344.png

410c9d72267cfc2a2292be427a5aabfe.png

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

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

方法如下:

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

b11188d5bd333c2c0788be817e4402b0.png

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

第三步、配置hsodbc

67854b5c678b25d49bcdfcf1653dd320.png

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

0a06fe414fbbdb87a1a1a1e3070f7f03.png

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

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

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

则配置为"Debug",跟踪日志文件存放在"ORACLE_HOME\hs\trace"目录下】

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

353705cb5a59280da26742d872c37dd9.png

be873ed6067fe4f99c3a1ef4b815880e.png

第五步、重启监听

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

停止监听:lsnrctl stop

启动监听:lsnrctl start

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

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

1923db13fc52933467fd97288ad17536.png

fb11751a8a98cff83bd1804636305b8b.png

第七步、创建oracle的DBLINK

4d4f32c5a6c36799edeee396753e152a.png

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

第八步、访问测试

d1840f56cd52a04e9df4e7855399267c.png

扩展:

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

create public database link test_sql connect to "sqlserver用户名" identified by "sqlserver密码" using '(description=

(address= (protocol=tcp)(host=xxx.xxx.xxx.xxx)(port=1521))

(connect_data=(SID=SID名称))

(HS=OK)

)';

48304ba5e6f9fe08f3fa1abda7d326ab.png

注意:采用上面的合并方式,则不受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’

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值