通过链接服务器,SQL Server 数据库引擎 和 Azure SQL 数据库托管实例可从远程数据源中读取数据,并针对 SQL Server 实例之外的 OLE DB 数据源等远程数据库服务器执行命令。

在本场 Chat 中,会讲到如下内容:

  • 通过在 MS SQL Server 设置链接服务器而访问 Oracle 数据库数据的简单例程

适合人群:

  • 需要从其他类型数据库数据导入 SQL Server 的技术人
  • 需要通过 SQL Server 操作其他数据库的技术人

说明

从 SQL Server 中查询 ORACLE 中的数据,可以在 SQL Server 中创建到 ORACLE 的链接服务器来实现的,但是根据 32 位 、64 位的机器和软件,需要用不同的驱动程序来实现。

本例程在 64 位的机器上,通过访问接口:OracleProvide for OLE DB,来实现。

1、测试环境

Microsoft Windows [版本 10.0.17134.556]Microsoft SQL Server 2016 (SP2-GDR) (KB4293802) - 13.0.5081.1 (X64) (Build 17763: )Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production

2、ORACLE 环境的设置

Sqlserver 服务器安装 Oracle 客户端,此过程省略在 Oracle 上创建数据库用户并创建数据表

C:\Users\schina>sqlplus / as sysdbaSQL*Plus: Release 12.1.0.2.0 Production on 星期二 1 月 22 14:40:41 2019Copyright (c) 1982, 2014, Oracle.  All rights reserved.Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit ProductionWith the Partitioning, OLAP, Advanced Analytics and Real Application Testing optionsSQL> drop user schina cascade;SQL> create user schina identified by schina;SQL> grant dba to schina;SQL> conn schina/schinaSQL> create table testt(a int,b varchar2(100));SQL> insert into testt values(123,'abc');SQL> commit;SQL>

配置 listener.ora

LISTENER =  (DESCRIPTION_LIST =    (DESCRIPTION =      (ADDRESS = (PROTOCOL = TCP)(HOST = 123-111)(PORT = 1521))      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))    )  )

配置 tnsname.ora

ORCL =  (DESCRIPTION =    (ADDRESS = (PROTOCOL = TCP)(HOST = 123-111)(PORT = 1521))    (CONNECT_DATA =      (SERVER = DEDICATED)      (SERVICE_NAME = orcl)    )  )

配置 Oracle 网络安全,,不配置此项可能报“ORA-12638: 身份证明检索失败” 错误

方法一 设置链接服务器

新建链接服务器选择“新建链接服务器”“常规”属性页填写链接服务器:链接别名,可随意提供程序:Oracle Provider for OLE DB产品名称:随意数据源:为 tnsname.ora 内配置的名称范围接口字符串:保留空即可在“安全性”属性页,选择使用次安全上下文建立连接远程登陆:oracle 用户名使用密码:oracle 用户密码可能错误解决方法在“访问接口”处,修改一下接口权限测试查询

select * from openquery(ora, 'SELECT * FROM testt')

方法二 openrowset

也可以使用

select *  from openrowset('OraOLEDB.Oracle',     --接口                              'orcl';           --tnsname 配置名                              'schina';          --用户名                              'schina',          --密码                              'select * from testt')    --语句

其他设置

由于安全配置可能会报如下错误SQL Server 阻止了对组件“Ad Hoc Distributed Queries”的 STATEMENT“OpenRowset/OpenDatasource”的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用“Ad Hoc Distributed Queries”。有关启用“Ad Hoc Distributed Queries”的详细信息,请搜索 SQL Server 联机丛书中的“Ad Hoc Distributed Queries”。启用 Ad Hoc Distributed Queries 的方法,执行下面的查询语句就可以了:

 exec sp_configure 'show advanced options',1    reconfigureexec sp_configure 'Ad Hoc Distributed Queries',1  reconfigure

阅读全文: http://gitbook/gitchat/activity/5df0963dea5c803f1fc56b3d

您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。

更多推荐

SQL Server中查询ORACLE的数据