在SQL Server中使用OPENROWSET访问ORACLE数据库时,你可能会遇到各种坑,下面一一梳理一下你会遇到的一些坑。

1:数据库没有开启"Ad Hoc Distributed Queries"选项,那么你就会遇到下面坑。

SELECT TOP 10 * FROM OPENROWSET('OraOLEDB.Oracle', 'ESCM_134';'test';'test', 'SELECT * FROM TEST.MY_SET')

Msg 15281, Level 16, State 1, Line 1

SQL Server blocked access to STATEMENT 'OpenRowset/OpenDatasource' of component 'Ad Hoc Distributed Queries' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Ad Hoc Distributed Queries' by using sp_configure. For more information about enabling 'Ad Hoc Distributed Queries', search for 'Ad Hoc Distributed Queries' in SQL Server Books Online.

出现这个错误,只需要开启数据库"Ad Hoc Distributed Queries"选项即可。如下所示

sp_configure  'show advanced option',1;
GO
RECONFIGURE
sp_configure 'Ad Hoc Distributed Queries',1;
GO
RECONFIGURE

2:遇到“The OLE DB provider "OraOLEDB.Oracle" for linked server ....."这个坑

SELECT TOP 10 * FROM OPENROWSET('OraOLEDB.Oracle', 'ESCM_134';'test';'test', 'SELECT * FROM TEST.MY_SET')

Msg 7399, Level 16, State 1, Line 1

The OLE DB provider "OraOLEDB.Oracle" for linked server "(null)" reported an error. Access denied.

Msg 7350, Level 16, State 2, Line 1

Cannot get the column information from OLE DB provider "OraOLEDB.Oracle" for linked server "(null)".

解决这个也比较简单,使用SSMS连接到数据库后,在“Server Objects”->"Linked Servers"->"OraOLEDB.Oracle"下勾选“Allow inprocess"选项。注意,如果不重启,无法使之生效,依然会报上面错误。

3:遇到“OLE DB provider "OraOLEDB.Oracle" for linked server "(null)" returned message "ORA-12154: TNS: 无法解析指定的连接标识符...."这个坑

SELECT TOP 10 * FROM OPENROWSET('OraOLEDB.Oracle', 'ESCM_134';'test';'test', 'SELECT * FROM TEST.MY_SET')

OLE DB provider "OraOLEDB.Oracle" for linked server "(null)" returned message "ORA-12154: TNS: 无法解析指定的连接标识符".

Msg 7303, Level 16, State 1, Line 1

Cannot initialize the data source object of OLE DB provider "OraOLEDB.Oracle" for linked server "(null)".

遇到这个问题有几种情形:

1: 你没有在TNS配置文件里面配置相关ORACLE实例信息。

2: SQL Server数据库是64位的,你只安装了32bit数据库,配置了Oracle Client 32bit下的TNS,或者Oracle Client 32/64位都安装了,但是你只配置了32位下的TNS。其实只需要配置64下的TNS即可。因为64位的SQL Server肯定调用64位的驱动程序。

4:普通账号遇到“Ad hoc access to OLE DB provider 'OraOLEDB.Oracle' has been denied. You must access this provider through a linked server."错误, 具有sysadmin角色的账号执行下面SQL正常,但是非常普通的账号就一直报下面错误

SELECT TOP 10 * FROM OPENROWSET('OraOLEDB.Oracle', 'ESCM_134';'test';'test', 'SELECT * FROM TEST.MY_SET')

Msg 7415, Level 16, State 1, Line 1

Ad hoc access to OLE DB provider 'OraOLEDB.Oracle' has been denied. You must access this provider through a linked server.

解决方法,在服务器打开注册表,在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.MSSQLSERVER\Providers\OraOLEDB.Oracle下(当然不同版本或命名实例的数据库,这个注册表路径有啥不同,根据实际情况找到OraOLEDB.Oracle),新建DisallowAdHocAccess选项即可解决问题。

DisallowAdHocAccess属性设置为 1,SQL Server 不允许特别通过 OPENROWSET 和 OPENDATASOURCE 函数根据指定的 OLE DB 提供程序访问。如果您尝试调用这些函数中的特殊查询,您会收到类似于以下内容的错误消息

  • A change of the value of DisallowAdHocAscess from 1 to 0 would not require a restart of the SQL Service, whereas a change from 0 to 1 would have to have a SQL Service restart for the change that was made to become effective.
  • With the DisallowAdHocAccess property set to 1, SQL Server does not allow ad hoc access through the OPENROWSET and the OPENDATASOURCE functions against the specified OLE DB provider. If you try to call these functions in ad hoc queries, you receive an error message that resembles the following:

    Server: Msg 7415, Level 16, State 1, Line 1 Ad hoc access to OLE DB provider 'Microsoft.Jet.OLEDB.4.0' has been denied. You must access this provider through a linked server.

    In other words, with the DisallowAdHocAccess property set to 1 for a specific OLE DB provider, you must use a predefined linked server setup for the specific OLE DB provider. You can no longer pass in an ad hoc connection string that references that provider to the OPENROWSET or the OPENDATASOURCE function.

参考资料:

https://support.microsoft.com/zh-cn/kb/327489

转载于:https://www.cnblogs.com/kerrycode/p/5784805.html

SQL Server 使用OPENROWSET访问ORACLE遇到的各种坑总结相关推荐

  1. 访问MS Access 系统表 MSysObjects ,在SQL SERVER 2005中访问

    首先设置MS Access,给予访问MSysObjects 的权限 1. Open Microsoft Access 2. From the Tools menu, select the Option ...

  2. SQL Server 跨域访问

    # SQL Server 跨服务器访问数据参考链接:[sp_addlinkedserver](https://msdn.microsoft.com/zh-cn/library/ms190479.asp ...

  3. 用sql改oracle表结构,SQL server 表结构转Oracle SQL脚本

    SQL server 表结构转Oracle SQL脚本 /****** Object: StoredProcedure [dbo].[getOracle] Script Date: 2019/7/25 ...

  4. 1433端口无法连接(sql server 数据库无法访问问题)解决思路

    1433端口无法连接(sql server 数据库无法访问问题)解决思路 参考文章: (1)1433端口无法连接(sql server 数据库无法访问问题)解决思路 (2)https://www.cn ...

  5. SQL Server如何链接到 Oracle并查询其中的数据?并实现做接口

    今天用Oracle的驱动教大家如何从SQL Server链接到Oracle. 1. 服务器上需要安装Oracle 64位的客户端或者服务端,安装过程就省略了.不会的同学可以网上搜索一下安装方法,很详细 ...

  6. sql server 2008数据导入Oracle方法

    试了几种sql server数据导入Oracle的方法,发现还是sql server 的导入导出工具最好使.使用方法很简单,照着向导做就可以.不过使用中需要注意以下几点: 系统盘需要足够大.因为SSI ...

  7. 使用navicat premium将数据库从Oracle迁移到SQL Server,或从Oracle迁移到MySQL

    有时候我们有迁移数据库的需求,例如从Oracle迁移到SQL Server,或者从MySQL迁移到Oracle. 很多江湖好汉一时不知如何手工操作,所幸的是Navicat提供了迁移的自动化操作界面. ...

  8. oracle 如何迁移到 mysql_怎么将数据库从Oracle迁移到SQL Server,或从Oracle迁移到MySQL...

    有时候我们有迁移数据库的需求,例如从Oracle迁移到SQL Server,或者从MySQL迁移到Oracle. 很多江湖好汉一时不知如何手工操作,所幸的是Navicat提供了迁移的自动化操作界面. ...

  9. SQL Server 2014数据访问层

    介绍 ( Introduction ) As a person who has always enjoyed finding new and innovative ways to perform ta ...

最新文章

  1. iphone通讯录批量删除_iPhone通讯录删除了如何恢复?用对方法快速找回,亲测有效!_...
  2. 系统架构设计:进程缓存和缓存服务,如何抉择?
  3. [20180606]如何dump数据库里面的汉字.txt
  4. how is Fiori launchpad host name and port number determined
  5. flutter 几秒前, 几分钟前, 几小时前, 几天前...
  6. .NET面试题系列(七)IIS
  7. Reveal v4(8796) 使用
  8. python的json.dump参数使用
  9. Dropdownlist插入值!
  10. 太极发送卡片软件_QQxml卡片消息发送-防撤回等等安卓QQ插件Notified-支持太极框架 -发送QQ卡片消息...
  11. Python调用腾讯API进行营业执照核验
  12. “互联网+”创新创业计划书(二)
  13. 2017 ACM-ICPC 亚洲区(青岛赛区)网络赛 HDU 6206 1001 Apple(三角形外接圆圆心和半径)
  14. nmap扫描端口命令详解linux网络探测之网络安全
  15. 基于控制的角度无人机集群——目标追踪
  16. thingworx ADO安装
  17. 习题 3.6 请编程序将China译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。
  18. 移动apn接入点哪个快_中国移动接入点设置哪个快
  19. 转一位计算机牛人的心得,谈到计算机和数学,很实用~
  20. 残疾男子发起倡议:公务员招一定比例残疾人

热门文章

  1. 软件测试 测试停止标准_停止正常测试
  2. 垃圾邮件分类 python_在python中创建SMS垃圾邮件分类器
  3. Linux-Android启动之Init进程前传
  4. 修饰符const精妙之处
  5. python爬取豆瓣电影并分析_Python爬取豆瓣电影的短评数据并进行词云分析处理
  6. 电大计算机组成原理ppt,四川电大计算机组成原理(0023)第二次形考作业(课程号:5110023).docx...
  7. TypeScript类型检查机制
  8. Dollar Dayz POJ - 3181
  9. shop--12.阿里云部署以及域名绑定
  10. codevs 1576 最长严格上升子序列