Oracle的关闭也有好几种模式,每种模式具有不同的特性,并且关闭所花费的时间也各不相同。
关闭数据库使用 SHUTDOWN 命令,具有4种关闭模式,分别是 NORMAL、TRANSACTION、IMMEDIATE、ABORT。其中 NORMAL 是默认模式。
下面介绍这几种不同模式之间的区别
NORMAL模式
示例语句:shutdown
NORMAL 是默认的关闭模式,这种模式在关闭数据库之前会等待所有的用户断开与数据库的连接,当所有的会话都断开以后数据库关闭,这种模式会导致数据库需要长时间等地才能正常关闭。使用 NORMAL 模式关闭数据库时,Oracle会发生如下的几种情况:
- 数据库将不再接收新的数据库连接
- Oracle服务器等待所有的用户断开连接才完成关闭
- 数据库文件和重做缓冲区会写入到磁盘中
- 后台进程被终止,从内存中删除SGA
- 下一次启动时不需要进行实例恢复
NORMAL模式通常会等待较长的时间才能关闭数据库
TRANSACTION模式
示例语句:shutdown transactional
TRANSACTION模式会等待当前的事务处理完成后就断开连接,当所有的事务处理完成后就会关闭数据库
它会完成如下的一些行为:
- 任何新用户不能连接到数据库
- 现有的用户不能启动新的事务,并且连接将会断开
- 如果用户正在执行事务,在断开用户的连接前,Oracle将等待,直到该事务处理完成
- 当所有的事务都完成后,Oracle就关闭实例并释放内存,然后将所有的重做日志缓冲区和数据块缓冲区写入磁盘
- 由于事务都已得到了处理,所以不需要进行实例恢复
TRANSACTION模式保证了Oracle的数据库事务都得到了一致性的处理,因此是一种较为安全的恢复方式,不过它会等待所有的事务处理完成,因此对于长时间的事务来说,仍然需要等待完成,如果因为介质故障灯需要紧急关闭,这种模式不是很适用。
IMMEDIATE模式
示例语句:shutdown immediate
IMMEDIATE模式会立即关闭数据库,这种方式不会无限的等待用户退出,也不会等待事务的完成,它会回滚(ROLLBACK)所有的事务,断开所有已连接的用户,然后关闭数据库。IMMEDIATE会完成如下的一些动作:
- 该命令发出后,任何用户都不能进行连接
- 立即断开所有的用户连接
- 终止所有当前正在执行的数据库事务
- 对于正在执行的事务,Oracle会将事务进行回滚,是数据保持一致,由于回滚也需要时间,因此IMMEDIATE操作有时也并不是立即完成的。
- 重启数据库时不需要进行实例恢复,因为它在关闭时是一致的。
ABORT模式
示例语句:shutdown abort
ABORT模式直接关闭数据库,不管当前是否正在执行事务,即不等待完成,也不进行回滚,直接断开连接。ABORT可以看作是强制性的关闭数据库,它会完成如下的几个行为:
- 它不允许进行新的数据库连接
- 无论是否有可执行的事务,都会终止会话
- 事务不会被回滚,更不会等待事务完成
- 不会将重做日志缓冲区中的数据缓冲区写到磁盘
- 终止后台进程,立即释放内存并关闭数据库
- 由于强制性终止不能保证数据库在关闭时是一致的,因此在重启时,Oracle将执行自动恢复实例