首页 > 数据库 > Oracle > 正文

ORACLE 8i的普通连接技术的介绍

2024-08-29 13:31:11
字体:
来源:转载
供稿:网友

oracle 8i的普通连接技术的介绍

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

欢迎大家同我交流:小白  [email protected]

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

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

 

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                     listener

version                   tnslsnr for 32-bit windows: version 8.1.7.0.0 - produ

tion

start date                02-jul-2003 11:08:31

uptime                    0 days 1 hr. 41 min. 2 sec

trace level               off

security                  off

snmp                      off

listener parameter file   d:/oracle/ora81/network/admin/listener.ora

listener log file         d:/oracle/ora81/network/log/listener.log

services summary...

  orcl          has 1 service handler(s)

  orcl          has 3 service handler(s)

  plsextproc            has 1 service handler(s)

  hssql2k               has 1 service handler(s)

the command completed successfully

lsnrctl>


hssql2k的侦听服务已经正常运行了。

 

第四步 修改数据库启动参数文件

修改数据库启动参数文件,设置global_names=false,如果设置为true(缺省),那么数据库连接名和全局数据库名一样,这将会导致ora-02085的错误。

 

第五步 创建访问non-oracle数据库的连接(database link)

   在sqlplus中,执行create database link命令。connect to 指定了连接到sql server的用户名和密码。


 

sql>create public database link sql2k connect to sa identified by manager using ‘sql2k’;

database link created.

 


 

第六步 测试


oracle8i enterprise edition release 8.1.7.0.0 - production

with the partitioning option

jserver release 8.1.7.0.0 - production

 

sql> connect scott/tiger;

connected.

sql> select count(*) from [email protected];

 

  count(*)

----------

       135


 

现在,oracle已经可以访问sqlserver数据库了。以上都是,笔者参考了oracle的联机帮助,并且实际测试的经过。笔者同时也发现,采用hsodbc其实也并不是很稳定,有的sql语句会引起hsodb agent的致命错误,同时有很多限制,采用透明网关应该就可以获得很好的效果。

但是, oracle 8i的这个特性,可以不安装额外的transparent gateway产品。因此,只要能够满足应用的数据访问要求,采用generic connectivity也不失为一个快速,经济的方法。

笔者的测试环境:windows2000 server+oracle 8i(8.1.7)


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表