您的位置:首页技术文章
文章详情页

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

【字号: 日期:2023-11-19 09:09:45浏览:3作者:猪猪
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 = SQL2KHS_FDS_TRACE_LEVEL = ONHS_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.oraSID_DESC= (SID_NAME=hssql2k) (ORACLE_HOME=d:oracleora81) (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> statusConnecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=SAM)(PORT=1521)))STATUS of the LISTENER------------------------Alias;;LISTENERVersionTNSLSNR for 32-bit Windows: Version 8.1.7.0.0 - ProdutionStart Date;;;;;02-JUL-2003 11:08:31Uptime;0 days 1 hr. 41 min. 2 secTrace Level;;;;offSecurity; OFFSNMP;;;OFFListener Parameter Filed:oracleora81networkadminlistener.oraListener Log File d:oracleora81networkloglistener.logServices 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 successfullyLSNRCTL>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 - ProductionWith the Partitioning optionJServer Release 8.1.7.0.0 - ProductionSQL> 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)
标签: Oracle 数据库