[20200109]主機名如何定位IP.txt

lfree發表於2020-01-09

[20200109]主機名如何定位IP.txt

--//論壇自己問的問題.http://www.itpub.net/thread-2123724-1-1.html

> select distinct program,module,action,client_id,machine from V$ACTIVE_SESSION_HISTORY where sql_id='5yqm7qry03mcg' and sample_time > =trunc(sysdate);
PROGRAM MODULE ACTION  CLIENT_ID  MACHINE
------- ------ ------- ---------- --------------------
                                  WIN-FNKVKB319PM

1 row selected.
--//其它資訊都沒有,如果知道這個主機名WIN-FNKVKB319PM的IP地址呢?

R:\>ping WIN-FNKVKB319PM
Ping 請求找不到主機 WIN-FNKVKB319PM。請檢查該名稱,然後重試。

--//以前加入登入觸發器如下:這樣v$session的CLIENT_INFO欄位記錄了IP地址。
--//注:如果開啟DBMS_SESSION.set_identifier (v_client_info),我們生產系統會產生大量trace。
CREATE OR REPLACE TRIGGER SYS.ENABLE_PARA_CURSOR_SHARING
--  10046 TRACELEVELS
   -- 0  - Turn off tracing.
   -- 1  - Basic SQL_TRACE.
   -- 4  - Level 1 plus Bind Variables.
   -- 8  - Level 1 plus wait events.
   -- 12 - Level 1 plus Bind/Wait event information.
   AFTER LOGON
   ON DATABASE
DECLARE
   v_exe           v$session.program%TYPE;
   v_client_info   v$session.client_info%TYPE;
   v_sid           v$session.SID%TYPE;
   v_osuser        v$session.osuser%TYPE;
   v_machine       v$session.machine%TYPE;
   v_module        v$session.module%TYPE;
   v_ok            VARCHAR (10);
BEGIN
   SELECT NVL(SYS_CONTEXT ('userenv', 'ip_address'),'127.0.0.1') INTO v_client_info FROM DUAL;

   -- add and set clint_ip to application_info
   DBMS_APPLICATION_INFO.set_client_info (v_client_info);

   --增加的程式碼
   --   DBMS_SESSION.set_identifier (v_client_info);
   ...
END;
/

--//不過我們在登入是設定DBMS_APPLICATION_INFO.set_client_info (v_client_info);,這樣v$session的CLIENT_INFO欄位記錄了IP地址。

> select distinct client_info from V$SESSION where machine='WIN-FNKVKB319PM';
CLIENT_INFO
--------------------
192.168.XXX.XXX

--//只要這臺機器登入,就能查詢到IP,做一個記錄。
--//實際上如果設定DBMS_SESSION.set_identifier (v_client_info),在V$ACTIVE_SESSION_HISTORY的client_id欄位就會記錄IP地址。
--//自己測試看看:
1.環境:
SCOTT@book> @ ver1

PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

CREATE OR REPLACE TRIGGER SYS.ENABLE_PARA_CURSOR_SHARING
   --  10046 TRACELEVELS
   -- 0  - Turn off tracing.
   -- 1  - Basic SQL_TRACE.
   -- 4  - Level 1 plus Bind Variables.
   -- 8  - Level 1 plus wait events.
   -- 12 - Level 1 plus Bind/Wait event information.
   AFTER LOGON
   ON DATABASE
DECLARE
   v_exe           v$session.program%TYPE;
   v_client_info   v$session.client_info%TYPE;
   v_sid           v$session.SID%TYPE;
   v_osuser        v$session.osuser%TYPE;
   v_machine       v$session.machine%TYPE;
   v_module        v$session.module%TYPE;
   v_ok            VARCHAR (10);
BEGIN
   SELECT NVL(SYS_CONTEXT ('userenv', 'ip_address'),'127.0.0.1') INTO v_client_info FROM DUAL;

   -- add and set clint_ip to application_info
   DBMS_APPLICATION_INFO.set_client_info (v_client_info);

   --增加的程式碼
   DBMS_SESSION.set_identifier (v_client_info);
END;
/

2.登入執行:
SCOTT@78> select count(*) from emp,emp,emp,emp,emp,emp,emp;
  COUNT(*)
----------
 105413504

--//確定sql_id=gau6fcukuvcz7.

SCOTT@78> select distinct program,module,action,client_id,machine from V$ACTIVE_SESSION_HISTORY where sql_id='gau6fcukuvcz7' and sample_time > =trunc(sysdate)-1/24;
PROGRAM     MODULE       ACTION CLIENT_ID    MACHINE
----------- ------------ ------ ------------ ------------------
sqlplus.exe SQL*Plus            192.168.xx.y WORKGROUP\XXX84BCP

--//這樣V$ACTIVE_SESSION_HISTORY的CLIENT_ID欄位就有記錄。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2672692/,如需轉載,請註明出處,否則將追究法律責任。

相關文章