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

原创 2003年07月19日 00:38:00

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

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

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

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

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

 

Oracle 8.1.6 中引入普通连接技术的概念(Generic connectivity),这一连接解决方案满足了对许多异种数据库存储的数据访问需求,同时并不需要安装ORACLE的透明网关(ORACLE Transparent Gateway)。该特性允许使用业界标准 ODBC OLEDB 建立透明连接。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

什么是普通连接(Generic connectivity)

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

异种服务代理的类型:

  • ODBC agent for accessing ODBC data providers

  • OLE 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自动实现ODBCOLEDB数据类型到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子句中包括了函数的Updatesdeletes语句不被允许;

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

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

普通连接代理的配置

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

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

首先,你必须要创建初始化文件。ORACLE提供了样例初始化文件,名字是init<agent>.ora,<agent>可能是hsodbchsoledbhsolefs,分别代表了三种类型的代理,位于$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 sysobjects@sql2k;

 

  COUNT(*)

----------

       135

 

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

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

笔者的测试环境:Windows2000 Server+ORACLE 8i(8.1.7)

JAVA数据库连接大全 Oracle8/8i/9i数据库 Sql Server DB2

一、jsp连接Oracle8/8i/9i数据库(用thin模式) testoracle.jsp如下: String url="jdbc:oracle:thin:@localhost:1521:...
  • yfrainy
  • yfrainy
  • 2009年07月07日 15:55
  • 872

关于Oracle后面8i,9i,10g,11g的问题

最近刚毕业进入一家公司,经理让我做一个从一个库导入另一个库的方法,给了我个需求,里面的Oracle数据库就是这样写的:Oracle 10g,当时不懂什么意思,还以为是Oracle的一个数据库呢,就没有...
  • wangtong1234567
  • wangtong1234567
  • 2016年08月02日 12:02
  • 413

win,oracle8i登录oracle时显示协议适配器错误

今天遭遇ORA-12560: TNS: 协议适配器错误的问题。上网查询无都是说要检查服务是不是开启了,检查过后,发现 监听服务;database instance;注册表都是正常的,为啥会一直出现这...
  • hgjgd
  • hgjgd
  • 2016年08月15日 10:29
  • 499

在windows xp下如何彻低卸载oracle客户端(8i,其他类似)

关键字: oracle 删除实现方法:     1、   开始->设置->控制面板->管理工具->服务,停止所有Oracle服务。     2、   开始->程序->Oracle   - ...
  • L0veIT
  • L0veIT
  • 2012年07月31日 10:30
  • 495

oracle 8i 关键字列表

Oracle8 SQL ReferenceRelease 8.0A58225-01 ...
  • horsefaced
  • horsefaced
  • 2006年10月30日 10:46
  • 2317

Oracle:又见ORA-04031

在Oracle8/8i中,ORA-04031的问题是由来已久的,使用svrmgrl也不能执行shutdown immediate了.只能通过shutdown abort关闭数据库后重起. 进一步检查发...
  • liu2js
  • liu2js
  • 2007年02月15日 09:58
  • 247

ORACLE 8i,9i 表连接方法全介绍

    一般的相等连接: select * from a, b where a.id = b.id; 这个就属于内连接。       对于外连接: Oracle中可以使用“(+) ”来表示,9i可以使...
  • zhuangwei517
  • zhuangwei517
  • 2007年05月22日 09:53
  • 367

Oracle必读好书推荐 -------------------------------------------------------------------------- tkyte的书 1、Ex

Oracle必读好书推荐 -------------------------------------------------------------------------- tkyte的...
  • notbaron
  • notbaron
  • 2016年08月24日 23:32
  • 30055

oracle grid简介

Oracle9i于2000年9月29日正式推出。  Oracle10g于2003年9月9日推出第一版,2004年12月8日推出第二版  另外i代表internet,g代表grid  关于网格...
  • zoubf
  • zoubf
  • 2015年05月31日 09:12
  • 415

经典Oracle图书

Oracle8i Internal Services by Steve Adams    Steve Adams 的经典之作 ... 深入探讨了Oracle的内部机制及原理,是深入学习Oracle的必...
  • zwk_9
  • zwk_9
  • 2011年04月13日 09:40
  • 547
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ORACLE 8i的普通连接技术的介绍
举报原因:
原因补充:

(最多只允许输入30个字)