[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字段就有记录。