- UID
- 12521
- 阅读权限
- 100
- 帖子
- 14310
- 精华贴数
- 57
- 技术排名
- 23
- 技术积分
- 51675
- 社区排名
- 579
- 社区积分
- 3819
- 注册时间
- 2002-5-26
- 精华贴数
- 57
- 技术积分
- 51675
- 社区积分
- 3819
- 注册时间
- 2002-5-26
- 论坛徽章:
- 70
|
发表于 2004-4-30 02:08:29
|显示全部楼层
最近几天忽然发现自己的测试数据库出现无法用shutdown immediate来关闭,而只能shutdown abort的情况。键入shutdown immediate,数据就停在那里,没有任何反应,可以确认已经没有任何用户连接,也不存在任何大的事务正在执行,等待1个小时以上,也仍然无法关闭数据库。
我的测试数据库有两个,一个是windows下的,一个是linux下的,都是9201,懒得升级了。
今天检查windows下数据库的DBA_REPCATLOG视图,发现有两个高级复制的管理请求状态一直是AWAIT_CALLBACK,解决方法不说了,在我的高级复制初步研究文档中有详细叙述,解决完了之后,发现这个数据库可以正常关闭了。
晚上检查linux下的数据库,发现仍然不能正常关闭。于是在shutdown immediate之后,查看alertlog文件,发现如下内容。
Thu Apr 29 23:58:29 2004
Shutting down instance: further logons disabled
Shutting down instance (immediate)
License high water mark = 9
Fri Apr 30 00:03:34 2004
Active call for process 5376 user 'kamus' program 'oracle@defora.db.com (J002)'
Active call for process 5360 user 'kamus' program 'oracle@defora.db.com (J000)'
SHUTDOWN: waiting for active calls to complete.
Fri Apr 30 00:45:29 2004
License high water mark = 9
Instance terminated by USER, pid = 7581
后面我是用shutdown abort停了数据库。
可以看到oracle一直在等待J000和J002这两个进程完成自己的工作,这是Job Queue Process,由此我想到了在这个测试库中高级复制的PUSH和PURGE两个JOB的设置,其中用到了模拟持续复制的功能。
于是进一步检查v$process,v#session,v$sqlarea视图,发现确实没错,这两个进程就是PUSH和PURGE的JOB进程。
然后修改了JOB的定义,重新shutdown immediate成功。
通过对比shutdown前后的进程,也发现oracle会先停所有queue和job相关的进程,然后再去停pmon,dbwr等进程。
以上的诊断和解决过程,可能只是一个特例,但是希望能够提供给大家一个诊断和分析问题的思路。
多看alertlog,多使用视图,多作回忆,一般数据库忽然出现问题,基本上都是最近作了什么而引起的。 |
|