作者张希
摘 要 该文在介绍Oracle SQL*NET TCP/IP的通信模式及其组成
的基础上给出SQL*NET TCP/IP各版本下客户端及服务器端的具体配
置以及利用SQL*NET在分布式环境下进行数据透明存取的应用实例
关键词 SQL*NET TCP/IP通信模式配置应用
一引言
SQL*NET是Oracle公司的远程数据访问报文式软件用于实现客户
机/服务器和服务器/服务器的通信SQL*NET V基于Oracle的TNS(Tr
ansparent Network Substrate)和MPI(Multiprotocol Interchange)
新技术在SQL*NET V基础上又增加了两种功能即与所有工业标准协
议之间单一公用的接口以及通过一个或者多个多协议互换连接物理
上独立的网络应用的能力
以下在概要介绍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网络通信模式如图所示
在分布式(事务)处理中通常有两种不同类型的计算机分别起客
户机和服务器的作用SQL*NET首先确保消除客户机和服务器之间的
所有区别(如内部数据类型表示NLS国家语言字符集等)以实现客户
机和服务器透明通信
图
在完整的分布式处理中不论是客户机/服务器模式还是服务器/
服务器模式都包含若干软件成分图分别示出客户机/服务器和服
务器/服务器对话阶段的组成部分(以SQL*NET V为例)
客户机和服务器之间的通信是在对等的关系下以具有相应通信级
别的类似堆栈的方式进行的堆栈每一层上的逻辑交换单元运送那个
级别所用的综合内容Oracle客户机和服务器交换SQL语句和数据行
在各UPI/OPI(User/Oracle Programmatic Interface)层将这些交换
转换成一系列对SQL例程(如注册语法分析执行等)的调用SQL*N
ET层将这些调用作为一系列Oracle发送/接收报文对待TNS负责解决
所有一般性的机器及连通问题(如服务器或TNS的终点位置辨别连接
中是一个还是多个Multiprotocol Interchange多种协议互换等)Ora
cle协议适配器则负责把TNS功能映像到客户机/服务器连接中所用的
任何工业标准协议上或在multicommunity(多群体)连接情况下客户
机服务器的某些组成部分所用的工业标准协议上
图
三SQL*NET TCP/IP 的配置
SQL*NET V的配置
()服务器端在/ect/services文件中加入下列行:
orasrv
/tcp
(orasrv是SQL*NET V使用的服务进程为ORACLE公司推荐用
户使用的TCP/IP的端口号)在/etc/hosts文件中加入数据库服务器的
主机名和绝对地址:
如:
fgg
fgg
()客户端
在oracleini文件中加入:
local=hoststring (缺省数据库)
remote=hoststring (远程数据库)
hoststring也称connectstring(连接串)用来指明要连接的Or
acle数据库
hoststring的形式为:
netprefix:hostname:SYSTEMID
其中:netprefix 网络协议前缀对于TCP/IP为T
host name Oracle服务器的主机名此主机名应在hosts文件中描
述过
SYSTEM ID ORACLE服务器的标识符
上述两个数据库服务器的hoststring分别为:
t:fgg:ora
t:fgg:ora
从SQL*NET V升级到SQL*NET V的配置
()服务器端
在/ect/services文件中加入下列行:
listener
/tcp
在oraclehome/network/admin目录中配置listenerora文件:
LISTENER:
(ADDRESSLIST:
(ADDRESS:
(PROTOCOL:tcp)
(HOST:fgg)
(PORT:)
)
)
STARTUPWAITTIMELISTENER=
CONNECTTIMEOUTLISTENER=
SIDLISTLISTENER=
(SIDLIST:
(SIDDESC:
(SIDNAME:ora)
(ORACLEHOME:/export/home/oracle)
)
)
TRACELEVELLISTENER=OFF
·如是分布式数据库且有多个V节点则还需配置tnsnamesora
文件:
(参见客户端此文件)
·如网络中包含一个或多个Multiprotocol Interchang(多种协
议互换)则还需配置tnsnavora文件:
·如在采用SQL*NET V 后启用ORACLE的多线索则需在oracle
home/dbs/oracleini(ORACLE初始化参数文件)加入下列行:
mtsdispatchers=tcp
mtsmaxdispatchers=
mtsservers=
mtsmaxservers=
mtsservice:ora
mtslisteneraddress:(ADDRESS=(PROTOCOL:tcp)(PORT:)
(HOST:fgg))
()客户端
在c:\orawin\network\admin目录中配置tnsnamesora文件:
fgg:
(DESCRIPTION:
(ADDRESSLIST:
(ADDRESS:
(PROTOCOL:TCP)
(Host:)
(Port:)
)
)
(CONNECTDATA:(SID:ora)
)
)
fgg:
(DESCRIPTION:
(ADDRESSLIST:
(ADDRESS:
(PROTOCOL:TCP)
(Host:)
(Port:)
)
)
(CONNECTDATA:(SID:ora)
)
)
在c:\windows\oracleini文件中将local=改为:loca
l=fgg
四连接数据库
可使用下列两种方法之一连接数据库:
在SQL*PLUS中用CONNECT命令
如需连接到fgg主机上的数据库可用:
connect scott/tiger@t:fgg:ora (用SQL*NET V连接)
connect scott/tiger@fgg
(用SQL*NET V连接)
在启动SQL*PLUS时指明所需连接的数据库
如需连接到fgg主机上的数据库可用:
sqlplus scott/tiger@t:fgg:ora (用SQL*NET V连接)
sqlplus scott/tiger@fgg
(用SQL*NET V连接)
五存取数据库
一旦配置好了SQL*NET运行在网络上的Oracle工具服务器均可
存取修改共享和存储在其它服务器上的数据Oracle分布式数据
库系统提供多种存取远程数据库的方法
建立数据库链路
Oracle中的数据库链路为远程数据库定义一路径一旦建立了数
据库链路任何一个连接到本地数据库的应用均可通过数据库链路引
用远程数据库上的表和视图仅需在相应的SQL语句中所引用的远程表
和视图后加上@数据库链路名
如:在fgg主机上建立一引用fgg数据库的数据库链路:
create public database link link usingfgg;(根据需要
可建立公用和专用的数据库链路)
在本地查询fgg数据库中表temp:
select * from scotttemp@link;
建立表快照
ORACLE的表快照(table snapshot)允许一个主表在分布式数据库
的其它结点进行复制使用快照可在本地为远程数据维持只读副本
如在fgg上建立fgg数据库中表temp的快照:
create snapshot tempshot as select * from scotttemp@lin
k;
查询快照:
select * from tempshot;
在定义快照时还可指定快照刷新的时间和方式以确保快照及时
正确地反映主表中的数据
数据库之间数据复制
使用SQL*PLUS的COPY命令可在网络上的数据库之间进行表及表的
数据复制
如在fgg上复制fgg数据库中表temp复制后的表名为temp:
copy from scott/tiger@fgg
replace temp
using select * from temp
根据需要可使用replacecreateinsertupdate四种控制语句