ITPub博客

首页 > IT职业 > IT生活 > 異質資料庫鍊

異質資料庫鍊

原创 IT生活 作者:hzh_hu 时间:2006-01-19 09:12:50 0 删除 编辑

1、安装 Microsoft Data Access Components (MDAC)SDK ODBC driver

2、test whether CATHS has run.connect to the Oracle server

as schema "SYSTEM" and do "DESCRIBE SYS.HS_FDS_CLASS".

If it does not exist, connect as SYS (or internal) and run

the CATHS script. (ORACLE_HOMERDBMSADMINCATHS.SQL)

3、建立 SQL SERVER 数据源

TEST_SQLSERVER

4、配置tnsnames.ora. (ORACLE_HOMENETWORKADMIN)

TEST_SQLSERVER =

(DESCRIPTION=

(ADDRESS=

(PROTOCOL=tcp)

(HOST=)

(PORT=1521)

)

(CONNECT_DATA=

(SID=TEST_SQLSERVER)

)

(HS=)

)

5、配置listener.ora. (ORACLE_HOMENETWORKADMIN)

(SID_DESC=

(SID_NAME=TEST_SQLSERVER)

(ORACLE_HOME=D:OracleiSuites)

(PROGRAM=hsodbc)

)

6、重启ORACLE监听.

CMD

LSNRCTL STOP

LSNRCTL START

LSNRCTL STATUS

7、添加网关配置文件. (ORACLE_HOMEHSADMIN)

文件名为:initTEST_SQLSERVER.ora

文件内容:

#

# HS init parameters

#

HS_FDS_CONNECT_INFO = TEST_SQLSERVER

HS_FDS_TRACE_LEVEL = 0

#HS_FDS_TRACE_FILE_NAME = TEST_SQLSERVER.trc

#

# Environment variables required for the non-Oracle system

#

#set =

8、进入ORACLE SQL*PLUS,建立数据库链.

CREATE DATABASE LINK TOSQL USING 'TEST_SQLSERVER';

[@more@]

ORACLE异类服务 响应此篇文章
引言响应


象SQL SERVER的LINKED SERVER一样,ORACLE也能访问非ORACLE数据库,这是通过ORACLE异类服务(HS)实现的。从ORACLE开始引入并在ORACLE8I版本中得到进一步扩充。ORACLE异类服务集成在ORACLE8I数据库服务器中,实现对非ORACLE系统的访问。根据访问非ORACLE数据库方式的不同,ORACLE提供了两种不同的服务:
1. ORACLE开放互联(Generic Connectivity):是一个轻量级的互联方案,通过ODBC或OLE DB实现对非ORACLE数据库的访问。
2. ORACLE透明网关(Transparent Gateway):提供更健壮的互联方式,包括分布查询和分布式事务支持。
对希望访问的每一个非ORACLE数据库系统,都要求有一个异类服务代理(Heterogeneous Services Agent),它在ORACLE服务器和远程数据库间进行通讯,他包含了访问数据库时需要的特定数据库信息。
在与非ORACLE系统进行通讯时,ORACLE捕获和存储SQL命令,并针对每一个远程数据原的特征转换信息。无论何时向远程数据库发送一个请求,ORACLE都要查询存储的信息(该信息存在于ORACLE中以HS开头的数据字典中,详细请参照ORACLE HELP <>),将该请求转换为远程服务器能够处理的格式。

一. ORACLE8I通用互联
ORACLE8I通用互联在ORACLE8I服务器版本8.1.6中提供,他使用ODBC或OLD DB实现开放互联并与远程数据源通信。ORACLE8I服务器中同时提供ODBC 和OLE DB异类代理,不需再使用其他网络产品。
同时通用互联工作方式和编写ODBC, OLE DB客户端程序相似。主要区别似ORACLE服务器要先发起连接操作然后在与远程数据源通信,因此应用程序不需做任何修改。这种远程数据访问的优点是:
1. 很容易实现,客户应用不需做任何改变
2. 使用标准接口(ODBC,OLE DB)进行信息访问
3. 异类服务提供ORACLE数据类型到标准接口的数据类型转换
4. 支持SQL语言和内置函数
缺点是:不能执行远程存储过程,也不支持分布应用,只支持单节点事务,对有些数据类型的支持存在一些问题,譬如,SQL SERVER中image数据类型。不过对于一个不需要网关的数据源进行查询,采用通用互联还是有优势的。
二.ORACLE8I透明网关
针对通用互联存在的限制,ORACLE8I透明网关对访问的非ORACLE数据源提供了更多特性支持。目前HS代理支持DB2,SYBASE,SQL SERVER和INFORMIX.。值得注意的是,通用互联以集成到ORACLE8I数据库服务器中并成为其中的一部分,而每个透明网管都必须单独购买(ORACLE9I中包含透明网管组件)。
透明网关提供的功能:
1. 分布式事务:他允许一个事务跨越ORACLE和非ORACLE系统,保证事务要么完全提交要么完全会滚。
2. 透明SQL访问:集成两种不同的数据源使他们看上去一样,实际上,开发者不必担心两个系统间的语法差异,因为网管代理会将所用的SQL命令转换为目标数据库能够接受的语法格式。
3. 数据字典转换:与透明SQL访问一样,网关代理也将任意数据字典查询转换为非透明SQL访问系统的数据字典。
4. 直接传送SQL:给予程序员直接访问远程系统的能力。他能使开发者直接利用数据库特有的功能,但是此功能需要开发者了解目标数据库的语法,因为网关代理不对他进行转化。
5. 访问存储过程:允许程序执行存储过程,就像他是PL/SQL远程过程一样。

下面介绍透明网关提供的服务:
事务服务:连接到远程系统时,事务服务要完成两个任务。第一,首次进行访问时在两个系统间建立一个身份确认Session,Session结束时断开此连接,第二,事务服务扮演各个分布式事务间协调器的角色,它使用两阶段提交协议维护全局一致。为了实现分布式事务处理,需要使用MS DTC(MICROSOFT 分布事务协调器)在多个数据库之间协调两阶段提交过程。
SQL服务:SQL服务映射并转换ORACLE请求为远程系统对应的语句。它使用异类服务数据字典表中存储的信息决定如何转换SQL请求才能使非ORACLE系统能够理解,其中包括将ORACLE系统函数转换为对应的目标数据库函数,将ORACLE数据类型映射为相应的目标数据库的数据类型,以及数据字典的转换等。
过程服务:将存储过程映射为等价的目标数据库的过程,另外也使用存储在异类服务数据字典中的信息将ORACLE功能映射为目标数据库的功能。
三.建立异类服务代理环境
无论是使用通用互联还是透明网关,建立代理的步骤都是相同的。包括
1. 安装异类服务数据字典
该步骤完成在ORACLE数据库中创建数据字典表、视图和包。创建这些数据库对象的脚本是%ORACLE_HOME%RDBMSADMINCATHS.SQL文件。需要记住的是,运行该脚本必须以SYS或INTERNAL用户登陆。
创建这些对象的目的是保存远程系统的信息,这些信息包括功能翻译,SQL翻译和数据字典翻译。将信息存储在数据字典使访问数度加快,不必每次都查询目标数据库,这些信息相对来说是静态的。下面是异类服务使用的几个数据字典视图:
视图名称 描 述
HS_FDS_CLASS 允许访问的远程系统的类型信息
HS_FDS_INST 允许访问的远程系统中一个特殊类的每个实例信息
HS_CLASS_INIT 每个类的初始化参数信息
HS_INST_INIT 每个实例的初始化参数信息
HS_BASE_DD 异类服务能够翻译的所有ORACLE数据字典信息
HS_CLASS_DD 每个类的数据字典翻译内容信息
HS_INST_DD 每个实例的数据字典翻译内容信息
HS_BASE_CAPS 异类服务支持的功能信息
HS_CLASS_CAPS 每个类支持的功能信息
HS_INST_CAPS 每个实例支持的功能信息
HS_EXTERNAL_OBJECTS 分布式外部过程需要的信息



除了这些表和视图外,ORACLE还提供了DBMS_HS包,他完成对类、实例、初始化参数和异类服务支持的功能进行维护。详细请参考ORACLE ONLINE HELP<Distributed Database Systems>>。
2. 配置异类服务代理
配置异类服务比较简单,我个人认为理解异类服务的概念、架构和其提供的服务相对比较重要,因为只有了解了异类服务,才能对配置有深刻的理解。

对于通用互联,必须告诉异类服务将如何连接到非ORACLE系统,是使用ODBC 还是OLE DB。ORACLE提供了两个示例参数文件(位于%ORACLE_HOME%NETWORK
ADMIN目录下)inithsodbc.ora和inithsoledb.ora.
1).将inithsoledb.ora 文件拷贝为initGCSQL2000文件,参数文件名必须按照initGSID.ora进行命名转换,GSID是tnsnames.ora和listener.ora文件指定的网关系统标识符名称。
2).编辑initGCSQL2000.ora文件并更新以下内容:
HS_FDS_CONNECT_INFO=”UDLFILE=%ORACLE_HOME%ORA81HSADMINGCSQL2000.UDL”
#HS_FDS_TRACE_LEVEL=16
#HS_FDS_TRACE_FILE_NAME=
3).在%ORACLE_HOME%ORA81HSADMIN中建立GCSQL2000.UDL,最简单的方法是建立GCSQL2000.txt文本文件,将其文件名改为GCSQL2000..UDL,然后右击该文件,设置其属性,在属性对话框中选择正确的驱动程序并设置数据库连接属性,测试成功后退出。
4).重新启动监听器。

对于不同的数据库ORACLE提供了不同的透明网关,如下表所列,在这些目录下ORACLE提供了一些默认的参数文件,只要做简单的修改即可完成配置,下面以SQL SERVER为例进行配置,对于其他数据库的配置大同小异,读者可自己动手试试。
数据库类型 对应的ORACLE目录
SQL SERVER %ORACLE_HOME%ORA8TG4MSQL
DB2 %ORACLE_HOME%ORA8TG4DRDA
SYBASE %ORACLE_HOME%ORA8TG4SYBS

1). 将inittg4msql.ora 文件拷贝为initTGSQL2000文件,参数文件名必须按照initGSID.ora进行命名转换,GSID是tnsnames.ora和listener.ora文件指定的网关系统标识符名称。
2). 编辑initTGSQL2000.ora文件并更新SQL条目HS_FDS_CONNECT_INFO,用SERVER_NAME.DATABASE_NAME指定为你想要连接的SQLSERVER数据库,例如,为了连接YLQ服务器上的Products数据库,指定HS_FDS_CONNECT_INFO = YLQ.products即可。需要说明的是,对每个希望通过透明服务器代理进行访问的数据库,都需要一个独立的参数文件来包含正确的连接信息。
SQLSERVER透明网关目前还不支持SQL SERVER2000,并且不能连接到有实例名的SQLSERVER数据库上。

3. 配置监听器和Net8服务名
为了ORACLE数据库能够与SQL SERVER数据库进行通信,首先必须配置NET8服务名,使ORACLE服务器能够与监听器进程识别的代理进行交互,需要注意的是服务名必须与异类服务参数文件中指定的网关系统标识符(GSID)一致,另外NET8服务名中还必须包括HS=OK子句,以确保该连接能使用异类服务,下面是使用OLE DB和透明网关进行互联的TNSNAMES.ORA文件的例子:
MSOLEDB=(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=YLQ)(PORT=1521))
(CONNECT_DATA=(SID=GCSQL2000))
(HS=OK)
)

TGMSQL=(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=YLQ)(PORT=1521))
(CONNECT_DATA=(SID=TGSQL2000))
(HS=OK)
)
接下来便是配置监听器,使他能以指定的系统标识符监听异类服务的连接请求,当监听器收到请求后,把它传送给PROGRAM条目指定的代理程序,以下是配置的例子:
LISTENER=(ADDRESS=(PROTOCOL=TCP)(HOST=YLQ)(PORT=1521))
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=GCSQL2000)
(ORACLE_HOME=C:ORACLEORA81)
(PROGRAM=HSOLESQL)
)
(SID_DESC=
(SID_NAME=TGSQL2000)
(ORACLE_HOME=C:ORACLEORA81)
(PROGRAM=TG4MSQL)
)
)
记住要使你的配置立即生效,必须重新启动监听器
4. 创建数据库连接(DATABASE LINK)
创建异类服务数据库连接和创建普通的数据库连接没有任何区别,这里我就不想赘述了,详细请参考<>
5. 测试数据库连接
查询数据
SELECT * FROM “dbo”.”SYS_DB_INFO”@MSOLEDB;
创建同义词
CREATE SYNONYM L_SYS_DB_INFO FOR “dbo”.”SYS_DB_INFO”@MSOLEDB;
执行存储过程
exec check_money@TGSQLSERVER(par1,par2)
利用DBMS_HS_PASSTHROUGH包直接发送SQL.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/95530/viewspace-813479/,如需转载,请注明出处,否则将追究法律责任。

上一篇: Shmmax參數
下一篇: VY小語
请登录后发表评论 登录
全部评论

注册时间:2011-01-06

  • 博文量
    47
  • 访问量
    573567