oracle客户端回退sql语句,oracle从客户端到sql语句追踪

oracle从客户端到sql语句追踪

这两天看小布老师的视频学习了一下从客户端到oracle数据库发送执行的SQL语句的跟踪,整理一下笔记。

需要用到的命令:netstat

oracle端要用到的四个视图为:

V$session:当前有多少个用户连接到数据库服务器上

V$transaction事务信息

V$process进程信息

V$SQL:当前正在运行的一些SQL的情况

这四个图的关系为:

a8adcf627ac5c221eeb442ce3f860688.png

图1

下面进行探索:

第一步:

首先在数据库端以sysdba身份登录oracle,查询v%transaction视图

SQL>select ADDR from v$transaction;

no rows selected

显示当前没事务在处理

第二步:

windows端使用SQL/PLUS以HR用户连接到远程oracle,执行语句

insert into t values (3,'lisi');

d16085c9b79fd7ba155f5dce408dcbf0.png

图2

再次查询事务视图:

SQL> select ADDR,SES_ADDR from v$transaction;

ADDR                SES_ADDR

----------------           ----------------

00000000830EE248    00000000853C67F8

Elapsed: 00:00:00.00

这里显示已经有了一个事务。

第三步:

查询v$session视图

SQL> select SADDR,SID,PADDR,SQL_ADDRESS,PREV_SQL_ADDR,USERNAME,STATUS fromv$session;

SADDR                   SID PADDR            SQL_ADDRESS      PREV_SQL_ADDR    USERNAME STATUS

---------------- -------------------------- ---------------- ---------------- -------- ----------

0000000085292D98          1 0000000085079BB0 00               00                        ACTIVE

000000008528FF28          2 000000008507BC30 00               00                        ACTIVE

000000008528D0B8          3 000000008507DCB0 00               00                        ACTIVE

000000008528A248          4 000000008507FD30 00               00                        ACTIVE

00000000852873D8          5 0000000085081DB0 00               00                        ACTIVE

0000000085284568          6 0000000085083E30 00               00                        ACTIVE

00000000852816F8          7 0000000085085EB0 00               00                        ACTIVE

000000008527E888          8 0000000085087F30 00               00                        ACTIVE

000000008527BA18          9 000000008508C030 00               00                        ACTIVE

0000000085278BA8         10 000000008508E0B0 00               00                        ACTIVE

0000000085272EC8         12 0000000085090130 00               00                        ACTIVE

0000000085267508         16 00000000850921B0 00               000000007F66DAF8          ACTIVE

0000000085261828         18 0000000085094230 00               00                        ACTIVE

0000000085255E68         22 00000000850962B0 00               00                        ACTIVE

0000000085250188         24 000000008509A3B0 00               00                        ACTIVE

000000008524A4A8         26 0000000085098330 00               00                        ACTIVE

00000000853FABD8        125 000000008508AFF0 000000007D8D2848000000007F5CC218 SYS      ACTIVE

00000000853F7D68        126 000000008507ABF0 00               00                        ACTIVE

00000000853F4EF8        127 000000008507CC70 00               00                        ACTIVE

00000000853F2088        128 000000008507ECF0 00               00                        ACTIVE

00000000853EF218        129 0000000085080D70 00               00                        ACTIVE

00000000853EC3A8        130 0000000085082DF0 00               00                        ACTIVE

00000000853E9538        131 0000000085084E70 00               00                        ACTIVE

00000000853E66C8        132 0000000085086EF0 00               000000007F719690          ACTIVE

00000000853DDB78        135 000000008508D070 00               00                        ACTIVE

00000000853DAD08        136 000000008508F0F0 00               00                        ACTIVE

00000000853D21B8        139 0000000085091170 00               00                        ACTIVE

00000000853CF348        140 00000000850931F0 00               00                        ACTIVE

00000000853CC4D8        141 0000000085095270 00               00                        ACTIVE

00000000853C67F8       143 00000000850972F0   000000007F497D500000000085438D78 HR       INACTIVE

00000000853C0B18        145 0000000085099370 00               00                        ACTIVE

31 rows selected.

Elapsed: 00:00:00.02

如图:

00b854d70fa2785b06e1dde7120c66a6.png

图3

这里我们可以看到已经显示出了所有连接到数据库上的session里面就有我当前的HR的连接。×××底纹的那一行中SADDR和v$transaction中的SES_ADDR相对应,即:

v$session.SADDR=v$transaction.SES_ADDR

第四步:

查询v$sql视图,找到正在执行的语句。

SQL> select SQL_TEXT,ADDRESS from v$sql where ADDRESS='0000000085438D78';

SQL_TEXT                                                    ADDRESS

----------------------------------------------------------------------------

insert into t values (3,'lisi')                              0000000085438D78

Elapsed: 00:00:00.03

如图:

38ea9d517a0c7c9c7c1d386e70cbc522.png

图4

到此,我们已经找到了正在执行的语句,v$session和v$sql两个视图的关系,从图1也能看出:

v$session. PREV_SQL_ADDR=v$sql. ADDRESS

其他

查询v$ process视图

SQL>select ADDR,SPID from v$process;

ADDR                           SPID

------------------------------------------------------

0000000085078B70

0000000085079BB0               2636

000000008507ABF0               2638

000000008507BC30               2642

000000008507CC70               2644

000000008507DCB0               2646

000000008507ECF0               2648

000000008507FD30               2650

0000000085080D70               2652

0000000085081DB0               2654

0000000085082DF0               2656

0000000085083E30               2658

0000000085084E70               2660

0000000085085EB0               2662

0000000085086EF0               2664

0000000085087F30               2666

0000000085088F70               2668

0000000085089FB0               2670

000000008508AFF0               3642

000000008508C030               2683

000000008508D070               2685

000000008508E0B0               2687

000000008508F0F0               2689

0000000085090130               2691

0000000085091170               2695

00000000850921B0               2710

00000000850931F0               2712

0000000085094230               2756

0000000085095270               2708

00000000850962B0               3710

00000000850972F0               3685

31 rows selected.

Elapsed: 00:00:00.01

SQL>

根据图1 可以知道:

v$session.PADDR=v$ process.ADDR

对应的行为×××底纹的行(最后一行),他的SPID就是进程号。此时我们执行ps -ef | grep  3685进程查询

[oracle@locahost ~]$  ps -ef | grep 3685

oracle   3685     1  0 14:43 ?        00:00:00 oracleHDWKXT (LOCAL=NO)

oracle   3813  2800  0 15:25 pts/3    00:00:00 grep 3685

如图:

7f65f0b83b6deed11946bbc57857f934.png图5

果然是我们的oracle的session进程。

再执行命令:netstat -apn | more

8ff610cc8676231c9132cae8e1586d33.png

图6

注:我本机的ip地址为172.17.33.92,远端oracle 的ip为172.17.28.180

可以看到我本机和远端linux一共有2个连接:

tcp       0      0::ffff:172.17.38.180:22    ::ffff:172.17.33.92:59119  ESTABLISHED -

tcp       0      0::ffff:172.17.38.180:1521  ::ffff:172.17.33.92:51416   ESTABLISHED 3685/oracleHDWKXT

其中第一条是我的SecureCRT,另一条PID为3685的进程连接的是就是我的DOS啦

(Foreign Address指的是客户端的ip和端口。这里有两个客户端端口,分别是59119和51416都是我们正在执行的SQL/PLUS正在连接的进程。)

在windows打开DOS窗口,执行netstat -b 命令,可以查看到,这两个端口都是sqlplus在使用的。

TCP    172.17.33.92:51416     bogon:1521             ESTABLISHED

[sqlplus.exe]

…………

TCP    172.17.33.92:59119     bogon:ssh              ESTABLISHED

[SecureCRT.exe]

0c13d589144fa41eeb0019c31db5cd9d.png

图7

果然是我的sqlplus占用的51416端口在和远程oracle通信。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

以上都是单一语句的查询,下面附录一些连接查询:

1>> select  addr, sid, username, s.status, process, programfrom v$transaction  t ,v$session s  where  t.ses_addr=s.saddr;

28010c5b08184eb2c29a5d12422f5ce0.png

图8

2>>select  sql_text, address, hash_value  from v$sql q, v$session s where s.sid = 143and s.prev_sql_addr = q.address ;

a70d390eda6343a716babb4806eb9951.png

图9

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值