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行が選択されました。
こんな感じになるわけです。
では。