如何以最快方式干净的关闭数据库? (Doc ID 1577321.1)

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

*** 注意 *** 在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的原因。(参加下面的提示2)

3) 从第一步的输出以及您的经验决定您是否能等待干净的关闭数据库的时间(shutdown immediate)  如果您不能等待shutdown immediate完成,忽略余下的步骤,在下次启动时,SMON会回滚事务。

4) STARTUP RESTRICT

5) 通过下面的查询查看回滚(块的个数)
   

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



6) 当回滚完成 (有 可能 启动后立刻就完成了), 执行 SHUTDOWN IMMEDIATE。

 

当完成此步骤后,数据库将干净的关闭

=============================================================

提示 1:

** Oracle? Database Backup and Recovery User's Guide 11g Release 1 (11.1)

7 RMAN Backup Concepts

Consistent Backups(一致性备份)

您可以使用BACKUP命令进行数据库一致性和非一致性备份。当数据库为一致的状态可以进行一致性备份。当数据库使用SHUTDOWN NORMAL, SHUTDOWN IMMEDIATE, or SHUTDOWN TRANSACTIONAL命令关闭,数据库为一致性状态。一致性关闭保证了所有redo的信息都被应用到了数据文件。如果您在此时mount数据库进行备份,您可以稍后从备份restore数据库并在打开它时无需介质恢复。

Inconsistent Backups(非一致性备份)

任何不是一致性的备份都定义为非一致性备份。数据库不一致时的备份,如在实例失败或者SHUTDOWN ABORT后的备份。当数据库从一个非一致性备份restore,Oracle在打开前必须执行介质恢复,从重做日志中应用变更。

注意:
RMAN不允许在非归档模式下执行非一致性备份。如果您采用非归档模式下用户管理方式的备份,那么您不可以进行非一致性备份。

只要数据库在归档模式下运行,您可以备份归档日志文件和数据文件,非一致性备份是合理的备份恢复策略的基础。非一致性备份提供了高可用性,因为它无需关闭数据库来进行备份,也完全保护了数据库。

=============================================================

提示 2: 

一个存在的SQLPLUS内部bug(没有被发布)会阻止SQLPLUS会话被SMON中断。
    客户端进程的truss / pdump等会显示SQLPLUS会话在等待WAITPID 

=============================================================

提示 3:

** Oracle? Database Administrator's Guide 11g Release 1 (11.1)

Shutting Down a Database

Shutdown Timeout and Abort

关闭模式将等待用户断开或者事务在限定的时间内完成。如果关闭操作由于有事件阻塞进而不能在一小时内完成,关闭命令将中止并显示下面的信息:ORA-01013: user requested cancel of current operation。这个信息也会在您取消关闭进程时显示,例如执行CTRL-C。Oracle推荐您不要中断实例关闭。允许关闭进程完成,再重启实例。

当ORA-01013发生,您必须考虑到实例是在一个未知的状态。所要您必须重新执行SHUTDOWN命令来继续关闭进程。如果随后的SHUTDOWN命令仍旧失败,您需要执行SHUTDOWN ABORT使实例关闭。之后您可以重启实例。

posted @ 2020-07-28 14:46  阿西吧li  阅读(514)  评论(0编辑  收藏  举报