细聊Oracle通过ODBC数据源连接SQL Server数据库
类似文章搜索引擎上有很多,内容大致相同,今天所谓细聊是因为我在借鉴这些文章时候走了些弯路,所以写此文,为自己备忘,同时如果能为初涉此处知识点的小伙伴提供些帮助就更好了,文章结尾处的一些扩展有一定实战意义,废话不多说。
我的应用场景:
项目系统使用oracle数据库,与客户的第三方系统供应商实现资源共享,对方为sql server数据库;
我的测试开发环境为64bitwin7PC机,本机上装有64位Oracle11g和32位Oracle11g;
本文以32位Oracle为例,通过配置ODBC数据源连接虚拟机上的Sql Server;
第一步、创建ODBC数据源
这一步要考虑数据源是32位还是64位的问题,其实就是选择不同的exe打开上面的界面,
win764位操作系统的64-bit ODBC 默认的位置:
C:\Windows\System32\odbcad32.exe
win764位操作系统的32-bit ODBC 默认的位置:
C:\Windows\SysWOW64\odbcad32.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_HOME\hs\trace"目录下】
第四步、配置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))
(connect_data=(SID=SID名称))
(HS=OK)
)';
注意:采用上面的合并方式,则不受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’
细聊Oracle通过ODBC数据源连接SQL Server数据库的更多相关文章
- JDBC连接sql server数据库及其它
JDBC连接sql server数据库的步骤如下: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的 ...
- JeeSite如何正确连接SQL SERVER 数据库
JeeSite如何正确连接SQL SERVER 数据库 jeesite介绍 感谢jeesite项目的作者thinkgem. 没有你我也不会更改这数据源非了恁大的劲,,,,嘻嘻嘻说多了. JeeSite ...
- Excel VBA 连接各种数据库(三) VBA连接SQL Server数据库
本文主要涉及: VBA中的SQL Server环境配置 VBA连接SQL Server数据库 VBA读写SQL Server数据 如何安装SQL Client 系统环境: Windows 7 64bi ...
- JDBC连接sql server数据库的详细步骤和代码
JDBC连接sql server数据库的详细步骤和代码 JDBC连接sql server数据库的步骤如下: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Ja ...
- JDBC连接sql server数据库的详细步骤和代码 转
JDBC连接sql server数据库的步骤如下: 1.加载JDBC驱动程序(只做一次): 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.C ...
- python 使用pymssql连接sql server数据库
python 使用pymssql连接sql server数据库 #coding=utf-8 #!/usr/bin/env python#------------------------------ ...
- NetBeans连接SQL server数据库教程
不废话,直接开始 1.下载sqljdbc.jar 可以从微软中国官方网站下载 SQLJDBC微软中国 笔者提供一个网盘链接Sqljdbc.jar 4个压缩包视版本选择,SQL 2012 用sqljdb ...
- 【转】PowerShell 连接SQL Server 数据库 - ADO.NET
转至:http://www.pstips.net/connect-sql-database.html PowerShell 通过ADO.NET连接SQL Server数据库,并执行SQL脚本.工作中整 ...
- ThinkPHP连接sql server数据库
亲身经历,在网上找连接sql server数据库的方法,还是不好找的,大多数都是照抄一个人的,而这个人的又写的不全,呵呵,先介绍一下我连接的方法吧.如果你是用THINKPHP连接,那么最重要的就是配置 ...
随机推荐
- C++面向对象程序设计第三章习题答案解析
整理一下自己写的作业,供考试前复习用,哈哈 进入正题!!! 题目: 2.分析下面的程序,写出其运行时的输出结果 这里就不展示课本源代码,直接给出修改后的代码,错误部分代码已给出具体的注释 #inclu ...
- 非自增编号字段,避免生成重复编号(以pdfNo编号为例)RedisLock/ReadLock
非自增编号字段,避免生成重复编号(以pdfNo编号为例) 有个场景,用户查询延误航班信息,然后生产一个编号,默认第一个编号是1000001,其后新增的编号默认自增加1.每次有人来查延误信息,如果延误信 ...
- Oracle trunc() 日期、数字截取函数
--Oracle trunc()函数的用法/**************日期********************/1.select trunc(sysdate) from dual --2013- ...
- php技能树---大神的进阶之路
PHP7 迎来巨大的性能提升,又一次回到关注的焦点.根据这些年在开发圈子总结的LNMP程序猿发展轨迹,结合个人经验体会,总结出很多程序员对未来的迷漫,特别对技术学习的盲目和慌乱,简单梳理了这个每个阶段 ...
- 各种trick和细节错误汇总
这篇博客主要是用来记自己写代码的时候犯的各种小技巧和低级失误,好提醒自己,从而尽量缩短debug时间. 点分治 1.求每一个子树到重心的距离的函数接口应该是dfs2(v, eg, e[i].w)而不是 ...
- Comet OJ - Contest #11题解
传送门 \(A\) 咕咕咕 const int N=1e6+5; char s[N],t[N];int n,res; inline bool cmp(const int &x,const in ...
- 【一起来烧脑】一步学会Vue.js系统
Vuejs是一个构建数据驱动的web界面的库,通过api实现响应的数据绑定和组合的视图组件,Vue.js的核心是一个响应的数据绑定系统,它让数据与DOM保持同步非常简单,一旦创建了绑定,DOM 将与数 ...
- (26)打鸡儿教你Vue.js
weex框架的使用 1.weex开发入门 2.weex开发环境搭建 3.掌握部分weex组件模块 4.了解一些vue基本常见语法 5.制作一个接近原生应用体验的app weex介绍 安装开发环境 We ...
- gdb tui设置默认窗口高度
gdb -p 12999 -tui 先显示win信息(输入:info win) 显示如下: SRC (35 lines) <has focus> CMD (17 lines) 我们要改的是 ...
- 《挑战30天C++入门极限》C++中类的多态与虚函数的使用
C++中类的多态与虚函数的使用 类的多态特性是支持面向对象的语言最主要的特性,有过非面向对象语言开发经历的人,通常对这一章节的内容会觉得不习惯,因为很多人错误的认为,支持类的封装的语言就是支持 ...