RACで全ノードのセッション情報を参照する

RACの運用管理をしていて、セッション情報を定期的に出力しておくシェルなんかを
作ろうとしたけど、v$sessionだと実行インスタンスの情報しか出ないので、
ループまわして、全ノードに対して実行して、無理やり情報を出力させているやつは、
どこのどいつだーい??




私だよっ!




っつーわけで、RACだと、v$系のVIEWは実行インスタンスの情報しか出してくれません。
そんなときに、役に立つのがgv$系のVIEW。これ、意外と知らない人が多いので、
ぜひぜひ試していただければと思います。

gv$sessionなんかだと、こういう感じです。

SQL> desc gv$session
 名前                                      NULL?    型
 ----------------------------------------- -------- ----------------------------
 INST_ID                                            NUMBER
 SADDR                                              RAW(8)
 SID                                                NUMBER
 SERIAL#                                            NUMBER
 AUDSID                                             NUMBER
 PADDR                                              RAW(8)
 USER#                                              NUMBER
 USERNAME                                           VARCHAR2(30)
 COMMAND                                            NUMBER
 OWNERID                                            NUMBER
 TADDR                                              VARCHAR2(16)
 LOCKWAIT                                           VARCHAR2(16)
 STATUS                                             VARCHAR2(8)
 SERVER                                             VARCHAR2(9)
 SCHEMA#                                            NUMBER
 SCHEMANAME                                         VARCHAR2(30)
 OSUSER                                             VARCHAR2(30)
 PROCESS                                            VARCHAR2(12)
 MACHINE                                            VARCHAR2(64)
 TERMINAL                                           VARCHAR2(30)
 PROGRAM                                            VARCHAR2(48)
 TYPE                                               VARCHAR2(10)
 SQL_ADDRESS                                        RAW(8)
 SQL_HASH_VALUE                                     NUMBER
 SQL_ID                                             VARCHAR2(13)
 SQL_CHILD_NUMBER                                   NUMBER
 PREV_SQL_ADDR                                      RAW(8)
 PREV_HASH_VALUE                                    NUMBER
 PREV_SQL_ID                                        VARCHAR2(13)
 PREV_CHILD_NUMBER                                  NUMBER
 MODULE                                             VARCHAR2(48)
 MODULE_HASH                                        NUMBER
 ACTION                                             VARCHAR2(32)
 ACTION_HASH                                        NUMBER
 CLIENT_INFO                                        VARCHAR2(64)
 FIXED_TABLE_SEQUENCE                               NUMBER
 ROW_WAIT_OBJ#                                      NUMBER
 ROW_WAIT_FILE#                                     NUMBER
 ROW_WAIT_BLOCK#                                    NUMBER
 ROW_WAIT_ROW#                                      NUMBER
 LOGON_TIME                                         DATE
 LAST_CALL_ET                                       NUMBER
 PDML_ENABLED                                       VARCHAR2(3)
 FAILOVER_TYPE                                      VARCHAR2(13)
 FAILOVER_METHOD                                    VARCHAR2(10)
 FAILED_OVER                                        VARCHAR2(3)
 RESOURCE_CONSUMER_GROUP                            VARCHAR2(32)
 PDML_STATUS                                        VARCHAR2(8)
 PDDL_STATUS                                        VARCHAR2(8)
 PQ_STATUS                                          VARCHAR2(8)
 CURRENT_QUEUE_DURATION                             NUMBER
 CLIENT_IDENTIFIER                                  VARCHAR2(64)
 BLOCKING_SESSION_STATUS                            VARCHAR2(11)
 BLOCKING_SESSION                                   NUMBER
 SEQ#                                               NUMBER
 EVENT#                                             NUMBER
 EVENT                                              VARCHAR2(64)
 P1TEXT                                             VARCHAR2(64)
 P1                                                 NUMBER
 P1RAW                                              RAW(8)
 P2TEXT                                             VARCHAR2(64)
 P2                                                 NUMBER
 P2RAW                                              RAW(8)
 P3TEXT                                             VARCHAR2(64)
 P3                                                 NUMBER
 P3RAW                                              RAW(8)
 WAIT_CLASS_ID                                      NUMBER
 WAIT_CLASS#                                        NUMBER
 WAIT_CLASS                                         VARCHAR2(64)
 WAIT_TIME                                          NUMBER
 SECONDS_IN_WAIT                                    NUMBER
 STATE                                              VARCHAR2(19)
 SERVICE_NAME                                       VARCHAR2(64)

inst_idってのが追加されてますので、gv$instanceなんかと引っ掛けてやるといいわけですね。

SQL> set linesize 150
SQL> set pagesize 1000
SQL> col instance_name for a10
SQL> col username for a16
SQL> select i.instance_name ,s.username ,s.sid ,s.serial# ,s.status
  2    from gv$session s
  3        ,gv$instance i
  4   where s.inst_id = i.inst_id
  5     and s.username is not null;

INSTANC USERNAME                SID    SERIAL# STATUS
------- ---------------- ---------- ---------- ------------------------
orcl1   DBSNMP                 1062         41 INACTIVE
orcl1   SYS                    1026      23035 ACTIVE
orcl1   SYS                     997      26342 ACTIVE
orcl2   DBSNMP                 1081         25 INACTIVE
orcl2   SYS                     979       8091 ACTIVE

5行が選択されました。

こんな感じになるわけです。

では。