当前位置:首页 > TAG信息列表 > oracle服务端和客户端的区别

oracle服务端和客户端的区别

oracle服务(详解Oracle网络服务)

oracle服务(详解oracle网络服务)

概述

oraclenet是一个软件层,驻留在客户端和数据库服务器上。它负责建立和维护客户端应用程序和服务器之间的连接,以及它们之间的信息交换,使用的是标准协议。

1.oraclenet基础层

在客户端上,应用程序于oraclenet基础层通信并维护连接。oraclenet基础层使用的是oracle协议支持,与业界标准的网络通信协议通信,例如tcp/ip,再与oracle数据库服务器通信。

oracle服务(详解Oracle网络服务)

在oracle数据库服务器上的情况和在客户端类似。网络协议发生请求到oracle协议支持层,然后发送信息到oraclenet基础层。oralcenet基础层再与数据库服务器进程通信处理客户端请求。

2.oracle协议支持

oraclenet基础层使用oracle协议支持与下列标准网络协议进行通信:

1.tcp/ip(4和6)

2.带ssl的tcp/ip

3.命名管道

–专门为微软局域网环境提供。一个服务器端程序创建一个命名管道,客户端进程以名为名称打开它。一边写入,再另一边就可以读取。

oracle网络服务架构

关于连接描述符

一个连接描述符时在tnsnames.ora文件中包含的一个或多个监听的地址和连接信息。

例如:

dbdao=(description=(address=(protocol=tcp)(host=dbdao.com)(port=1521))(connect_data=(sid=dbdao01)(service_name=dbdao01.com)(instance_name=dbdao01)))

protocol参数,用来指定监听协议地址。此处tcp代表的是tcp/ip在这个例子中address选项包含下列内容:

host参数定义了主机名。此处主机是dbdao.com

port参数定义了端口。此处指定是1521,这是默认的端口号

connect_data选项包含下列内容:

sid参数定义了oracle数据库的实例名。此处是dbdao01

service_name参数定义了目标数据库的服务名是dbdao01.com。在数据库中对应的是service_names初始化参数,也就是通常所说的全局数据库名。

instance_name参数定义数据库实例。这个是可选的参数。在安装和数据库创建的时候初始化参数instance_name默认为sid。

当然也可以直接使用简单连接字符串的方式例如:

connectscott/oracle@dbdao:1521/dbdao01.com–不指定端口默认使用1521connectscott/oracle@//dbdao/dbdao01.com–//是指定使用jdbc或url进行连接。普通的sql连接和不指定时等价。

其实就是本地命名配置的连接字符串,例如

dbdao/dbdao01.com:dedicated/dbdao01

对应于:

(description=(connect_data=(service_name=dbdao01.com)(instance_name=dbdao01)(server=dedicated))(address=(protocol=tcp)(host=dbdao)(port=1521)))

基本上只要安装了oraclenet服务软件的环境都可以使用简单连接命名。确保在sqlnet.ora文件中指定了names.directory_path参数中包含ezconnect此处dbdao为主机名,dbdao01.com是服务名,dbdao是实例名

例如:

names.directory_path=(ezconnect,tnsnames)

使用多个监听器来提高服务的可用性:

例如,配置多个监听到多个节点上,可以让客户端连接到相同的数据库服务:

(description=(address_list=(address=(protocol=tcp)(host=dbdao1-server)(port=1521))(address=(protocol=tcp)(host=dbdao2-server)(port=1521)))(connect_data=(service_name=dbdao01)))

注意:关于rac的负载均衡,不在此章节的讨论范文之类,有兴趣的同学可以参考:这样还可以利用负载均衡和故障转移特性。当客户端连接第一个监听的时候失败了,就会尝试其他的协议地址。如果启用了客户端连接平衡,客户端在连接的时候会随机连接到一个地址。(dbdao.comoracle11gocm培训)

关于监听器:

监听器的配置存储在配置文件listener.ora中。因为配置参数均为默认值,所以可以不用什么配置启动一个监听(没有配置文件listener.ora)。默认的监听名称时listener,支持无服务的启动,并监听固定的tcp协议地址:

(address=(protocol=tcp)(host=host_name)(port=1521))

监听转发客户端需要被支持的服务,这个服务会动态注册到监听上。这个动态注册的特性被称为服务注册(serviceregisration).12c之后,当数据库启动的时候lreg后台进程会调查监听是否启动,如果启动就会传递相关参数,如果没启动lreg会周期的尝试连接。在12c之前,pmon执行监听注册。

注意:listener的属性会重写local_listener参数。修改local_listener参数不会影响监听器配置的属性。只是影响pmon去自动的注册非1521的监听器。

远程监听参数remote_listener也是类似,用于注册数据库到远程的监听。local_listener和remote_listener参数的值由命名规则解析,通过设置tnsnames.ora来指定。如果tnsnames.ora未设置命名规则别名,在指定参数值的时候会出现ora-00119和ora-00132的错误。

例如在tnsnames.ora中配置:

dbdao_test=(description=(address=(protocol=tcp)(host=10.0.3.15)(port=1521))(connect_data=(service_name=dbdao01)))lsnrctl监听器工具

lsnrctl是一个交互式的命令行工具。直接运行lsnrctl可以进入控制台

运行help命令可以查询相关的使用说明:(dbdao.comoracle11gocm培训)

常用的命令:

lsnrctlreloadlistener_name

–重载配置

lsnrctlstartlistener_name

–启动监听

lsnrctlstoplistener_name

–关闭监听

lsnrctlstatuslistener_name

–查询监听的状态,会列出很多信息,注册的服务,使用的协议。关于实例信息,如果是ready表示允许连接。blocked表示实例不允许连接。unknown表明不是动态注册的,这状态是未知的。restricted表明实例处于拒绝模式。(dbdao.comoracle11gocm培训)

lsnrctlservicelistener_name

–service能显示关于服务和句柄的信息。

在使用lsnrctl命令时,如果不指定监听名称(lsnrctlreload,lsnrctlstartlsnrctlstop),默认使用的是listener。

有时候客户端在指定的时候无响应,那么会中断其连接。并且在监听器的日志中会出现:

ora-12525:tns:listenerhasnotreceivedclient’srequestintimeallowed的消息

可以通过setinbound_connect_timeout来设置时间:

例如:

lsnrctlsetinbound_connect_timeout600lsnrctlsave_config

--保留变更之前的listener配置文件,默认备份为listener.bak

后面会分享更多dba内容,感兴趣的朋友可以关注下!


眼霜之家 大刚优选

  • 关注微信关注微信

猜你喜欢

微信公众号