sqlserver访问oracle

  • 格式:docx
  • 大小:32.16 KB
  • 文档页数:3

-- 开启分布式查询

EXECsp_configure'show advanced options', 1;

GO

RECONFIGURE;

GO

EXECsp_configure'Ad Hoc Distributed Queries', 1

GO

RECONFIGURE;

GO

--sqlserver 链接oracle可以通过两个访问接口:

'MSDAORA'和'OraOLEDB.Oracle'

--首先讲第一种,“MSDAORA”访问接口是由Microsoft OLE DB Provider for Oracle提供的,这里建议不使用此接口进行链接。通过该访问接口建立的链接服务器在进行查询oracle表(带数据类型CLOB、BLOB字段)时会报这个错误:数据类型不支持。当然,如果不需要选择这样的数据类型时,可以使用这个接口。

SELECT*FROMOPENROWSET('MSDAORA','192.168.9.12';'test';'test','SELECT

* FROM USER where USERNO=''ADMIN''')asA

--第二种,“OraOLEDB.Oracle”访问接口是由oracle 的Oracle Probider for

OLE DB 驱动提供的。它解决了两个数据库类型不一致的的问题。

SELECT*FROMOPENROWSET('OraOLEDB.Oracle','192.168.9.12';'test';'test','SELECT * FROM USER where USERNO=''ADMIN''')asA

-- 关闭分布式查询

execsp_configure'Ad Hoc Distributed Queries',0

GO

reconfigure

GO

execsp_configure'show advanced options',0

GO

reconfigure

GO

会出现的问题:

1, 第一次在本地实验,本机上装的是SQL2000以及SQL2008R2,都是32位的。OracleClient装的是11G 32位的,刚开始在SQL2000上执行以上开启分布式查询的语句时,出现一下错误:

配置选项 'Ad Hoc Distributed Queries' 不存在,也可能是高级选项。

以为是SQL2000不支持这个选项,所以我就直接换到SQL2008那里使用,链接查询,顺利得到数据。

在服务器上配置的时候(服务器上装的是SQL2014),刚开始不知道是64位还是32位的,以为也能顺利的访问到oracle。结果两种方式都试了好几次,都报错。具体错误忘记了,大概意思是:找不到'MSDAORA'和'OraOLEDB.Oracle'这两个注册。

百度之后,尝试用另一种方式:添加链接服务器。这个暂且先略过,之后在介绍。主要介绍前面两种方式。为什么找不到这两个注册,我就去管理工具里查看ODBC数据源。里面有两个版本的,32位的和64位的。通过对比发现,本地的32位上多了这两个东西,服务器上面没有。但是服务器上安装了同样的oracle客户端,为什么没有这个oracle的驱动程序呢,这时候才想起来SQL的版本问题。

用SELECT @@VERSION这个命令查看sql的版本,发现服务器的SQLServer是64位的。所以应该要用64位的OracleClient版本(MSDAORA没有64位版本存在)。于是到Oracle官网上下载了64位的64-bit Oracle Data Access Components (ODAC) for Windows链接地址:

/technetwork/database/windows/downloads/index-090165.html

根据Oracle的版本下载相应的程序,安装(安装之前最好看一下readme.txt,根据说明安装)。安装完成之后发现还是报无法找到'OraOLEDB.Oracle'注册这个错误,于是手工注册了下安装目录下的OraOLEDB11.DLL,下安装结果还是不行。又做了各种尝试,还是不行。

是不是因为没有重启,所以安装没有生效?但是因为是服务器没法马上重启,在第二天重启之后,再使用最开始的方法,就可以成功访问到oracle的数据了。

关于添加链接服务器:

1, 添加的时候找不到'OraOLEDB.Oracle'注册,有可能是因为没有安装正确的版本,记得安装完后重启,再试。

如果还是不行,看访问接口下面是不是有这一项,如果没有,到注册表下面添加这个项,具体参看:/article/546ae18560adcc1149f28cc1.html

之后就可以在访问接口中可以看到该选项,在链接服务器-访问接口-OraOLEDB.Oracle右键属性,查看”允许进程内”(英文版的为:Allow inprocess)是否选中,如果没有,勾上。

有些乱,只为记录2天的折腾。还有下次不会忘记。

参考: /info-detail-493444.html

https:///en-us/blog/39-oraoledb-oracle-39-provider-is-not-registered/

/s/blog_614b6f210100t80r.html

https:///apgcdsd/2011/05/24/linked-serverssisoracle/