数据库关闭

      其实上次那篇是想写oracle启动与关闭的,岂料图太难画了,所以只写了启动的部分,关闭没有涉及。其实关闭的部分我也想了一个不错的例子,今天跟大家分享一下我对oracle关闭的一些理解。如果有不对的地方,还望各位指正。

我觉得oracle的很多东西,应该是oracle的工程师一步一步的向自己提出问题,然后解决问题,最后慢慢完善起来的。比如昨天看到的重做日志:一般我们认为做一个联机重做日志就行了吧?oracle觉得光联机的时候用不安全,还要可以备份——归档日志就有了;一般我们觉得一个联机重做日志就行了吧?oracle认为写满了归档的时候不能写入归档日志,影响数据库性能——联机重做日志文件组就有了;一般我们觉得一个组就一个重做日志就行了吧?oracle怕一个文件损坏就杯具了——多个重做日志互为镜像就有了……

这一次我也用问题引导的方式跟大家一起分享一下我对关闭数据库的理解。

  1. 关闭数据库需要什么样的权限?

只有具有SYSDBA或SYSOPER权限的用户才能启动DB。回忆下开启数据库,是不是很像呢?其实一样……

  1. 关闭数据库需要用什么工具呢?

a)       SQL*Plus

b)       OEM控制台

c)        Recover Manager管理工具

d)       命令行管理方式

如上次我说,我还是对前两者比较熟悉,第三个好像是传说中的RMAN?呵呵

  1. 数据库关闭分为几个阶段?

如图所示,数据库关闭分为三个阶段,分别是关闭数据库,卸载数据库,关闭实例。这三个阶段连续,数据库不会停在其中某阶段。

数据库的启动好比上楼梯,一共三个台阶,你可以一步迈到顶,也可以一步一步往上走。数据库的关闭好比跳楼,三层楼,你只能一次跳到底,不能跳到二楼,再往下跳……这样一说应该好理解了吧。

  1. 数据库的关闭方式有几种呢?

这个其实对应着开启,但有些不同。开启对应着迈步的方式,是一次一级台阶,还是两级,或是三级。关闭对应着跳楼的方式,前空翻,后仰,还是……我邪恶了。

关闭的方式有四种:

l   正常关闭(NORMAL)

执行条件:无用户连接到数据库上

执行命令后如何运行:

i.禁止任何用户建立新连接

ii.等待当前用户主动断开连接

iii.所有连接断开后关闭数据库

结果:数据库一致完整

l   事务关闭方式(TRANSACTIONAL)

执行条件:所有事务执行完毕

执行命令后如何运行:

i.禁止任何用户建立新连接

ii.等待所有正执行的事务完成

iii.关闭数据库

结果:数据库一致完整

l   立即关闭方式(IMMRDIATE)

原因:即将开始数据库自动备份;即将系统断电;无法通知用户断开

执行条件:将未提交事务退回,直接关闭数据库

执行命令后如何运行:

i.禁止任何用户建立新连接

ii.回退所有未提交事务

iii.断开连接,关闭数据库

结果:数据库一致完整

l   终止关闭(ABORT)

原因:数据库异常,无法关闭;一分钟内断电;启动数据库中故障

执行命令后如何运行:

i.禁止任何用户建立新连接

ii.终止SQL语句执行

iii.不回退事务

iv.高速缓存不屑道数据文件中

v.重做日志缓冲的内存不写到重做日志文件中

vi.断开所有连接,关闭数据库

这四种关闭方式的区别,以图表的方式可能更好理解:

  等待连接 等待事务 执行检查 直接SHUTDOWN
  NORMAL TRANSACTIONAL IMMEDIATE ABORT
允许新连接 × × × ×
等待连接结束 × × ×
等待事务结束 × ×
强制执行检查点和关闭物理文件 ×

注意:

1.   最上面一行,是这四种关闭方式最根本的区别,可帮助大家一句话记住。

2.   对于NORMAL和TRANSACTIONAL,我觉得区别是这样的:

NORMAL 等待连接结束,若有用户执行完事务,但仍然连接,则不能关数据库
TRANSACTIONAL 等待事务结束,若有用户执行完事务,但仍然连接,则oracle将断开其连接,关闭数据库

上面对数据库的四种关闭方式做了详细的介绍,我这再举一个生活中的例子,希望能帮助大家更容易的理解数据库的关闭。

关闭数据库像是饭店打烊一样:

NORMAL:执行此命令后,不接待新客人(禁止新连接),等最后一个客人主动离开后(断开连接),打扫收拾(执行备份,检查完整性等操作),关门(关闭数据库)。

TRANSACTIONAL:执行此命令后,不接待新客人(禁止新连接),等客人吃饭饭后结账(比如吃晚饭正在聊天),就将其赶走(断开连接),打扫收拾(执行备份,检查完整性等操作),关门(关闭数据库)。

IMMEDIAT:执行此命令后,不接待新客人(禁止新连接),把所有正在吃饭的客人赶走(回退事务,断开联机),打扫收拾(执行备份,检查完整性等操作),关门(关闭数据库)。

ABORT:执行此命令后,不接待新客人(禁止新连接),把所有正在吃饭的客人赶走(回退事务,断开联机),打扫收拾(执行备份,检查完整性等操作),关门(关闭数据库)。

  1. 关闭数据库用什么命令?

SQL>SHUTDOWN NORMAL;

作者:仇实

  1. 命令行管理方式是指使用srvctl命令?这个命令在rac环境或者11gR2的orale restart环境中对于单实例数据库有效。

    最常用的关闭数据库命令是shutdown immedaite

    • 这是在《DBA基础》那本书里看到的,至于命令行的管理方式,我还真没接触过
      通过暑假学习,发现最常用的关闭方式确实是shutdown immedaite。在活动的数据库中,使用abort以外的另两种方式确实很难关闭数据库

普人特福的博客cnzz&51la for wordpress,cnzz for wordpress,51la for wordpress