Page tree
Skip to end of metadata
Go to start of metadata

一般情况下,数据集只从单个数据源中查询数据,亦即一个数据集仅仅依赖于单个数据源。但是,有些报表的单个数据集可能来自多个数据库服务器,甚至来自不同的数据库管理系统。为这样的报表准备数据时,需要使用联合查询技术,设计来自多个数据源的数据集。
常见的多源数据集分两种情况:多Oracle数据源和Oracle与SQL Server异构数据源。

多Oracle数据源

如果需要将来自多个Oracle服务器上的数据集成在一张报表上,可采用Oracle的数据库链接(Database Link)技术,具体使用方法如下:
(1)以具备CREATE DBLINK权限的身份登录到Oracle数据库,这个数据库应该是报表取数的数据源库。
(2)创建数据库链接。假设从另一台Oracle服务器db2server抓取数据,创建数据库链接的语句应形如:
create database link ORCL02
connect to db2user identified by db2userpassword
using ' (DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = db2server)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = db2servicename)
)
)';
其中:
db2user:提供数据的Oracle服务器上的用户名,不要带引号。例如:system。
db2userpassword:登录提供数据的Oracle服务器的密码,不要带引号。
db2server:提供数据的Oracle服务器的计算机名或IP地址,不要带引号。
db2servicename:提供数据的Oracle服务器的服务名,默认为ORCL。
(3) 在查询语句中,以 @数据库链接 的形式,使用数据库链接抓取数据,例如:
select * from HR.JOBS@ORCL02;
其中的ORCL02就是上面创建的数据库链接名。

异构数据源

异构数据源是指同一张报表中的多个不同种类的数据源。例如在一张人力资源报表中,人员信息可能一部分来自OA系统的Oracle数据库;另一部分数据来自HRM系统的SQL Server数据库。
要将来自Oracle和SQL Server服务器的数据集成到一张报表上,有两种技术路线:一是基于Oracle的透明网关(Transparent Gateways),从Oracle抓取SQL Server的数据。另一个是基于SQL Server的链接服务器(Linked Server),从SQL Server抓取Oracle的数据。
(1)从Oracle抓取SQL Server数据
Oracle的透明网关(Transparent Gateway)可以实现Oracle数据库对非Oracle 数据库的透明访问。"透明"可以理解为用户感受不到被查询的数据库并非当前Oracle数据库。
使用Oracle透明网关抓取SQL Server数据的步骤如下:
(a)安装配置透明网关
Oracle的透明网关(Transparent Gateway)是Oracle数据库管理系统中的一个单独授权的模块。透明网关可以装在独立的一台的机器上,也可以安装在Oracle Server端或非Oracle Server端。
(b)创建数据库链接
在Oracle中抓取SQL Server数据,首先需要通过透明网关建立一个对SQL Server 的数据库连接(Database Link),语句如下:
Create database link 【数据库链接名】 connect to 【用户名】 identified by 【密码】 using '服务名'。
其中,用户名和密码是SQL Server的用户登录名和密码,服务名则是Oracle Server端的TNS_NAMES 文件里已经配置好的服务名。
(c) 在查询语句中,以 @数据库链接 的形式,使用数据库链接抓取数据,例如:
select * from 表名@链接名;
(2)从SQL Server抓取Oracle数据
采用SQL Server的链接服务器,可以实现从SQL语句中抓取任意ODBC或OLE DB数据源。抓取Oracle数据的方法如下:
(a)在SQL Server服务器上安装Oracle客户端。这是保证SQL Server能够抓取Oracle数据的基础。
(b)使用Oracle Net Configuration Assistant,创建本地NET服务名,指向Oracle数据库。
(c)在SQL Server Management Studio中,创建链接服务器:服务器对象 – 链接服务器 – 新建链接服务器,如下图:

(d)输入Oracle服务器相关信息,如下图:

链接服务器:任意名称,如:ORCL01
访问接口:选择 Oracle Provider for OLE DB
产品名称:任意输入,如:Oracle
数据源:这个最关键,就是Oracle本地NET服务名,如:ORCL
(e)成功保存链接服务器信息后,在SQL Server的查询语句中,以 链接服务器名.. 的形式,使用链接服务器。例如:
select * from ORCL01..HR.JOBS
比较异构数据源的两种抓取外部数据的方式,由于Oracle的透明网关属于单独授权的模块,配置过程也非常复杂,而SQL Server链接服务器基于标准的ODBC和OLE DB接口规范,配置简单且无额外成本,因此建议采用后者,即采用SQL Server的链接服务器,抓取Oracle数据。

  • No labels