我在 Oracle 实例上执行日常管理任务,但无法连接到它。
我继续执行以下操作以进行诊断:
- 我检查了内存中的 Oracle 进程,发现实例已关闭。
- 我尝试了
startup
该实例,但它从未响应启动命令。它只是停滞不前。无论我等待多长时间,都没有输出或反馈。只有一个kill -9
可以让我摆脱它。 我查看了警报日志,最后一条消息是 3 天前:
"DBW0: terminating instance due to error 472 Instance terminated by DBW0, pid = 14952"
问题
- 什么会导致 BDW 终止实例?
- 为什么我在尝试启动实例时没有收到任何反馈,无论是在 sqlplus 控制台还是警报日志中。
当我运行 strace 时,我得到了这个:
错误:无法打开 /dev/log。
我在 SunOS 5.8 Generic_117350-08 sun4u sparc SUNW,Sun-Fire 上运行 Oracle。RDBMS 版本为 9.2.0.8.0
编辑:
我听从了@balazs-papp 和@jsapkota 关于跑步的建议truss
:
当我在 sqlplus 上运行 truss 时,我尝试启动实例,得到以下输出:
read(0, " s t a r t u p\n", 1024) = 8
write(9, "\0 U\0\006\0\0\0\0\0038A".., 85) = 85
read(10, 0x10029A536, 2064) (sleeping...)
signotifywait() (sleeping...)
lwp_cond_wait(0xFFFFFFFF7D62B058, 0xFFFFFFFF7D62B068, 0xFFFFFFFF7D621C80) (sleeping...)
lwp_cond_wait(0xFFFFFFFF7D62B058, 0xFFFFFFFF7D62B068, 0xFFFFFFFF7D621C80) (sleeping...)
door_return(0x00000000, 0, 0x00000000, 0) (sleeping...)
- 我如何解释这个输出?这对我来说完全是神秘的。
我
startup nomount
使用显式参数执行pfile
并且它有效。我在$ORACLE_HOME/dbs/目录中有init < SID >.ora ,并且一直在工作。
从错误中可以看出这一点。
PMON 死了,所以 DBWR 终止了该实例。如果任何进程死于 SMON、PMON、LGWR、DBWR、CKPT,其余进程将终止该实例。所以真正的问题是,为什么 PMON 会死?
可以是任何东西。通常是环境/配置问题。是时候做
strace -f
/了truss -f
,具体取决于我们不知道的平台: