日期:2013-07-09  浏览次数:20520 次


ORACLE 8i的普通连接技术的引见

====================================

欢迎大家同我交流:小白  enhydra_boy@tom.com

欢迎转载,请保留本声明,谢谢!

====================================

 

Oracle 8.1.6 中引入普通连接技术的概念(Generic connectivity),这一连接处理方案满足了对许多异种数据库存储的数据访问需求,同时并不需求安装ORACLE的通明网关(ORACLE Transparent Gateway)。该特性允许使用业界标准 ODBC 和 OLEDB 建立通明连接。

什么是普通连接(Generic connectivity)

普通连接是ORACLE的一个低端数据集成处理方案,目标是提供ORACLE 8i可以连接到非oracle数据库的能力。它的实现,是通过异种服务代理(Heterogeneous Services)来实现的。

异种服务代理的类型:
ODBC agent for accessing ODBC data providersOLE DB agent for accessing OLE DB data providers that support SQL processing--sometimes referred to as OLE DB (SQL)ODBC agent for acceng OLE DB data providers without SQL processing support--sometimes referred to as OLE DB (FS)
普通连接的系统结构图



ORACLE客户端程序访问非ORACLE数据库的过程:客户端程序是通过SQL*NET连接ORACLE服务器,关于异种数据库的访问,交给HS代理实现。

HS代理通过下面的功用组件实现:ODBC管理器->ODBC驱动程序->数据库的网络客户端->目标数据库。

如果异种库和ORACLE数据库位于同一台服务器上,普通来说驱动程序是可以直接和本机的数据库通讯,就可以省去数据库的网络客户端这一层。

数据类型的转换

ORACLE自动实现ODBC和OLEDB数据类型到ORACLE数据类型的转换,具体的对应转换可以参考ORACLE的联机协助http://download-west.oracle.com/docs/cd/A87860_01/doc/server.817/a76960/datatype.htm。

普通连接的限制

1          含有BLOB列的表必需要有一个主键字段;

2          BLOB/CLOB数据不直接通过pass-through的查询方式;

3          在WHERE子句中包括了函数的Updates或deletes语句不被允许;

4          不支持存储过程的调用;

HS代理(odbc/oledb)不支持分布式事务(distributed transactions),只支持单点的事务(single-site transactions)。

普通连接代理的配置

下面,我引见一下,利用普通连接的ODBC配置。利用HS odbc代理连接SQL SERVER 2000。

第一步初始化文件的建立

首先,你必需要创建初始化文件。ORACLE提供了样例初始化文件,名字是init<agent>.ora,<agent>可能是hsodbc,hsoledb,hsolefs,分别代表了三品种型的代理,位于$ORACLE_HOME/HS/ADMIN下。

把对应的文件复制一份出来,并且改名为init<HS_SID>.ora,<HS_SID>是你SQL SERVER ODBC代理起的别名。

复制并创建了一个inithssql2k.ora文件,编辑inithssql2k.ora文件。参数有:


# This is a sample agent init file that contains the HS parameters that are

# needed for an ODBC Agent.

 

#

# HS init parameters

#

#HS_FDS_CONNECT_INFO = <odbc data_source_name>

#HS_FDS_TRACE_LEVEL = <trace_level>

HS_FDS_CONNECT_INFO = SQL2K

HS_FDS_TRACE_LEVEL = ON

HS_AUTOREGISTER = TRUE

 

#

# Environment variables required for the non-Oracle system

#

#set <envvar>=<value>


第二步 创建异种服务代理的数据字典

执行$ORACLE_HOME/rdbms/admin/caths.sql,创建相关的系统表和视图。

第三步 创建异种服务代理的任务环境

添加hssql2k的侦听服务,$ORACLE_HOME/NETWORK/ADMIN/listener.ora


SID_DESC=

     (SID_NAME=hssql2k)

       (ORACLE_HOME=d:\oracle\ora81)

      (PROGRAM=hsodbc)

    )


修正$ORACLE_HOME/NETWORK/ADMIN/tnsnames.ora,添加一个网络服务名

sql2k,将在后面创建数据库联接时用到。


sql2k =

(DESCRIPTION=

     (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))

     (CONNECT_DATA=(SID=hssql2k))

     (HS=OK)

 )


重新启动侦听,并且察看服务形状


LSNRCTL for 32-bit Windows: Version 8.1.7.0.0 - Production on 02-JUL-2003 12:49:

30

 

(c) Copyright 1998 Oracle Corporation.  All rights reserved.

 

Welcome to LSNRCTL, type "help" for information.

 

LSNRCTL> status

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=SAM)(PORT=1521)))

STATUS of the LISTENER

------------------------

Alias   &