作者:张希 摘 要 该文在介绍Oracle SQL*NET TCP/IP的通信模式及其组成 的基础上,给出SQL*NET TCP/IP各版本下客户端及服务器端的具体配 置,以及利用SQL*NET在分布式环境下进行数据透明存取的应用实例。
要害词 SQL*NET TCP/IP通信模式配置应用 一、引言 SQL*NET是Oracle公司的远程数据访问报文式软件,用于实现客户 机/服务器和服务器/服务器的通信。SQL*NET V2基于Oracle的TNS(Tr ansparent Network Substrate)和MPI(Multiprotocol Interchange) 新技术,在SQL*NET V1基础上又增加了两种功能即与所有工业标准协 议之间单一、公用的接口以及通过一个或者多个多协议互换连接物理 上独立的网络应用的能力。 以下在概要介绍Oracle SQL*NET TCP/IP的通信模式及其组成的 基础上,给出SQL*NETTCP/IP各版本下客户端及服务器端的具体配置, 以及利用SQL*NET在分布式环境下进行数据透明存取的应用实例。 二、SQL*NET TCP/IP的通信模式及其组成 SQL*NET TCP/IP在网络通信协议层中,对应ISO/OSI模式的第五层 和第六层(即会话层和表示层)。所以它的运行还需第三方的TCP/IP网 络软件支持。基于客户机/服务器的SQL*NET TCP/IP网络通信模式如图1所示。 在分布式(事务)处理中,通常有两种不同类型的计算机分别起客 户机和服务器的作用。SQL*NET首先确保消除客户机和服务器之间的 所有区别(如内部数据类型表示,NLS国家语言字符集等),以实现客户 机和服务器透明通信。 图1 在完整的分布式处理中,不论是客户机/服务器模式还是服务器/ 服务器模式,都包含若干软件成分。图2分别示出客户机/服务器和服 务器/服务器对话阶段的组成部分(以SQL*NET V2为例) 客户机和服务器之间的通信是在对等的关系下以具有相应通信级 别的类似堆栈的方式进行的,堆栈每一层上的逻辑交换单元运送那个 级别所用的综合内容。Oracle客户机和服务器交换SQL语句和数据行, 在各UPI/OPI(User/Oracle Programmatic Interface)层,将这些交换 转换成一系列对SQL例程(如注册、语法分析、执行等)的调用。SQL*N ET层将这些调用作为一系列Oracle发送/接收报文对待。TNS负责解决 所有一般性的机器及连通问题(如服务器或TNS的终点位置,辨别连接 中是一个还是多个Multiprotocol Interchange多种协议互换等),Ora cle协议适配器则负责把TNS功能映像到客户机/服务器连接中所用的 任何工业标准协议上,或在multicommunity(多群体)连接情况下客户 机服务器的某些组成部分所用的工业标准协议上。 图2 三、SQL*NET TCP/IP 的配置 1.SQL*NET V1的配置 (1)服务器端.在/ect/services文件中加入下列行: orasrv 1525/tcp (orasrv是SQL*NET V1使用的服务进程,1525为ORACLE公司推荐用 户使用的TCP/IP的端口号).在/etc/hosts文件中加入数据库服务器的 主机名和绝对地址: 如: 202.119.13.99 fgg0 202.119.13.98 fgg1 (2)客户端 在oracle.ini文件中加入: local=host-string (缺省数据库) remote=host-string (远程数据库) host-string也称connect-string(连接串),用来指明要连接的Or acle数据库。 host-string的形式为: net-prefix:host.name:SYSTEM.ID 其中:net-prefix 网络协议前缀,对于TCP/IP为T host name Oracle服务器的主机名,此主机名应在hosts文件中描 述过。 SYSTEM ID ORACLE服务器的标识符。 上述两个数据库服务器的host-string分别为: t:fgg0:ora7 t:fgg1:ora7 2.从SQL*NET V1升级到SQL*NET V2的配置 (1)服务器端 .在/ect/services文件中加入下列行: listener 1521/tcp .在oracle-home/network/admin目录中配置listener.ora文件: LISTENER: (ADDRESS-LIST: (ADDRESS: (PROTOCOL:tcp) (HOST:fgg0) (PORT:1521) ) ) STARTUP-WAIT-TIME-LISTENER=0 CONNECT-TIMEOUT-LISTENER=10 SID-LIST-LISTENER= (SID-LIST: (SID-DESC: (SID-NAME:ora7) (ORACLE-HOME:/eXPort/home/oracle7) ) ) TRACE-LEVEL-LISTENER=OFF ·如是分布式数据库,且有多个V2节点,则还需配置tnsnames.ora 文件: (参见客户端此文件) ·如网络中包含一个或多个Multiprotocol Interchang(多种协 议互换),则还需配置tnsnav.ora文件: ·如在采用SQL*NET V2 后启用ORACLE7的多线索,则需在oracle- home/dbs/oracle7.ini(ORACLE初始化参数文件)加入下列行: mts-dispatchers="tcp,1" mts-max-dispatchers=10 mts-servers=1 mts-max-servers=10 mts-service:ora7 mts-listener-address:"(ADDRESS=(PROTOCOL:tcp)(PORT:1521) (HOST:fgg0))" (2)客户端 .在c:\orawin\network\admin目录中配置tnsnames.ora文件: fgg0: (DESCRIPTION: (ADDRESS-LIST: (ADDRESS: (PROTOCOL:TCP) (Host:202.119.13.99) (Port:1521) ) ) (CONNECT-DATA:(SID:ora7) ) ) fgg1: (DESCRIPTION: (ADDRESS-LIST: (ADDRESS: (PROTOCOL:TCP) (Host:202.119.13.99) (Port:1521) ) ) (CONNECT-DATA:(SID:ora7) ) ) .在c:\windows\oracle.ini文件中将"local=......."改为:loca l=fgg0。
四、连接数据库 可使用下列两种方法之一连接数据库: 1.在SQL*PLUS中,用CONNECT命令。 如需连接到fgg0主机上的数据库,可用: connect scott/tiger@t:fgg0:ora7 (用SQL*NET V1连接) connect scott/tiger@fgg0 (用SQL*NET V2连接) 2.在启动SQL*PLUS时,指明所需连接的数据库。 如需连接到fgg1主机上的数据库,可用: sqlplus scott/tiger@t:fgg1:ora7 (用SQL*NET V1连接) sqlplus scott/tiger@fgg1 (用SQL*NET V2连接。) 五、存取数据库 一旦配置好了SQL*NET,运行在网络上的Oracle工具,服务器均可 存取、修改、共享和存储在其它服务器上的数据。Oracle分布式数据 库系统提供多种存取远程数据库的方法。 1.建立数据库链路 Oracle中的数据库链路为远程数据库定义一路径。一旦建立了数 据库链路,任何一个连接到本地数据库的应用,均可通过数据库链路引 用远程数据库上的表和视图,仅需在相应的SQL语句中所引用的远程表 和视图后加上@数据库链路名。 如:在fgg1主机上建立一引用fgg0数据库的数据库链路: create public database link link0 using'fgg0';(根据需要 可建立公用和专用的数据库链路) 在本地查询fgg0数据库中表temp: select * from scott.temp@link0; 2.建立表快照 ORACLE的表快照(table snapshot)答应一个主表在分布式数据库 的其它结点进行复制。使用快照可在本地为远程数据维持只读副本。 如在fgg1上建立fgg0数据库中表temp的快照: create snapshot tempshot as select * from scott.temp@lin k0; 查询快照: select * from tempshot; 在定义快照时还可指定快照刷新的时间和方式,以确保快照及时 、正确地反映主表中的数据。 3.数据库之间数据复制 使用SQL*PLUS的COPY命令可在网络上的数据库之间进行表及表的 数据复制。 如在fgg1上复制fgg0数据库中表temp,复制后的表名为temp1: copy from scott/tiger@fgg0 replace temp1 using select * from temp 根据需要可使用replace,create,insert,update四种控制语句。
|