根据计划需要学习Listener的一些基础知识,现在总结一下。
1.监听的作用
用于建立客户端与服务器之间的网络连接。
监听器运行在服务器端,属于一种网络服务,用于监听客户端向数据库发出的连接请求。
2.客户端与服务器端建立连接的过程
- 客户端发起一个连接请求
- 监听接收到请求判断是否有效
- 监听启动一个专用服务器进程(另有共享服务器进程模式,较少用)用于接收connection
- 在专用服务器进程进程启动之后,监听会将这个connection传递给这个专用服务器进程
- 专用服务器进程通过这个connection来跟客户端(用户进程)握手
- 专用服务器进程跟客户端信息交换需要建立一个session
- session打开
3.一条SQL执行过程
虽然与监听不太相关,但是还是记录在这
摘一段《OCP/OCA认证考试指南全册》内容
段落引用
用户进程生成SQL语句,服务器进程则执行这些语句。
一条SQL的执行经历了以下4个阶段:分析、绑定、执行及取出。
在分析阶段,服务器进程会理解指定SQL语句的实际含义以及最佳的执行方式。
分析涉及与实力的共享池的交互作用,也就是说共享池存储结构用于将SQL语句转换为实际的可执行部分。
在绑定阶段,任何变量都被扩展为字面值。随后的执行阶段需要更多地使用实例的SGA,并且还可能需要使用数据库。
在某条语句的执行期间,将会读取或更新数据库缓冲区缓存内的数据,同时将变更写入重做日志缓冲区。但是,如果相关的数据块不位于缓冲区缓存内,那么服务器进程会从数据文件中读取这些数据。这是执行语句时数据库自身唯一参与的地方。
最后,服务器进程在执行周期的取出阶段将执行语句生成的结果集发送回用户进程,用户进程随后为了显示而格式化结果集。
4.创建监听
- netca
- netmgr
- 手工创建监听:直接编辑listener.ora,默认路径为$ORACLE_HOME/network/admin/
5.监听操作
安装完成后使用 lsnrctl status 命令查看监听状态,其他命令有:
help 查看所有命令
start 启动监听
stop 关闭监听
status 查看监听器状态
services 监看监听器提供的服务(信息比status更完整)
version 显示监听器的版本
reload 强制监听器在listener.ora中重读条目
save_config 将任何联机更改写入listener.ora文件
trace 启用对监听器活动的跟踪
change_password 设置用于管理侦听器的口令(尝试设置,不过这个口令好像并不对服务器端操作监听起作用)
quit 从工具退出,不保存对listener.ora文件的更改
exit 从工具退出,保存对listener.ora文件的更改
set 设置各种选线,如跟踪和超时
show 显示已为监听器设置的选项
注意:操作默认对名为LISTENER的监听执行,操作其他的名称需要指定,如lsnrctl status LISTENER2
6.监听状态
以下是执行lsnrctl status的输出
Alias监听器别名、Version监听器版本、Start Date启动时间、Uptime已启动时间、Trace Level跟踪、参数文件路径、日志文件路径。
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
PROTOCOL:协议
HOST:监听的主机名或IP
PORT:监听的端口,默认是1521
Service "pxk" has 1 instance(s).
Instance "pxk", status READY, has 1 handler(s) for this service...
Service:服务名
Instance:实例名
status:READY 动态监听状态,静态监听状态为UNKOWN。动态监听由PMON进程自动注册
Service "pxk2XDB" has 1 instance(s).
Instance "pxk2", status READY, has 1 handler(s) for this service...
标记为XDB的服务名是XML数据库协议服务器,允许如FTP、HTTP这样的协议连接到数据库,了解即可。
7.动态监听与静态监听
动态监听:数据库正常开启状态下可以进行连接,否则不行
静态注册:不论数据库状态如何,均能进行连接。ADG备库的listener.ora需要配置静态注册
listener.ora的静态监听格式为:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = <db_name>)
(ORACLE_HOME = <oracle_home>)
(SID_NAME = <oracle_sid>)
)
)
8.清理监听日志文件
- 关闭监听日志记录
lsnrctl set log_status off - 备份listener.log
- 清空日志
cat /dev/null > listener.log - 开启监听日志记录
lsnrctl set log_status on
注意:上面包含了启动和关闭监听日志文件的方法
lisnrctl set log_status off
lsnrctl set log_status off