ITPub博客

首页 > 数据库 > Oracle > [20241014]strace使用小技巧参数y.txt

[20241014]strace使用小技巧参数y.txt

原创 Oracle 作者:lfree 时间:2024-10-14 20:10:59 0 删除 编辑

[20241014]strace使用小技巧参数y.txt

--//昨天测试sqlplus spool的相关问题,想起应该使用strace跟踪看看,了解一些操作细节。
--//我以前看Franck Pachot的blog,好像strace有1个参数启动可以看到打开的文件句柄带上真实的文件名,这样比较直观。
--//我当时测试服务器是oracle kennel 5.9版本,strace版本很低,没有这个功能,记忆有点混乱,我现在使用centos 7.3,
--//看看该机器带的strace是否支持这个功能,我连参数名都有点忘记了,看看相关文档顺便写一篇文章。

$ man strace    
...
-y Print paths associated with file descriptor arguments.

--//参数y支持这个特性,测试看看。

1.环境:
SCOTT@book01p> @ ver2
==============================
PORT_STRING                   : x86_64/Linux 2.4.xx
VERSION                       : 21.0.0.0.0
BANNER                        : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
BANNER_FULL                   : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
BANNER_LEGACY                 : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
CON_ID                        : 0
PL/SQL procedure successfully completed.

$ cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

$ echo -e "$SQLPATH\n$ORACLE_PATH"
/home/oracle/sqllaji:/home/oracle/sqllaji/tpt
/home/oracle/sqllaji:/home/oracle/sqllaji/tpt

2.测试:
--//session 1:
SCOTT@book01p> @ spid
       SID    SERIAL# PROCESS                  SERVER    SPID                               PID  P_SERIAL# C50
---------- ---------- ------------------------ --------- ------------------------------ ------- ---------- --------------------------------------------------
       142      58300 4673                     DEDICATED 4675                                65          4 alter system kill session '142,58300' immediate;

SCOTT@book01p> host pwd
/home/oracle/study/202410

SCOTT@book01p> host touch /home/oracle/study/202410/tmp123.txt
SCOTT@book01p> host touch /home/oracle/sqllaji/tmp123.txt
SCOTT@book01p> host touch /home/oracle/sqllaji/tpt/tmp123.txt

--//window  1:
$  strace -f -p 4673  -y
Process 4673 attached
--//注意跟踪进程号4673。

--//session 1:
SCOTT@book01p> spool ./tmp123.txt

--//window  1:
 $  strace -f -p 4673 -y
Process 4673 attached
read(0</dev/pts/8>, "spool ./tmp123.txt\n", 1024) = 19
access("/home/oracle/sqllaji/./tmp123.txt", F_OK) = 0
access("/home/oracle/sqllaji/./tmp123.txt", F_OK) = 0
stat("/home/oracle/sqllaji/./tmp123.txt", {st_mode=S_IFREG|0644, st_size=25, ...}) = 0
stat("/home/oracle/sqllaji/./", {st_mode=S_IFDIR|0755, st_size=16384, ...}) = 0
open("/home/oracle/sqllaji/./tmp123.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 10
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fcntl(10</home/oracle/sqllaji/tmp123.txt>, F_SETFD, FD_CLOEXEC) = 0
fstat(10</home/oracle/sqllaji/tmp123.txt>, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f14a33f8000
write(1</dev/pts/8>, "SCOTT@book01p> ", 15) = 15
read(0</dev/pts/8>,

--//这样优先打开open("/home/oracle/sqllaji/./tmp123.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 10
--//open对应句柄10,这样显示的内容句柄号跟着文件名就比较直观.

--//session 1:
SCOTT@book01p> spool off
SCOTT@book01p> host rm /home/oracle/study/202410/tmp123.txt
SCOTT@book01p> host rm home/oracle/sqllaji/tmp123.txt
SCOTT@book01p> host rm /home/oracle/sqllaji/tpt/tmp123.txt
SCOTT@book01p> spool ./tmp123.txt

--//window  1:
$  strace -f -p 4673 -y
Process 4673 attached
read(0</dev/pts/8>, "spool ./tmp123.txt\n", 1024) = 19
access("/home/oracle/sqllaji/./tmp123.txt", F_OK) = -1 ENOENT (No such file or directory)
access("/home/oracle/sqllaji/tpt/./tmp123.txt", F_OK) = -1 ENOENT (No such file or directory)
access("/home/oracle/sqllaji/./tmp123.txt", F_OK) = -1 ENOENT (No such file or directory)
access("/home/oracle/sqllaji/tpt/./tmp123.txt", F_OK) = -1 ENOENT (No such file or directory)
access("/home/oracle/sqllaji/./tmp123.txt", F_OK) = -1 ENOENT (No such file or directory)
access("/home/oracle/sqllaji/tpt/./tmp123.txt", F_OK) = -1 ENOENT (No such file or directory)
access("/home/oracle/sqllaji/./tmp123.txt", F_OK) = -1 ENOENT (No such file or directory)
access("/home/oracle/sqllaji/tpt/./tmp123.txt", F_OK) = -1 ENOENT (No such file or directory)
--//使用access分别尝试4次,不存在。
stat("./tmp123.txt", 0x7ffc62357980)    = -1 ENOENT (No such file or directory)
stat("./", {st_mode=S_IFDIR|0755, st_size=39, ...}) = 0
open("./tmp123.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 10
--//返回看看本地是否存在,使用stat。
fcntl(10</home/oracle/study/202410/tmp123.txt>, F_SETFD, FD_CLOEXEC) = 0
fstat(10</home/oracle/study/202410/tmp123.txt>, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f14a33f8000
write(1</dev/pts/8>, "SCOTT@book01p> ", 15) = 15
read(0</dev/pts/8>,

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

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969784