详解Oracle 网络服务
概述
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网络服务架构
关于连接描述符
一个连接描述符时在 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内容,感兴趣的朋友可以关注下!
Book with folded pages Sweden.