[20141128]目录/var/tmp/oracle.txt

简介: [20141128]目录/var/tmp/oracle.txt --昨天帮别人解决监听问题,用户整理机器,删除了/var/tmp/oracle目录里面的文件(估计已经删除很久了),导致执行lsnrctl status报错。

[20141128]目录/var/tmp/oracle.txt

--昨天帮别人解决监听问题,用户整理机器,删除了/var/tmp/oracle目录里面的文件(估计已经删除很久了),导致执行lsnrctl status报错。
--我自己以前也遇到一次,记忆比较深刻,今天在自己机器上测试重复错误。

SYS@test> @ver1

PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.3.0     Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

# lsof | grep /var/tmp/.oracle
tnslsnr   18430 oracle11g   10u     unix 0x000001002550d680                53579 /var/tmp/.oracle/s#18430.1
tnslsnr   18430 oracle11g   11u     unix 0x000001002550d380                53581 /var/tmp/.oracle/sEXTPROC1521
tnslsnr   18430 oracle11g   12u     unix 0x000001002576c980                53583 /var/tmp/.oracle/s#18430.2
--可以发现监听使用这些文件。

$ cd /var/tmp/.oracle
$ mkdir laji
$ ls -l
total 4
drwxr-xr-x  2 oracle11g oinstall 4096 2014-11-28 11:22:01 laji
srwxrwxrwx  1 oracle11g oinstall    0 2014-09-09 11:38:28 s#18430.1
srwxrwxrwx  1 oracle11g oinstall    0 2014-09-09 11:38:28 s#18430.2
srwxrwxrwx  1 oracle11g oinstall    0 2014-07-15 09:33:42 s#5027.1
srwxrwxrwx  1 oracle11g oinstall    0 2014-07-15 09:33:42 s#5027.2
srwxrwxrwx  1 oracle11g oinstall    0 2014-09-09 11:38:28 sEXTPROC1521

-- 对比前面的发现s#5027.*这两个文件,可能是某一次死机或者断电,没有清除留下的文件。据对方讲里面很多文件,使用版本10.2.0.3,监听
-- 中断了许多次,估计是遇到bug之类的问题。

--首先移动文件。
$ mv s* laji/

# lsof | grep /var/tmp/.oracle
tnslsnr   18430 oracle11g   10u     unix 0x000001002550d680                53579 /var/tmp/.oracle/s#18430.1
tnslsnr   18430 oracle11g   11u     unix 0x000001002550d380                53581 /var/tmp/.oracle/sEXTPROC1521
tnslsnr   18430 oracle11g   12u     unix 0x000001002576c980                53583 /var/tmp/.oracle/s#18430.2
bash      18634 oracle11g  cwd       DIR                8,3      4096     472369 /var/tmp/.oracle
--奇怪,这些文件并没有标识delete。
--这个时候外面的用户是可以连上数据库的。

$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 28-NOV-2014 11:28:52
Copyright (c) 1991, 2011, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=hisdg)(PORT=1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Linux Error: 2: No such file or directory
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Linux Error: 2: No such file or directory

--可以发现报错。

$ lsnrctl stop
LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 28-NOV-2014 11:29:46
Copyright (c) 1991, 2011, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=hisdg)(PORT=1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Linux Error: 2: No such file or directory
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Linux Error: 2: No such file or directory

--执行lsnrctl stop也一样。

--执行跟踪看看。

$  strace -f -o /tmp/aaa.txt lsnrctl status

--查看跟踪可以发现:
$ grep  '\/var\/tmp/\.oracle' /tmp/aaa.txt
20352 access("/var/tmp/.oracle", F_OK)  = 0
20352 chmod("/var/tmp/.oracle", 01777)  = 0
20352 access("/var/tmp/.oracle/s#18430.2", F_OK) = -1 ENOENT (No such file or directory)
20352 access("/var/tmp/.oracle/sEXTPROC1521", F_OK) = -1 ENOENT (No such file or directory)

$ grep  "No such file or directory" /tmp/aaa.txt
20352 connect(5, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
20352 connect(5, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
20352 access("/var/tmp/.oracle/s#18430.2", F_OK) = -1 ENOENT (No such file or directory)
20352 access("/var/tmp/o/s#18430.2", F_OK) = -1 ENOENT (No such file or directory)
20352 access("/var/tmp/.oracle/sEXTPROC1521", F_OK) = -1 ENOENT (No such file or directory)
20352 access("/var/tmp/o/sEXTPROC1521", F_OK) = -1 ENOENT (No such file or directory)

--很明显就是这些文件给删除了。如何解决呢?

1.方法1:
直接kill -9 tnslsnr 进程,在重启监听就可以了。

2.方法2:

$ file laji/s#18430.1
laji/s#18430.1: socket

--这个是socker类型文件,能否重新建立呢?查询相关文档。必须使用root用户建立

# cd /var/tmp/.oracle
# mksock sEXTPROC1521
# mksock s#18430.2
# mksock s#18430.1

# ls -l
total 4
drwxr-xr-x  2 oracle11g oinstall 4096 2014-11-28 11:27:34 laji
srwxr-xr-x  1 root      root        0 2014-11-28 11:48:30 s#18430.1
srwxr-xr-x  1 root      root        0 2014-11-28 11:47:09 s#18430.2
srwxr-xr-x  1 root      root        0 2014-11-28 11:46:56 sEXTPROC1521
# chown oracle:oinstall s*
# chmod 777 s*
# ls -l
total 4
drwxr-xr-x  2 oracle11g oinstall 4096 2014-11-28 11:27:34 laji
srwxrwxrwx  1 oracle    oinstall    0 2014-11-28 11:48:30 s#18430.1
srwxrwxrwx  1 oracle    oinstall    0 2014-11-28 11:47:09 s#18430.2
srwxrwxrwx  1 oracle    oinstall    0 2014-11-28 11:46:56 sEXTPROC1521

$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 28-NOV-2014 11:50:09

Copyright (c) 1991, 2011, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=hisdg)(PORT=1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Linux Error: 111: Connection refused
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Linux Error: 111: Connection refused

--依旧不行。

# lsof | grep /var/tmp/.oracle  --加一个head
COMMAND     PID      USER   FD      TYPE             DEVICE      SIZE       NODE NAME
tnslsnr   18430 oracle11g   10u     unix 0x000001002550d680                53579 /var/tmp/.oracle/s#18430.1
tnslsnr   18430 oracle11g   11u     unix 0x000001002550d380                53581 /var/tmp/.oracle/sEXTPROC1521
tnslsnr   18430 oracle11g   12u     unix 0x000001002576c980                53583 /var/tmp/.oracle/s#18430.2

--很明显方法2不行。应该这些文件与原来建立联系,自己建立的没有关联。移动回来。

$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 28-NOV-2014 12:03:25

Copyright (c) 1991, 2011, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=hisdg)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.3.0 - Production
Start Date                09-SEP-2014 11:38:28
Uptime                    80 days 0 hr. 24 min. 56 sec
Trace Level               off
Security                  ON: Password or Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle11g/product/11.2.0/db_2/network/admin/listener.ora
Listener Log File         /u01/app/oracle11g/diag/tnslsnr/hisdg/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xxxxx)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "b.com" has 1 instance(s).
  Instance "test", status READY, has 1 handler(s) for this service...
Service "test.com" has 2 instance(s).
  Instance "test", status UNKNOWN, has 1 handler(s) for this service...
  Instance "test", status READY, has 1 handler(s) for this service...
Service "testXDB.com" has 1 instance(s).
  Instance "test", status READY, has 1 handler(s) for this service...
Service "test_DGB.com" has 2 instance(s).
  Instance "test", status UNKNOWN, has 1 handler(s) for this service...
  Instance "test", status READY, has 1 handler(s) for this service...
Service "test_DGMGRL.com" has 1 instance(s).
  Instance "test", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

--看来以后删除文件,要先使用lsof确定这些文件是否处于打开状态。比如有些打开的文件,如果你删除了,这些空间并不会回收。

目录
相关文章
|
SQL Oracle 关系型数据库
什么是Oracle的目录( Directory)
什么是Oracle的目录( Directory)
685 0
|
Oracle 关系型数据库
Oracle归档目录修改的坑,请留意
Oracle归档目录修改的坑,请留意
232 0
Oracle归档目录修改的坑,请留意
|
存储 监控 关系型数据库
|
Oracle 关系型数据库 测试技术