概述

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

1.Oracle Net 基础层

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

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

2.Oracle 协议支持

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

1.TCP/IP(4和6)

2.带SSL的TCP/IP

3.命名管道

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

oracle协议解析(详解Oracle网络服务)(1)

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。

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

CONNECT scott/oracle@dbdao:1521/dbdao01.com–不指定端口默认使用1521CONNECT scott/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)))

基本上只要安装了Oracle Net 服务软件的环境都可以使用简单连接命名。确保在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.com oracle 11g OCM培训)


关于监听器:

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

(ADDRESS=(PROTOCOL=tcp)(HOST=host_name)(PORT=1521))

监听转发客户端需要被支持的服务,这个服务会动态注册到监听上。这个动态注册的特性被称为服务注册(service regisration).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.com oracle 11g OCM培训)

常用的命令:

lsnrctl RELOAD listener_name

–重载配置

lsnrctl start listener_name

–启动监听

lsnrctl stop listener_name

–关闭监听

lsnrctl status listener_name

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

lsnrctl service listener_name

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

在使用lsnrctl 命令时,如果不指定监听名称(lsnrctl RELOAD,lsnrctl start lsnrctl stop),默认使用的是LISTENER。

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

ORA-12525:TNS: listener has not received client’s request in time allowed 的消息

可以通过SET INBOUND_CONNECT_TIMEOUT 来设置时间:

例如:

lsnrctl set INBOUND_CONNECT_TIMEOUT 600lsnrctl save_config

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


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

oracle协议解析(详解Oracle网络服务)(2)

Book with folded pages Sweden.

,