细聊Oracle通过ODBC数据源连接SQL Server数据库

摘要:
搜索引擎上有很多类似的文章,内容大致相同。今天所谓的详细聊天是因为我从这些文章中学习时走了一些弯路,所以我写了这篇文章来记录自己。同时,如果我能为新认识这里知识点的小朋友提供一些帮助,那会更好。本章末尾的一些扩展有一些实际意义,不要废话太多。我的应用场景:项目系统使用oracle数据库与客户的第三方系统供应商(即sqlserver数据库)共享资源;我的测试和开发环境是64位win7 PC,本机

    类似文章搜索引擎上有很多,内容大致相同,今天所谓细聊是因为我在借鉴这些文章时候走了些弯路,所以写此文,为自己备忘,同时如果能为初涉此处知识点的小伙伴提供些帮助就更好了,文章结尾处的一些扩展有一定实战意义,废话不多说。

    我的应用场景:

    项目系统使用oracle数据库,与客户的第三方系统供应商实现资源共享,对方为sql server数据库;

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

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

第一步、创建ODBC数据源
细聊Oracle通过ODBC数据源连接SQL Server数据库第1张

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

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

C:WindowsSystem32odbcad32.exe

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

C:WindowsSysWOW64odbcad32.exe

添加数据源:
细聊Oracle通过ODBC数据源连接SQL Server数据库第2张

 细聊Oracle通过ODBC数据源连接SQL Server数据库第3张

 细聊Oracle通过ODBC数据源连接SQL Server数据库第4张

 细聊Oracle通过ODBC数据源连接SQL Server数据库第5张

 细聊Oracle通过ODBC数据源连接SQL Server数据库第6张

 细聊Oracle通过ODBC数据源连接SQL Server数据库第7张

 细聊Oracle通过ODBC数据源连接SQL Server数据库第8张

 细聊Oracle通过ODBC数据源连接SQL Server数据库第9张

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

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

方法如下:

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

细聊Oracle通过ODBC数据源连接SQL Server数据库第10张

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

第三步、配置hsodbc

细聊Oracle通过ODBC数据源连接SQL Server数据库第11张

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

细聊Oracle通过ODBC数据源连接SQL Server数据库第12张

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


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

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

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

第四步、配置lisenter(服务端透明网关监听)
细聊Oracle通过ODBC数据源连接SQL Server数据库第13张

 细聊Oracle通过ODBC数据源连接SQL Server数据库第14张

第五步、重启监听

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

停止监听:lsnrctl stop

启动监听:lsnrctl start

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

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

细聊Oracle通过ODBC数据源连接SQL Server数据库第15张

 细聊Oracle通过ODBC数据源连接SQL Server数据库第16张

 第七步、创建oracle的DBLINK

细聊Oracle通过ODBC数据源连接SQL Server数据库第17张

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

第八步、访问测试

 细聊Oracle通过ODBC数据源连接SQL Server数据库第18张

扩展:

(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数据库》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ASP.NET网站实现多语言版本 【转】usb设备 配置 接口 端点下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle数据库三种标准的备份方法

Oracle数据库的三种标准的备份方法: 1.导出/导入(EXP/IMP)。 2.热备份。 3.冷备份。 注释:导出备件是一种逻辑备份,冷备份和热备份是物理备份。 一、导出/导入(Export/Import) 利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回到Oracle数据库中去。 1、简单导出数据(Export)和导...

C# 连接Oracle数据库,免安装oracle客户端

一、方案1 首先下面的内容,有待我的进一步测试和证实。18.12.20 被证实了,还需要安装Oracle客户端,或者本机上安装oracle数据库软件。 18.12.20 1.下载Oracle.ManagedDataAccess.dll 2.添加到C#引用 3.命名空间引用 using Oracle.ManagedDataAccess.Client; 4....

SQLServer 命令批量删除数据库中指定表(游标循环删除)

DECLARE @tablename VARCHAR(30),@sql VARCHAR(500)DECLARE cur_delete_table CURSOR READ_ONLY FORWARD_ONLY FORSELECT name FROM sysobjects WHERE name LIKE 'PUB%' AND type='U'OPEN cur_d...

sql server2014中的内存优化表/内存表(续写)

【0】基本介绍 【0.1】概述介绍 官网:https://docs.microsoft.com/zh-cn/sql/relational-databases/in-memory-oltp/introduction-to-memory-optimized-tables?view=sql-server-ver15 内存优化表是使用 CREATE TABLE (...

pymysql模块:执行数据操作,pymysql.err.InternalError: (1054, "Unknown column '' in 'field list'")

sql语句出错 sql = "INSERT INTO table1(word) VALUES (%s)" % (str) 改为 "INSERT INTO table1(word) VALUES ('%s')" % (str) 只要是values里面的值,都需要加“”...

查询sql连接数

1.通过系统的“性能”来查看 开始->管理工具->性能(或者是运行里面输入 mmc)然后通过 添加计数器添加 SQL 的常用统计(MSSQL General Statistics) 然后在下面列出的项目里面选择 用户连接(User Connection) 就可以时时查询到sql server数据库连接数了。 2.通过系统表来查询: SELECT...