怎么安全的关掉Oracle,Oracle如何关闭数据库

总结了关于Oracle启动过程中涉及的一些知识点,以及Oracle启动的一些基本的原理知识。说完了启动,那么这篇文章就要说到关闭了。数据库有关就有闭了,而这个关闭数据库的操作,在工作中却经常遇到,所以对于如何关闭Oracle数据库,我就总结了这篇文章。

工作中为什么要关闭数据库呢?有的时候,进行上线任务,需要将当前生产数据库切换到容灾库,切换完成以后,关闭生产数据库,进行一系列的上线操作,上线完成以后,启动生产数据库,并从容灾库切换回来。这就是实际工作中遇到的场景,需要对数据库进行启、停操作。

关闭“三步走”

有了《Oracle学习笔记——数据库启动原理》这篇文章的铺垫,大家都知道了数据库的启动分为三步;同理,对于数据库的关闭,也分为三步,而这三步正好与启动的三步是一一对应的关系:

1.关闭数据库; (对应打开数据库)

2.卸载数据库; (对应加载数据库)

3.关闭实例。 (对应启动实例)

在关闭数据库阶段,Oracle首先把SGA中的数据写到数据文件和重做日志中。然后,Oracle关闭所有的数据文件和重做日志文件。此时,不是管理员的你不再可以访问数据库了。

在成功关闭数据库以后,就需要卸载数据库,这一步只是将数据库与实例接触绑定关系,实例并没有被关闭,接下来就需要关闭实例。

关闭实例也就是关闭所有的Oracle相关后台进程,以及释放启动实例时申请的内存。这一步成功完成以后,也就意味着数据库成功的被关闭了。

以上是关闭数据库的具体的三个步骤,但是从命令行操作的角度来说,对于Oracle数据库的关闭方式有以下四种:

•NORMAL方式

•IMMEDIATE方式

•TRANSACTIONAL方式

•ABORT方式

下面就对这四种关闭数据库的方式进行详解。

NORMAL方式

这是一种最糟糕,使用最少(至少我几乎不用)的一种关闭数据库的方式。为什么糟糕?由于这种方式实在是太慢了,导致使用者有的时候是无法忍受的,使用这种方法关闭数据库时会进行以下的操作:

•允许新的连接请求;

关闭数据库时,当你敲出命令,按下回车;在你按下回车到数据库真正关闭这段时间内,如果还有用户连接数据库,Oracle是允许你连接的。这就好比,我的店要打烊了,但是我还允许顾客进来购物,这就有可能你的店永远不能打烊;

•由于允许新的连接请求,这就决定了不能轻易的断开用户的连接请求;需要等到所有用户自动退出以后,Oracle才会被关闭。如果你不阻止顾客的光临,你的小店可能需要7*24*365服务了。

如果有用户就是不关闭连接。使用这种方式时,你永远也无法关闭数据库。输入以下命令,就是以NORMAL方式关闭Oracle数据库:

SHUTDOWN NORMAL;

-- 你也可以直接SHUTDOWN

SHUTDOWN;

IMMEDIATE方式

这种关闭数据库的方式在工作中是使用频率最高的一种方式,使用这种方法关闭数据库时会进行以下的操作:

•新的连接请求都不会被允许;

关闭数据库时,当你敲出命令,按下回车,数据库不会再一瞬间就会被关闭的;在你按下回车到数据库真正关闭这段时间内,如果还有用户连接数据库,此时是不会连接成功的;

•未提交的事务将会被回滚;

当按下回车,发出关闭数据库的指令时,以前一直保持连接的用户,可能存在着一些未提交的事务,而在IMMEDIATE方式下,这些未提交的事务都会进行回滚,所以不会发生数据的不一致性;

•直接干掉所有连接的用户;

当按下回车,发出关闭数据库的指令时,而在IMMEDIATE方式下,Oracle没有耐心去等待所有保持连接的用户主动退出,而是会单方面直接切断用户的连接。

使用这种方式关闭数据库的好处是——安全,所有未提交的事务都回滚了,当再次启动数据库时不需要进行实例恢复。输入以下命令,就是以IMMEDIATE方式关闭Oracle数据库:

SHUTDOWN IMMEDIATE;

TRANSACTIONAL方式

这种方式虽然很慢,但是很人性化,为什么说它人性化呢,你看看它做的事情就知道了:

•不允许新的用户连接数据库;

•不允许建立新的事务;

•所有的事务完成以后才关闭数据库;(你的数据有保障)

•一个会话执行完手里的事务后将被强行断开与数据库的连接。

这种方式很安全,你的数据肯定是不会被丢失的;但是很慢,你要等到所有的事务完成以后,才会关掉。

ABORT方式

这是最粗鲁、最野蛮的关闭方式。当你需要使用这种方式时,顺便祈祷一下数据库不要出现问题,使用这种方式,看看都会进行以下的操作:

•不允许新的连接和新的事务;

•客户端的SQL语句立刻被终止;

•未提交的事务不被回滚(哦,你的数据!!!不一致性)

•Oracle终止所有连接;

看到了么?都是强制手段,Oracle单方面撕毁所有“合同”;一般使用这种方式关闭数据库时,应该是出现什么问题了。

当我们使用以下命令重启数据库时,就意味着,背后在使用ABORT方式关闭数据库:

STARTUP FORCE;

打个比方

关闭Oracle数据库就好比超市晚上打烊。

•对于NORMAL方式来说,超市永远都不会拒绝客人,来一位就接待一位,来两位就接待两位;同时也永远不会赶客人,不会出现“我们要下班了,你们立刻出去,我们不做生意了”这种情况;顾客是上帝,只有所有的顾客都满意的离开超市以后,才会打烊;

•对于IMMEDIATE方式来说,到了打烊的点了,立马不接待新的顾客;而超市现有的没结账的顾客,需要将选购的物品再放回货架,然后将这些顾客通通赶出去,然后说一句:我们打烊了,明天再来吧。

•对于TRANSACTIONAL方式来说,到了打烊的点了,新的顾客就不会被接待了,而超市现有没结账的顾客还可以继续选购自己的货物,直到你付账离开;当所有的顾客都离开以后,超市就可以打烊了;

•对于ABORT方式来说,到了打烊的点,新的顾客就不会被接待了,而超市现有没结账的顾客会要求立刻结账,不允许再选购物品了,然后就关门大吉。

这就是关闭Oracle数据库的几种方式,你清楚了吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值