lsof 应用实例分享以及Oracle 数据文件删除恢复测试

㈠ lsof 应用实例


① 查找指定端口被哪个程序占用:

[root@temp ~]# lsof -i :80
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   10278   root    3u  IPv6  37812      0t0  TCP *:http (LISTEN)
httpd   10280 apache    3u  IPv6  37812      0t0  TCP *:http (LISTEN)
httpd   10281 apache    3u  IPv6  37812      0t0  TCP *:http (LISTEN)
httpd   10282 apache    3u  IPv6  37812      0t0  TCP *:http (LISTEN)
httpd   10283 apache    3u  IPv6  37812      0t0  TCP *:http (LISTEN)
httpd   10284 apache    3u  IPv6  37812      0t0  TCP *:http (LISTEN)
httpd   10285 apache    3u  IPv6  37812      0t0  TCP *:http (LISTEN)
httpd   10286 apache    3u  IPv6  37812      0t0  TCP *:http (LISTEN)
httpd   10287 apache    3u  IPv6  37812      0t0  TCP *:http (LISTEN)


② 查找指定文件正在被谁使用:

[root@temp ~]# lsof /u01/app/oracle/oradata/ORCL/datafile/o1_mf_ggs_data_8rq64t53_.dbf
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
oracle  11239 oracle   23uW  REG    8,2 83894272 1169914 /u01/app/oracle/oradata/ORCL/datafile/o1_mf_ggs_data_8rq64t53_.dbf
oracle  11241 oracle   29u   REG    8,2 83894272 1169914 /u01/app/oracle/oradata/ORCL/datafile/o1_mf_ggs_data_8rq64t53_.dbf
oracle  11245 oracle   21u   REG    8,2 83894272 1169914 /u01/app/oracle/oradata/ORCL/datafile/o1_mf_ggs_data_8rq64t53_.dbf
oracle  11251 oracle   22u   REG    8,2 83894272 1169914 /u01/app/oracle/oradata/ORCL/datafile/o1_mf_ggs_data_8rq64t53_.dbf
oracle  11260 oracle   19u   REG    8,2 83894272 1169914 /u01/app/oracle/oradata/ORCL/datafile/o1_mf_ggs_data_8rq64t53_.dbf


③ 查找某个用户打开的文件

[root@temp ~]# lsof -u oracle 
COMMAND   PID   USER   FD   TYPE DEVICE  SIZE/OFF    NODE NAME
bash     5601 oracle  cwd    DIR    8,2      4096 1491645 /home/oracle
bash     5601 oracle  rtd    DIR    8,2      4096       2 /
bash     5601 oracle  txt    REG    8,2    735804 1782911 /bin/bash
bash     5601 oracle  mem    REG    8,2      5436  584246 /usr/lib/gconv/ISO8859-1.so
bash     5601 oracle  mem    REG    8,2    130860  390859 /lib/ld-2.5.so
bash     5601 oracle  mem    REG    8,2   1706072  391064 /lib/i686/nosegneg/libc-2.5.so
bash     5601 oracle  mem    REG    8,2     20668  391065 /lib/libdl-2.5.so
bash     5601 oracle  mem    REG    8,2     13276  391090 /lib/libtermcap.so.2.0.8
bash     5601 oracle  mem    REG    8,2     50848  389032 /lib/libnss_files-2.5.so
bash     5601 oracle  mem    REG    8,2     25462  584323 /usr/lib/gconv/gconv-modules.cache
bash     5601 oracle  mem    REG    8,2  56449792  491499 /usr/lib/locale/locale-archive
bash     5601 oracle    0u   CHR  136,1       0t0       3 /dev/pts/1
.....................
................


④ 查找某个程序现在正打开的文件

-c:程序名
-p:pid 

[root@temp ~]# lsof -c  init
COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
init      1 root  cwd    DIR    8,2     4096       2 /
init      1 root  rtd    DIR    8,2     4096       2 /
init      1 root  txt    REG    8,2    38652 1620888 /sbin/init
init      1 root  mem    REG    8,2   130860  390859 /lib/ld-2.5.so
init      1 root  mem    REG    8,2  1706072  391064 /lib/i686/nosegneg/libc-2.5.so
init      1 root  mem    REG    8,2    20668  391065 /lib/libdl-2.5.so
init      1 root  mem    REG    8,2   245376  391081 /lib/libsepol.so.1
init      1 root  mem    REG    8,2    93508  391082 /lib/libselinux.so.1
init      1 root   10u  FIFO   0,16      0t0    1322 /dev/initctl


⑤ 查找某个用户的所有网络连接

[root@temp ~]# lsof -a -u oracle -i
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sqlplus  5631 oracle    7u  IPv4  42558      0t0  UDP localhost.localdomain:52493 
oracle  11233 oracle   15u  IPv4  42442      0t0  UDP localhost.localdomain:62999 
oracle  11255 oracle   14u  IPv4  42529      0t0  UDP localhost.localdomain:18473 
oracle  11255 oracle   15u  IPv4  42530      0t0  TCP *:4048 (LISTEN)
oracle  11257 oracle   14u  IPv4  42540      0t0  UDP localhost.localdomain:8690 
oracle  11260 oracle   22u  IPv4  42728      0t0  UDP *:12147 


⑥ 查找所有打开的网络连接

类似的:
lsof -i tcp 
lsof -i udp 
lsof -i tcp:80 


[root@temp ~]# lsof -i
COMMAND     PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
cupsd      3062    root    4u  IPv4   8720      0t0  TCP localhost.localdomain:ipp (LISTEN)
cupsd      3062    root    6u  IPv4   8723      0t0  UDP *:ipp 
portmap    3600     rpc    3u  IPv4   9798      0t0  UDP *:sunrpc 
portmap    3600     rpc    4u  IPv4   9799      0t0  TCP *:sunrpc (LISTEN)
rpc.statd  3636 rpcuser    3u  IPv4   9992      0t0  UDP *:dhcp-failover2 
rpc.statd  3636 rpcuser    6u  IPv4   9978      0t0  UDP *:844 
rpc.statd  3636 rpcuser    7u  IPv4  10005      0t0  TCP *:850 (LISTEN)
hpiod      3890    root    0u  IPv4  12249      0t0  TCP localhost.localdomain:2208 (LISTEN)
hpssd.py   3895    root    4u  IPv4  12267      0t0  TCP localhost.localdomain:2207 (LISTEN)
sshd       3908    root    3u  IPv6  12303      0t0  TCP *:ssh (LISTEN)
sshd       3908    root    4u  IPv4  12305      0t0  TCP *:ssh (LISTEN)
sendmail   3939    root    4u  IPv4  12415      0t0  TCP localhost.localdomain:smtp (LISTEN)
avahi-dae  4149   avahi   13u  IPv4  12875      0t0  UDP *:mdns 
avahi-dae  4149   avahi   14u  IPv6  12876      0t0  UDP *:mdns 
avahi-dae  4149   avahi   15u  IPv4  12877      0t0  UDP *:8990 
avahi-dae  4149   avahi   16u  IPv6  12878      0t0  UDP *:6857 
dnsmasq    4169  nobody    5u  IPv4  13032      0t0  UDP *:bootps 
dnsmasq    4169  nobody    6u  IPv4  13038      0t0  TCP 192.168.122.1:domain (LISTEN)
dnsmasq    4169  nobody    7u  IPv4  13039      0t0  UDP 192.168.122.1:domain 
cimserver  4172 cimsrvr    7u  IPv6  13141      0t0  TCP *:wbem-https (LISTEN)
dhclient   4721    root    5u  IPv4  13899      0t0  UDP *:bootpc 
sqlplus    5631  oracle    7u  IPv4  42558      0t0  UDP localhost.localdomain:52493 
httpd     10278    root    3u  IPv6  37812      0t0  TCP *:http (LISTEN)



㈡ 数据文件恢复测试


原理:

后台进程会维护一个文件列表、锁定打开的文件
对Oracle而言、如果文件被删除、但该文件句柄尚未被关闭、则可通过lsof输出看到标识为deleted
通过 proc 的文件目录、能找到该文件句柄信息、这便是Oracle的数据文件


** 测试之前****

[oracle@temp datafile]$ ls -alh
total 1.3G
drwxr-x--- 2 oracle oinstall 4.0K May  9 20:37 .
drwxr-xr-x 5 oracle oinstall 4.0K Jul 17  2012 ..
-rw-r----- 1 oracle oinstall 101M Jun 19 14:19 o1_mf_example_8050jhm7_.dbf
-rw-r----- 1 oracle oinstall  81M Jun 19 14:19 o1_mf_ggs_data_8rq64t53_.dbf
-rw-r----- 1 oracle oinstall 271M Jun 19 19:00 o1_mf_sysaux_8050fk3w_.dbf
-rw-r----- 1 oracle oinstall 491M Jun 19 18:56 o1_mf_system_8050fk2z_.dbf
-rw-r----- 1 oracle oinstall  33M Jun 17 22:00 o1_mf_temp_8050j34j_.tmp
-rw-r----- 1 oracle oinstall 236M Jun 19 18:59 o1_mf_undotbs1_8050fkc6_.dbf
-rw-r----- 1 oracle oinstall  47M Jun 19 17:12 o1_mf_users_8050fkdh_.dbf

** 看看 dbwr 打开的所有文件 **

[root@temp ~]# ps -ef | grep dbw
oracle    5643     1  0 14:19 ?        00:00:00 ora_dbw0_orcl
root     10741  8274  0 19:00 pts/3    00:00:00 grep dbw

** 运用lsof 列出所有被 dbwr 打开的文件 **

[root@temp ~]# lsof -p 5643
COMMAND  PID   USER   FD   TYPE DEVICE  SIZE/OFF    NODE NAME
oracle  5643 oracle  cwd    DIR    8,2      4096 1556206 /u01/app/oracle/product/10.2.0/db_1/dbs
oracle  5643 oracle  rtd    DIR    8,2      4096       2 /
oracle  5643 oracle  txt    REG    8,2  93362427 1557452 /u01/app/oracle/product/10.2.0/db_1/bin/oracle
oracle  5643 oracle  mem    REG    8,2     70077 1565448 /u01/app/oracle/product/10.2.0/db_1/lib/libclsra10.so
oracle  5643 oracle  mem    REG    8,2     50848  389032 /lib/libnss_files-2.5.so
oracle  5643 oracle  mem    REG    8,2      1544 1555978 /u01/app/oracle/product/10.2.0/db_1/dbs/hc_orcl.dat
oracle  5643 oracle  mem    REG    8,2     20668  391065 /lib/libdl-2.5.so
oracle  5643 oracle  mem    REG    8,2    216560  391071 /lib/i686/nosegneg/libm-2.5.so
oracle  5643 oracle  mem    REG    8,2   1211519 1565413 /u01/app/oracle/product/10.2.0/db_1/lib/libocrb10.so
oracle  5643 oracle  mem    REG    8,2    130860  390859 /lib/ld-2.5.so
oracle  5643 oracle  mem    REG    8,2      2632  497850 /usr/lib/libaio.so.1.0.1
oracle  5643 oracle  mem    REG    8,2    728411 1565414 /u01/app/oracle/product/10.2.0/db_1/lib/libocrutl10.so
oracle  5643 oracle  mem    REG    8,2    137960  391066 /lib/i686/nosegneg/libpthread-2.5.so
oracle  5643 oracle  mem    REG    8,2   1706072  391064 /lib/i686/nosegneg/libc-2.5.so
oracle  5643 oracle  mem    REG    8,2    143485 1006037 /u01/app/oracle/product/10.2.0/db_1/lib/libskgxp10.so
oracle  5643 oracle  mem    REG    8,2    109740  391078 /lib/libnsl-2.5.so
oracle  5643 oracle  mem    REG    8,2    854560 1565412 /u01/app/oracle/product/10.2.0/db_1/lib/libocr10.so
oracle  5643 oracle  mem    REG    8,2     98079 1560689 /u01/app/oracle/product/10.2.0/db_1/lib/libdbcfg10.so
oracle  5643 oracle  mem    REG    8,2   2365801 1565447 /u01/app/oracle/product/10.2.0/db_1/lib/libhasgen10.so
oracle  5643 oracle  mem    REG    8,2      8069 1560800 /u01/app/oracle/product/10.2.0/db_1/lib/libskgxn2.so
oracle  5643 oracle  mem    REG    8,2   5480533 1565995 /u01/app/oracle/product/10.2.0/db_1/lib/libnnz10.so
oracle  5643 oracle  mem    REG    8,2   9017903 1558479 /u01/app/oracle/product/10.2.0/db_1/lib/libjox10.so
oracle  5643 oracle  DEL    REG    0,9           5603346 /SYSVbe3bb918
oracle  5643 oracle  mem    CHR    1,5              1559 /dev/zero
oracle  5643 oracle    0r   CHR    1,3       0t0    1557 /dev/null
oracle  5643 oracle    1r   CHR    1,3       0t0    1557 /dev/null
oracle  5643 oracle    2r   CHR    1,3       0t0    1557 /dev/null
oracle  5643 oracle    3r   CHR    1,3       0t0    1557 /dev/null
oracle  5643 oracle    4r   CHR    1,3       0t0    1557 /dev/null
oracle  5643 oracle    5w   REG    8,2       624 1206137 /u01/app/oracle/admin/orcl/udump/orcl_ora_5634.trc
oracle  5643 oracle    6w   REG    8,2    232742  324300 /u01/app/oracle/admin/orcl/bdump/alert_orcl.log
oracle  5643 oracle    7u   REG    8,2         0 1169911 /u01/app/oracle/product/10.2.0/db_1/dbs/lkinstorcl (deleted)
oracle  5643 oracle    8w   REG    8,2    232742  324300 /u01/app/oracle/admin/orcl/bdump/alert_orcl.log
oracle  5643 oracle    9u   REG    8,2      1544 1555978 /u01/app/oracle/product/10.2.0/db_1/dbs/hc_orcl.dat
oracle  5643 oracle   10u   REG    8,2      1298  230930 /u01/app/oracle/admin/orcl/adump/ora_5634.aud
oracle  5643 oracle   11r   CHR    1,5       0t0    1559 /dev/zero
oracle  5643 oracle   12r   CHR    1,5       0t0    1559 /dev/zero
oracle  5643 oracle   13r   REG    8,2    834560 1565481 /u01/app/oracle/product/10.2.0/db_1/rdbms/mesg/oraus.msb
oracle  5643 oracle   14u   REG    8,2      1544 1555978 /u01/app/oracle/product/10.2.0/db_1/dbs/hc_orcl.dat
oracle  5643 oracle   15uR  REG    8,2        24 1555979 /u01/app/oracle/product/10.2.0/db_1/dbs/lkORCL
oracle  5643 oracle   16u   REG    8,2   7094272 1977496 /u01/app/oracle/oradata/ORCL/controlfile/o1_mf_823mrrdo_.ctl
oracle  5643 oracle   17u   REG    8,2   7094272 1851190 /u01/app/oracle/flash_recovery_area/ORCL/controlfile/o1_mf_823mrrrp_.ctl
oracle  5643 oracle   18uW  REG    8,2 513810432 1977493 /u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_8050fk2z_.dbf
oracle  5643 oracle   19uW  REG    8,2 246423552 1977494 /u01/app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_8050fkc6_.dbf
oracle  5643 oracle   20uW  REG    8,2 283123712 1977489 /u01/app/oracle/oradata/ORCL/datafile/o1_mf_sysaux_8050fk3w_.dbf
oracle  5643 oracle   21uW  REG    8,2  48504832 1977490 /u01/app/oracle/oradata/ORCL/datafile/o1_mf_users_8050fkdh_.dbf
oracle  5643 oracle   22uW  REG    8,2 104865792 1977491 /u01/app/oracle/oradata/ORCL/datafile/o1_mf_example_8050jhm7_.dbf
oracle  5643 oracle   23uW  REG    8,2  83894272 1977501 /u01/app/oracle/oradata/ORCL/datafile/o1_mf_ggs_data_8rq64t53_.dbf (deleted)
oracle  5643 oracle   24uW  REG    8,2  33562624 1977492 /u01/app/oracle/oradata/ORCL/datafile/o1_mf_temp_8050j34j_.tmp
oracle  5643 oracle   25r   REG    8,2    834560 1565481 /u01/app/oracle/product/10.2.0/db_1/rdbms/mesg/oraus.msb


** 把 o1_mf_ggs_data_8rq64t53_.dbf 删除 **

[oracle@temp datafile]$ rm -rf o1_mf_ggs_data_8rq64t53_.dbf


** 列出23 号文件句柄的信息 ***
[root@temp ~]# ls -alh /proc/5643/fd/23
lrwx------ 1 oracle oinstall 64 06-19 18:08 /proc/5643/fd/23 -> /u01/app/oracle/oradata/ORCL/datafile/o1_mf_ggs_data_8rq64t53_.dbf (deleted)


** 直接复制过去就行了 **

[root@temp ~]# cp /proc/5643/fd/23 /u01/app/oracle/oradata/ORCL/datafile/
[root@temp ~]# chown -R oracle:oinstall /u01/app/oracle/oradata/ORCL/datafile/23


*** 重命名 *****

[oracle@temp datafile]$ ls -l
total 1283716
-rw-r----- 1 oracle oinstall  83894272 Jun 19 19:11 23
-rw-r----- 1 oracle oinstall 104865792 Jun 19 14:19 o1_mf_example_8050jhm7_.dbf
-rw-r----- 1 oracle oinstall 283123712 Jun 19 19:12 o1_mf_sysaux_8050fk3w_.dbf
-rw-r----- 1 oracle oinstall 513810432 Jun 19 19:12 o1_mf_system_8050fk2z_.dbf
-rw-r----- 1 oracle oinstall  33562624 Jun 17 22:00 o1_mf_temp_8050j34j_.tmp
-rw-r----- 1 oracle oinstall 246423552 Jun 19 19:12 o1_mf_undotbs1_8050fkc6_.dbf
-rw-r----- 1 oracle oinstall  48504832 Jun 19 17:12 o1_mf_users_8050fkdh_.dbf
[oracle@temp datafile]$ mv 23 o1_mf_ggs_data_8rq64t53_.dbf
[oracle@temp datafile]$ ls -alh
total 1.3G
drwxr-x--- 2 oracle oinstall 4.0K Jun 19 19:14 .
drwxr-xr-x 5 oracle oinstall 4.0K Jul 17  2012 ..
-rw-r----- 1 oracle oinstall 101M Jun 19 14:19 o1_mf_example_8050jhm7_.dbf
-rw-r----- 1 oracle oinstall  81M Jun 19 19:11 o1_mf_ggs_data_8rq64t53_.dbf
-rw-r----- 1 oracle oinstall 271M Jun 19 19:13 o1_mf_sysaux_8050fk3w_.dbf
-rw-r----- 1 oracle oinstall 491M Jun 19 19:13 o1_mf_system_8050fk2z_.dbf
-rw-r----- 1 oracle oinstall  33M Jun 17 22:00 o1_mf_temp_8050j34j_.tmp
-rw-r----- 1 oracle oinstall 236M Jun 19 19:13 o1_mf_undotbs1_8050fkc6_.dbf
-rw-r----- 1 oracle oinstall  47M Jun 19 17:12 o1_mf_users_8050fkdh_.dbf


** 查看状态 **

sys@ORCL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
sys@ORCL> startup
ORACLE instance started.

Total System Global Area  419430400 bytes
Fixed Size                  1219760 bytes
Variable Size             104858448 bytes
Database Buffers          310378496 bytes
Redo Buffers                2973696 bytes
Database mounted.
ORA-01113: file 6 needs media recovery
ORA-01110: data file 6: '/u01/app/oracle/oradata/ORCL/datafile/o1_mf_ggs_data_8rq64t53_.dbf'


sys@ORCL> recover datafile 6;
Media recovery complete.
sys@ORCL> alter database open;

Database altered.

sys@ORCL> select file_name,status from dba_data_files where FILE_ID=6;

FILE_NAME                                                            STATUS
-------------------------------------------------------------------- ---------
/u01/app/oracle/oradata/ORCL/datafile/o1_mf_ggs_data_8rq64t53_.dbf   AVAILABLE




By David Lin

2013-06-19

Always be a first-rate version of yourself,instead of a second-rate version of someone else.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值