您的位置:首页 > 其它

聊聊跟踪监听器动态注册(Dynamic Register)方法

2015-09-01 09:37 330 查看

 

监听器动态注册是Oracle实例与监听器建立关系的一种重要途径。监听器Listener的作用类似中介,实现Oracle实例和远程Client Process的连接。Listener在“中介”过程中,是需要知道当前服务器上支持哪些Instance,以及对应的$ORACLE_HOME目录是什么。

 

这个过程中,有两种注册register方法:静态注册和动态注册。所谓静态注册,就是直接在listener.ora文件标记上服务名和对应文件。这种方式下,监听器程序是不知道Instance的真实情况的(启动还是关闭,还是已经僵死),所以在lsnrctl status列表中,静态注册服务的状态通常都是“UNKNOWN”。

 

动态注册情况则是不同的,Oracle实例会定期与监听器进程进行沟通,告知自身的存在和服务状态。这种方式的好处显而易见,就是让监听器能获取到实例真实的情况信息。目前,除了一些特殊的场景,我们通常都是选择动态注册作为监听主要方式。

 

动态监听的“责任人”是谁?就是Oracle实例的核心进程pmon。Pmon是Oracle数据库实例里面最重要的进程,可以说PMON存在就表示实例还存在。PMON的职责中,就有一项内容是进行动态注册工作。一些时候,我们会出于研究、分析问题的目的,需要跟踪动态注册行为。本篇就主要介绍几个常用的监控方式方法。

 

1、实验环境介绍

 

笔者选择11gR2进行测试,系统监听程序选择动态监听策略。

 

 

SQL> select * from v$version;

 

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

PL/SQL Release 11.2.0.4.0 - Production

CORE    11.2.0.4.0      Production

TNS for Linux: Version 11.2.0.4.0 - Production

NLSRTL Version 11.2.0.4.0 – Production

 

[oracle@aaalife ~]$ lsnrctl status

 

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 01-SEP-2015 01:17:19

 

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

 

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))

STATUS of the LISTENER

------------------------

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production

Start Date                31-AUG-2015 19:43:15

Uptime                    0 days 5 hr. 34 min. 3 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora

Listener Log File         /u01/app/oracle/diag/tnslsnr/aaalife/listener/alert/log.xml

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

Services Summary...

Service "aaadb" has 1 instance(s).

  Instance "aaadb", status READY, has 1 handler(s) for this service...

Service "aaadbXDB" has 1 instance(s).

  Instance "aaadb", status READY, has 1 handler(s) for this service...

The command completed successfully'

 

 

211g listener_registration事件跟踪

 

进入11g之后,Oracle提供了专门的动态监听跟踪事件方法。借助这种方法可以很方便的进行监听动作跟踪。通过alter system语句启动监听跟踪。

 

 

SQL> alter system set events='immediate trace name listener_registration level 3';

System altered.

 

SQL> alter system register; --主动启动一次监听动作

System altered.

 

SQL> alter system set events='immediate trace name listener_registration off';

System altered.

 

 

定位跟踪文件,注意这个过程是定位当前会话的跟踪文件,动态注册的核心问题是Pmon进程后台跟踪。

 

SQL> select value from v$diag_info where name='Default Trace File';

 

VALUE

--------------------------------------------------------------------------------

/u01/app/oracle/diag/rdbms/aaadb/aaadb/trace/aaadb_ora_26707.trc

 

其中可以找到对应的pmon跟踪文件。

 

*** 2015-09-01 01:20:35.026

*** SESSION ID:(162.43) 2015-09-01 01:20:35.026

*** CLIENT ID:() 2015-09-01 01:20:35.026

*** SERVICE NAME:(SYS$USERS) 2015-09-01 01:20:35.026

*** MODULE NAME:(sqlplus@aaalife.localdomain (TNS V1-V3)) 2015-09-01 01:20:35.026

*** ACTION NAME:() 2015-09-01 01:20:35.026

 

Listener registration dumped to PMON's trace file:

  /u01/app/oracle/diag/rdbms/aaadb/aaadb/trace/aaadb_pmon_17791.trc

 

*** 2015-09-01 01:21:08.871

Listener registration dumped to PMON's trace file:

  /u01/app/oracle/diag/rdbms/aaadb/aaadb/trace/aaadb_pmon_17791.trc

 

 

在跟踪文件aaadb_pmon_17791.trc中,可以找到注册动作行为。

 

 

------------------------------

Start Registration Information

------------------------------

 

Last update: 431530095 (280 seconds ago)

Flag: 0x4, 0x0

State: succ=1, wait=0, fail=0

 

Listeners:

  0 - (ADDRESS=(PROTOCOL=TCP)(HOST=aaalife.localdomain)(PORT=1521))

       state=1, err=0

       nse[0]=0, nse[1]=0, nte[0]=0, nte[1]=0, nte[2]=0

       ncre=0

       endp=(ADDRESS=(PROTOCOL=TCP)(HOST=aaalife.localdomain)(PORT=1521))

         flg=0x0 nse=12542

 

--注册实例名称信息

Instance: aaadb

  flg=0x0, upd=0x2

  info=(HOST=aaalife)

  node load=2, max=20480

  inst load=0, max=624

 

--该实例下所带的服务service信息

Services:

  0 - aaadb

       flg=0x4, upd=0x6

       goodnes=0, delta=1

  1 - aaadbXDB

       flg=0x5, upd=0x6

       goodnes=0, delta=1

 

Handlers:

  0 - Dedicated

       flg=0x80002002, upd=0x2

       services=aaadb

       hdlr load=25, max=399

 

Dispatchers:

  0 - D000

       addr=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=28177))

       inf=DISPATCHER <machine: aaalife.localdomain, pid: 17865>

       flg=0x1004, upd=0x0

       services=aaadbXDB

       hdlr load=0, max=1022

 

CMON Handlers:

 

Listen Endpoints:

 

----------------------------

End Registration Information

----------------------------

 

 

注意:监听器注册行为是分为两端,Oracle Instance负责找监听器注册,监听器也要去接受注册信息。本篇讨论的主要是Instance端的动作行为。在listener.log文件中,我们可以看到约10s一次的动态注册动作。

 

Tue Sep 01 08:08:36 2015

01-SEP-2015 08:08:36 * service_update * aaadb * 0

Tue Sep 01 08:15:31 2015

01-SEP-2015 08:15:31 * service_update * aaadb * 0

01-SEP-2015 08:15:34 * service_update * aaadb * 0

Tue Sep 01 08:18:37 2015

01-SEP-2015 08:18:37 * service_update * aaadb * 0

Tue Sep 01 08:20:55 2015

01-SEP-2015 08:20:55 * service_update * aaadb * 0

Tue Sep 01 08:25:31 2015

 

 

在监听信息中,注册实例、服务信息被加入到其中。

 

3oradebug跟踪法

 

oradebug是我们进行Oracle研究的利器,通过进程层面的分析处理,可以窥视到系统内部机制。在11g之前,使用oradebug是我们跟踪动态注册的一个方法。

 

首先要知道pmon进程对应的进程编号。

 

 

[root@aaalife ~]# ps -ef | grep pmon

oracle   17791     1  0 Aug31 ?        00:00:00 ora_pmon_aaadb

root     27372 27345  0 01:28 pts/1    00:00:00 grep pmon

 

 

调用oradebug,绑定pmon进程,监视行为信息。

 

 

SQL> oradebug setospid 17791

Oracle pid: 2, Unix process pid: 17791, image: oracle@aaalife.localdomain (PMON)

SQL> oradebug event 10257 trace name context forever, level 16

Statement processed.

SQL> oradebug tracefile_name

/u01/app/oracle/diag/rdbms/aaadb/aaadb/trace/aaadb_pmon_17791.trc

SQL> alter system register;

 

System altered.

 

SQL> oradebug event 10257 trace name context off;

Statement processed.

 

 

在跟踪文件上,可以找到对应信息。

 

 

*** 2015-09-01 01:37:05.833

Received ORADEBUG command (#2) 'event 10257 trace name context forever, level 16' from process 'Unix process pid: 27342, image: <none>'

 

*** 2015-09-01 01:37:05.833

Finished processing ORADEBUG command (#2) 'event 10257 trace name context forever, level 16'

 

*** 2015-09-01 01:37:07.785

err=-300 lbflgs=0x0 tbtime=0 tntime=0 etime=300 srvs=1 nreqs=0 sreqs=0 asrvs=1

error=-300 etime=300 control=0 integral=0 lasterr=-300 lastetm=300

kmmlrl: status: succ=1, wait=0, fail=0

 

(篇幅原因,有省略……)

 

*** 2015-09-01 01:37:25.798

err=-300 lbflgs=0x0 tbtime=0 tntime=0 etime=300 srvs=1 nreqs=0 sreqs=0 asrvs=1

error=-300 etime=300 control=0 integral=0 lasterr=-300 lastetm=300

kmmlrl: status: succ=1, wait=0, fail=0

 

*** 2015-09-01 01:37:27.647

kmmlrl: status: succ=1, wait=0, fail=0

kmmlrl: register now

kmmgdnu: aaadbXDB

         goodness=0, delta=1,

         flags=0x5:unblocked/not overloaded, update=0x6:G/D/-

kmmgdnu: aaadb

         goodness=0, delta=1,

         flags=0x4:unblocked/not overloaded, update=0x6:G/D/-

kmmlrl: node load 5

kmmlrl: nsgr update returned 0

kmmlrl: nsgr register returned 0

 

*** 2015-09-01 01:37:30.650

err=-485 lbflgs=0x0 tbtime=0 tntime=0 etime=485 srvs=1 nreqs=0 sreqs=0 asrvs=1

error=-485 etime=485 control=0 integral=0 lasterr=-300 lastetm=300

kmmlrl: status: succ=1, wait=0, fail=0

 

(篇幅原因,有省略……)

*** 2015-09-01 01:37:57.864

Received ORADEBUG command (#4) 'event 10257 trace name context off' from process 'Unix process pid: 27342, image: <none>'

 

*** 2015-09-01 01:37:57.864

Finished processing ORADEBUG command (#4) 'event 10257 trace name context off'

 

 

其中可见监听动作。

 

4、结论

 

动态监听是Oracle对外服务的重要途径步骤,一般而言,动态监听是不会出现大的问题故障的。在一些特殊场合下,我们可能需要进行监听行为跟踪分析,来解决问题故障。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17203031/viewspace-1788100/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/17203031/viewspace-1788100/

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐