跟踪SQL


今天看视频学习了怎样在查看客户端执行的sql,把它记录下来


C:\Users\tyty>sqlplus u1/u1@10.201.1.134/tyodz

SQL*Plus: Release 10.2.0.3.0 - Production on 星期一 9月 26 14:40:05 2011

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.


连接到:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create table test (a int);

表已创建。

SQL> insert into test values (9);

已创建 1 行。

在Windows上连接远端服务器上的数据库,在服务器上可以查看这个用户的会话,也可以查看这个会话的transaction。

SQL> select sid,username,status from v$session where username is not null;

       SID USERNAME                       STATUS
---------- ------------------------------ --------
       130 U1                             INACTIVE
       137 SYS                            ACTIVE
   
SQL> select addr from v$transaction;

ADDR
--------
378D67AC

在操作系统层上查看网络连接的情况
   
[oracle@centos ~]$ netstat -anp|more
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             Sta
    -                  
.......
tcp        0      0 10.201.1.134:1521           10.52.23.20:58314           EST
ABLISHED 8654/oracletyodz   
.......
可以看到监听与Windows端的58314端口进行连接,Linux端的进程为8654,这个进程就是oracle的专有服务器进程。

[oracle@centos ~]$ ps -ef|grep 8654
oracle    8654     1  0 18:05 ?        00:00:00 oracletyodz (LOCAL=NO)


在上面可以看到,在Windows上与oracle进行连接的端口为58314,下面查看这个端口号对应Windows的什么应用程序
C:\Users\tyty>netstat -b

活动连接

  协议  本地地址          外部地址        状态
。。。。。。
  TCP    10.52.23.20:58314      10.201.1.134:1521      ESTABLISHED
 [sqlplus.exe]
 
 发现就是u1用户的sqlplus
 
 
下面查看数据库上的transaction
SQL> select addr,ses_addr,xid from v$transaction;

ADDR     SES_ADDR XID
-------- -------- ----------------
378D67AC 38840234 06000300B7020000    只有一行

SQL> select saddr,sid,username,status from v$session where username is not null;

SADDR           SID USERNAME                       STATUS
-------- ---------- ------------------------------ --------
393F46BC        130 SYS                            ACTIVE
38840234        139 U1                             INACTIVE

 

SQL> select saddr,sid,paddr,username,status from v$session where username is not null;

SADDR           SID PADDR    USERNAME                       STATUS
-------- ---------- -------- ------------------------------ --------
393F46BC        130 3925D5A8 SYS                            ACTIVE
38840234        139 3925759C U1                             INACTIVE

通过$transaction的ses_addr和$session的saddr可以找出这个会话是那个用户发起的,就是u1用户

SQL> select addr,spid from v$process;

ADDR     SPID
-------- ------------------------
3924B584
3924C030 2861
3924CADC 2863
3924D588 2867
3924E034 2869
3924EAE0 2871
3924F58C 2877
39250038 2875
39250AE4 2879
39251590 2881
3925203C 2883

ADDR     SPID
-------- ------------------------
39252AE8 2885
39253594 2887
39254040 2889
39254AEC 2891
39255598 2893
39256044 2895
39256AF0 8700
3925759C 8654   --这一行
39258048 8717
39258AF4 2916
392595A0 2918

ADDR     SPID
-------- ------------------------
3925A04C 2920
3925AAF8 2922
3925B5A4 2924
3925C050 2926
3925CAFC 2928
3925D5A8 8703
3925E054 2948
3925EB00 2940
39260058 2942

31 rows selected.


通过$session的PADDR和$process的addr又可以找oracle服务器发起这个transaction进程的pid
SQL> !ps -ef|grep 8654
oracle    8654     1  0 18:05 ?        00:00:00 oracletyodz (LOCAL=NO)
在通过netstat命令就可以找到客户端,与前面的相同


SQL> select sid,prev_sql_addr,username ,status from v$session where username is not null;
       SID PREV_SQL USERNAME                       STATUS
---------- -------- ------------------------------ --------
       130 31D52240 SYS                            ACTIVE
       139 38DBC15C U1                             INACTIVE
   
通过$session的prev_sql_addr可以找到这个会话上一次执行sql的hash值。

SQL> select sql_text,address from v$sql where address='38DBC15C';

SQL_TEXT
--------------------------------------------------------------------------------
ADDRESS
--------
insert into test values (9)
38DBC15C
查询v$sql就能看到想要查找的transaction所执行的sql。
 
 

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

转载于:http://blog.itpub.net/25361369/viewspace-708300/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值