在《Oracle学习笔记——数据库启动原理》这篇文章中,总结了关于Oracle启动过程中涉及的一些知识点,以及Oracle启动的一些基本的原理知识。说完了启动,那么这篇文章就要说到关闭了。数据库有关就有闭了,而这个关闭数据库的操作,在工作中却经常遇到,所以对于如何关闭Oracle数据库,我就总结了这篇文章。
工作中为什么要关闭数据库呢?有的时候,进行上线任务,需要将当前生产数据库切换到容灾库,切换完成以后,关闭生产数据库,进行一系列的上线操作,上线完成以后,启动生产数据库,并从容灾库切换回来。这就是实际工作中遇到的场景,需要对数据库进行启、停操作。
有了《Oracle学习笔记——数据库启动原理》这篇文章的铺垫,大家都知道了数据库的启动分为三步;同理,对于数据库的关闭,也分为三步,而这三步正好与启动的三步是一一对应的关系:
在关闭数据库阶段,Oracle首先把SGA中的数据写到数据文件和重做日志中。然后,Oracle关闭所有的数据文件和重做日志文件。此时,不是管理员的你不再可以访问数据库了。
在成功关闭数据库以后,就需要卸载数据库,这一步只是将数据库与实例接触绑定关系,实例并没有被关闭,接下来就需要关闭实例。
关闭实例也就是关闭所有的Oracle相关后台进程,以及释放启动实例时申请的内存。这一步成功完成以后,也就意味着数据库成功的被关闭了。
以上是关闭数据库的具体的三个步骤,但是从命令行操作的角度来说,对于Oracle数据库的关闭方式有以下四种:
下面就对这四种关闭数据库的方式进行详解。
这是一种最糟糕,使用最少(至少我几乎不用)的一种关闭数据库的方式。为什么糟糕?由于这种方式实在是太慢了,导致使用者有的时候是无法忍受的,使用这种方法关闭数据库时会进行以下的操作:
如果有用户就是不关闭连接。使用这种方式时,你永远也无法关闭数据库。输入以下命令,就是以NORMAL方式关闭Oracle数据库:
SHUTDOWN NORMAL;
-- 你也可以直接SHUTDOWN
SHUTDOWN;
这种关闭数据库的方式在工作中是使用频率最高的一种方式,使用这种方法关闭数据库时会进行以下的操作:
使用这种方式关闭数据库的好处是——安全,所有未提交的事务都回滚了,当再次启动数据库时不需要进行实例恢复。输入以下命令,就是以IMMEDIATE方式关闭Oracle数据库:
SHUTDOWN IMMEDIATE;
这种方式虽然很慢,但是很人性化,为什么说它人性化呢,你看看它做的事情就知道了:
这种方式很安全,你的数据肯定是不会被丢失的;但是很慢,你要等到所有的事务完成以后,才会关掉。
这是最粗鲁、最野蛮的关闭方式。当你需要使用这种方式时,顺便祈祷一下数据库不要出现问题,使用这种方式,看看都会进行以下的操作:
看到了么?都是强制手段,Oracle单方面撕毁所有“合同”;一般使用这种方式关闭数据库时,应该是出现什么问题了。
当我们使用以下命令重启数据库时,就意味着,背后在使用ABORT
方式关闭数据库:
STARTUP FORCE;
关闭Oracle数据库就好比超市晚上打烊。
这就是关闭Oracle数据库的几种方式,你清楚了吗?
2015年5月22日 于呼和浩特。