ORA-01089 数据库无法正常关闭

今天在做SOA几个数据库的重启操作,其中一个数据库在关闭过程中一直处于HANG住状态,十几分钟没有任何进展,具体操作过程如下:

一:当时的情景

SQL> shutdown immediate

--无任何返回结果

二:问题定位过程

1.查询相关进程只有ORACLE的关键进程存在

ps -ef |grep ora_

soadb  4487     1  0 22:57:05 ?         0:00 ora_reco_soadbprd
   soadb  4485     1  5 22:57:05 ?         0:00 ora_smon_soadbprd
   soadb  4526     1  0 22:57:15 ?         0:00 ora_arc0_soadbprd
   soadb  4479     1  0 22:57:04 ?         0:00 ora_dbw1_soadbprd
   soadb  4483     1  0 22:57:04 ?         0:01 ora_ckpt_soadbprd
   soadb  4468     1  0 22:57:02 ?         0:02 ora_pmon_soadbprd

2.查看alter日志,显示如下:

Shutting down instance: further logons disabled
    Thu Nov 14 22:04:24 2013
    Stopping background process CJQ0
    Thu Nov 14 22:04:24 2013
    Stopping background process QMNC
    Thu Nov 14 22:04:26 2013
    Stopping background process MMNL
    Thu Nov 14 22:04:27 2013
    Stopping background process MMON
    Thu Nov 14 22:04:27 2013
    Shutting down instance (immediate)
    License high water mark = 152
    Thu Nov 14 22:04:27 2013
    Stopping Job queue slave processes, flags = 7
    Thu Nov 14 22:04:27 2013
    Job queue slave processes stopped
    Waiting for dispatcher ‘D000‘ to shutdown
    All dispatchers and shared servers shutdown
    Thu Nov 14 22:04:30 2013
    ALTER DATABASE CLOSE NORMAL
    Thu Nov 14 22:09:34 2013
    Waiting for smon to disable tx recovery.
    Thu Nov 14 22:23:46 2013
    MMNL absent for 1201 secs; Foregrounds taking over

3.针对红色字体的提示,查询官方网站,ID 1076161.6

官方描述如下:

During shutdown the SMON process is cleaning up extents and updating the data
dictionary tables with the marked free extents. As the extents are marked as
freed, they are removed from the table for used extents, UET$ and placed on the
table for free extents, FET$.

官方描述的原因是因为smon进程在清时临时表空间数据块和更新数据字典时造成的数据库HANG住,原理讲的很清楚,里面还有一个链接,一个是讲述这种情况可能是一个BUG,另一个链接教我们诊断数据库HANG住的具体原因。但现在的问题是,如果一直等下去,可能需要几个小时,此次变更数据库重启只有半小时时间,不可能待下去,怎么办?

4.尝试取消shutdown immediate命令

CTRAL + C没有任何作用,新建一个链接执行查询或其它操作,会报一个错,具体信息如下:

ORA-01089: immediate shutdown in progress - no operations are permitted

可以看到,此时什么都不允许操作,这时想找从操作系统上找到shutdown immediate进程KILL掉,后来仔细一想,这个操作可能比shutdown abort更危险,很可能造成数据库无法启动,在网上找到了相关资源,也没找到办法,此时突然想到刚学ORACLE数据库启动和停止时有一条命令是

startup force:中止当前数据库的运行,并开始重新正常的启动数据库

startup force = shutdown abort +startup 此时也只能用它了

5.强制停止shutdown immediate

新打开一个sqlplus / as sysdba

SQL> startup force
       ORACLE instance started.

Total System Global Area 3206836224 bytes
       Fixed Size                  2180024 bytes
       Variable Size            1778388040 bytes
       Database Buffers         1409286144 bytes
       Redo Buffers               16982016 bytes
       Database mounted.
       Database opened.

此时shutdown immediate窗口停止了,数据库恢复到可操作状态,此时我再次用shutdown immediate命令再次正常停止数据库,依然无法停止,没办法,再次执行startup force获取数据库控制权,选择shutdown abort方法停止数据库。重新启动,很幸运,启动成功了!(注意此操作有一定的风险,小心操作)

转:http://blog.sina.com.cn/s/blog_61cd89f60102eeg1.html

时间: 2024-10-20 00:11:01

ORA-01089 数据库无法正常关闭的相关文章

数据库实例开启关闭详解

Oracle数据库的启动关闭的几种方式 Oracle数据库的几种启动和关闭方式 有以下几种启动方式:1.startup nomount非安装启动,这种方式启动下可执行:重建控制文件.重建数据库 读取init.ora文件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件. 2.startup mount dbname安装启动,这种方式启动下可执行:数据库日志归档.数据库介质恢复.使数据文件联机或脱机,重新定位数据文件.重做日志文件. 执行"nomount"

Oracle 数据库启动与关闭 各种方式详解整理

概述 只有具备sysdba和sysoper系统特权的用户才能启动和关闭数据库. 在启动数据库之前应该启动监听程序,否则就不能利用命令方式来管理数据库,包括启动和关闭数据库. 虽然数据库正常运行,但如果没有启动监听程序,客户端就不能连接到数据库. 在oracle用户下: 启动监听程序 lsnrctl start 关闭监听程序lsnrctl stop 查询监听程序状态lsnrctl status startup 支持参数 STARTUP options | upgrade_options optio

Oracle 数据库实例启动关闭过程

--================================ -->Oracle 数据库实例启动关闭过程 --================================ /* Oracle数据库实例的启动,严格来说应该是实例的启动,数据库仅仅是在实例启动后进行装载.Oracle数据启动的过程被划分为 几个不同的步骤,在不同的启动过程中,我们可以对其实现不同的操作,系统修复等等工作,因此了解Oracle数据启动.关闭是非常 有必要的.下面详细了Oracle Database 10g 

参数文件spfile的修改以及数据库的启动关闭

由于参数文件spfile是二进制文件,所以不能直接使用文本编辑器进行修改,我们可以再启动数据库以后使用sql命令进行修改: alter system 参数名=参数值, scope=both|spfile|memory sid=*|'orcl' 等,其中具体的权威参数请参考官方文档 1 修改processes 这个参数不能修改内存中的值, Alter system processes=2000 scope=spfile; Show parameter dump 可以查看跟踪日志文件存放的路径. 修

关于数据库启动和关闭的例子

关于数据库的启动 : Oracle 的启动分为三个步骤;分别是启动实例,加载数据库 .打开数据库.(用户可以根据自己的实际需要来开启数据库) 语法是startup 1:nomount 模式 SQL> SQL> startup nomountORACLE instance started. Total System Global Area  830930944 bytesFixed Size                  2257800 bytesVariable Size         

Linux系统中数据库启动和关闭&Basic SQL

第一步:使用oracle用户登录 第二步:在oracle用户下输入sqlplus /nolog 第三步:如需使用管理员权限,则输入connect /as sysdba 第四步:启动和关闭 startup startup nomount #只启动实例 startup mount   #打开控制文件 startup open    #打开数据文件和重做日志 shutdown shutdown normal        #不接受新的连接,需要等待所有的用户断开连接 shutdown immediat

Linux——oracle数据库实例启动关闭(转)

-->Oracle 数据库实例启动关闭过程 --================================ [[email protected] ~]# su - oracle --查看未启动实例前的进程情况 [[email protected] ~]$ ps -aef |grep oracle root      3332  3300  0 12:20 pts/1    00:00:00 su - oracle oracle    3333  3332  0 12:20 pts/1   

Oracle——数据库启动与关闭

本文内容 服务器环境 客户端环境 概述 启动数据库 关闭数据库 补充 参考资料 本文说明 Oracle 数据库的启动和关闭,内容虽然基础,但是在数据库很多操作中都需要,因此,基础而重要,必须深入理解.比如,何种情况应该使用何种数据库加载模式,以及数据库文件打开模式. 服务器环境 Windows 2003 R2 Oracle11g 32位 客户端环境 Windows 2008R2 Oracle 11g 32位客户端 概述 若用 startup 命令启动数据库,执行的操作要经历三个不同的阶段: 实例

JDBC 数据库异常 Exception 关闭的(语句,连接,ResultSet)

如果在rs.next()之前关闭了Statement或PreparedStatement,会导致下面的异常: java.sql.SQLException: 关闭的语句: next 如果在rs.next()之前关闭了Connection,会导致下面的异常: java.sql.SQLException: 关闭的连接: next问题 如果在rs.next()之前关闭了ResultSet,会导致下面的异常: java.sql.SQLException: 关闭的 Resultset: next JDBC

oracle数据库启动及关闭

数据库关闭与启动: scn == system change number 数据库启动步骤 nomount----> mount---->open (1)第一阶段 SQL> startup nomount ORACLE instance started. Total System Global Area 7148580864 bytes Fixed Size    2214216 bytes Variable Size 3825206968 bytes Database Buffers