strace 使用

使用Strace跟踪oracle读取数据块
        oracle是一个C语言程序,通过调用系统的io函数来实现io的过程,在linux下可以通过strace工具来
很方便查看进程对io函数的调用过程.
      测试场景使用了rhel 5.8和oracle database 12C.

查看oracle对应的服务器进程号.
[root@o12c ~]# ps -eaf | grep beq
oracle    1611  1591  0 03:01 ?        00:00:00 oraclec12 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
root      1683  1650  0 03:02 pts/5    00:00:00 grep beq

使用strace 对进程进行跟踪
[root@o12c ~]# strace -p 1611 -o test1.out

 

首先调用open函数,读取表空间的数据文件返回句柄12,然后使用fcntl进行文件句柄复制和其他操作,原来的文件句柄12被关闭.
接下来使用pread函数来读取文件.附带也证明了一点就是oracle服务器进程负责去读取数据文件,而写数据文件是通过后台进程dbwr
来完成的.

接下来我们打开sql trace,通过sql trace文件和strace文件对应,过程更加直观.
[root@o12c ~]# ps -eaf | grep beq
oracle    1916  1915  0 03:16 ?        00:00:00 oraclec12 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
SQL>  alter session set events '10046 trace name context forever,level 8';
Session altered.

[root@o12c ~]# strace -p 1916 -e write=all -e all -o test2.out

 

 RAC strace使用

http://www.htz.pw/2014/05/11/solaris-rac%E5%B9%B3%E5%8F%B0%E6%A8%A1%E6%8B%9F%E8%8A%82%E7%82%B9crash%E8%8A%82%E7%82%B9%E7%9A%84%E5%BC%BA%E5%88%B6%E5%88%A0%E9%99%A4%E4%B8%8E%E5%A2%9E%E5%8A%A0.html

你可能感兴趣的:(strace 使用)