【体系结构】Oracle 11g实例和数据库关闭过程详解

实例和数据库关闭概览

通常情况下,当执行一些维护或其他管理任务时,将会关闭数据库,使其不可访问。可以使用SQL*Plus的shutdown命令,或者OEM来进行数据库的关闭。下图展示了实例和数据库的关闭顺序:

说明:
  • 关闭数据库:数据库处于mounted状态,但是在线数据文件和在线重做日志文件被关闭;
  • 卸载数据库:实例处于started状态,但是不再与数据库的控制文件相关联;
  • 数据库实例关闭:数据库实例不再处于started状态,即实例关闭。
注:在实例故障或者shutdown abort时,Oracle数据库不会进行上面的这些过程,它会立即终止实例。

关闭模式

下图总结了不同的关闭模式对应的数据库行为:

SHUTDOWN语句如下:
  • Shutdown abort
该模式用于紧急情况,例如不能用其它模式关闭,该模式的关闭最快。但是,由于必须执行实例恢复以使数据文件保持一致,因此该数据库的后续打开可能要花费更长时间;
  • Shutdown immediate
该模式的关闭速度仅次于shutdown abort,Oracle数据库终止任何正在执行的SQL语句并断开用户连接,活动的事务被终止,未提交的更改被回滚;
  • Shutdown transaction
该模式防止用户启动新的事务,但在关闭之前需要等待所有当前事务完成,根据当前事务的特点,该模式可能花费很长时间;
  • Shutdown normal
该模式是关闭的默认模式,数据库在关闭之前等待所有连接的用户断开连接。

如何关闭数据库?

数据库的关闭操作隐含在数据库关闭(shutdown)中,该操作取决于数据库是正常关闭还是异常关闭。
1、正常关闭期间,数据库如何关闭?
当数据库以除abort之外的任何选项关闭时,Oracle数据库将SGA中的数据写入数据文件和在线重做日志文件,接下来,数据库关闭在线数据文件和在线重做日志文件。离线表空间的任何离线数据文件已经关闭,当数据库重新打开时,离线的表空间仍然处于离线状态。
在这个阶段,数据库是关闭的,无法进行正常操作,数据库关闭后,控制文件仍然是打开的。
2、异常关闭期间,数据库如何关闭?
如果shutdown abort或者异常终止发生,则处于打开状态的数据库的实例关闭并立即关闭数据库。Oracle数据库不会将SGA的缓冲区的数据写入到数据文件和重做日志文件,随后重新打开数据库时需要进行实例恢复,Oracle数据库会自动执行该操作。

如何卸载数据库?

数据库关闭后,Oracle数据库卸载数据库,将其与实例分离。在数据库卸载后,Oracle数据库关闭数据库的控制文件,此时,实例仍然留在内存中。

如何关闭实例?

数据库关闭的最后一步是关闭实例,当数据库实例关闭时,SGA将从内存移除,后台进程被终止。
注:在非正常情况下,实例可能不会被干净的关闭。内存结构可能不会从内存中移除,或者某个后台进程可能不会被终止。当先前实例的残留内存或进程存在时,随后的实例启动可能会失败,在这种情况下,需要强制新实例启动,或者通过在SQL*Plus或使用OEM中执行shutdown abort语句。

猜你喜欢

转载自blog.csdn.net/Alen_Liu_SZ/article/details/80062844
今日推荐