Skip to content

各版本Oracle数据库快速关闭的方式

有经验的DBA都知道SHUTDOWN ABORT 是关闭数据库的最快方式。

但是,以这种形式关闭数据库会使数据库处于不一致的状态(没有回滚),在这种情况下的备份在下次启动时需要恢复 。

在8.1.6以前的版本里,数据库是不推荐使用SHUTDOWN ABORT,因为在这么老的版本上这么做导致数据库损坏的概率很大。

 

在执行快速关闭之前,建议按照如下顺序来操作:

1.通过下面的查询判定干净的关闭数据库需要多少回滚(以字节计算)

select sum(used_ublk) * <undo / rollback segment 表空间的block size> from v$transaction;

2. SHUTDOWN ABORT

将不进行事务回滚,快速的中断所有进程 (客户端 和 后台)。

 

A SHUTDOWN IMMEDIATE时SMON会尝试中断所有客户端进程(SIGKILL),但是很多情况下SMON无法及时完成,这是使用SHUTDOWN ABORT的原因。

3.在下次启动时,SMON会回滚事务。

可以通过STARTUP RESTRICT启动

然后通过下面的查询语句查看回滚(块的个数)

select sum(distinct(ktuxesiz)) from x$ktuxe where ktuxecfl = ‘DEAD’;

6.当回滚完成 (当上次关闭数据库时候,活动事务不多的情况下,有可能启动后立刻就完成了), 执行 SHUTDOWN IMMEDIATE。
当完成此步骤后,数据库将干净的关闭

 

这里早前碰见过一个BUG,一个没有发布的SQLPLUS内部bug会阻止SQLPLUS会话被SMON中断,客户端进程的truss / pdump等会显示SQLPLUS会话在等待WAITPID