有经验的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