oracle数据库的启动与关闭过程

oracle数据库的启动与关闭过程

该文章为引用并整理。
原文链接:
Oracle数据库各种启动模式详解
Oracle 数据库启动过程各步骤详解
在Oracle各启动模式间切换及受限状态、只读状态详解

数据库的启动过程

首先要知道,Oracle数据库的完整启动过程是分步骤完成的,包含以下3个步骤:
启动实例–>加载数据库–>打开数据库

1.创建并启动与数据库对应的实例。
在启动实例时,将为实例创建一系列后台进程和服务进程,并且在内存中创建SGA区等内存结构。在实例启动的过程中只会使用到初始化参数文件,数据库是否存在对实例的启动没有影响。如果初化参数设置有误,实例将无法启动。

2.为实例加载数据库。
加载数据库时实例将打开数据库的控制文件,从控制文件中获取数据库名称、数据文件的位置和名称等有关数据库物理结构的信息,为打开数据库做好准备。如果控制文件损坏,则实例将无法加载数据库。在加载数据库阶段,实例并不会打开数据库的物理文件----数据文件和重做日志文件。

3.将数据库设置为打开状态。
打开数据库时,实例将打开所有处于联机状态的数据文件和重做日志文件。控制文件中的任何一个数据文件或重做日志文件无法正常打开,数据库都将返回错误信息,这时需要进行数据库恢复。
只有将数据库设置为打开状态后,数据库才处于正常状态,这时普通用户才能够访问数据库。在很多情况下,启动数据库时并不是直接完成上述3个步骤,而是逐步完成的,然后执行必要的管理操作,最后才使数据库进入正常运行状态。所以,才有了各种不同的启动模式用于不同的数据库维护操作。

因为Oracle数据库启动过程中不同的阶段可以对数据库进行不同的维护操作,对应我们不同的需求,所以就需不同的模式启动数据库。
小白:在启动实例之前,需要先启动SQL*Plus,并以一个用户身份连接到Oracle。

启动模式详解

1.NoMount 模式(启动实例不加载数据库)
命令:startup nomount
讲解:这种启动模式只会创建实例,并不加载数据库,Oracle仅为实例创建各种内存结构和服务进程,不会打开任何数据文件。在NoMount模式下,只能访问那些与SGA区相关的数据字典视图,包括V$PARAMETERV$SGAV$PROCESSV$SESSION等,这些视图中的信息都是从SGA区中获取的,与数据库无关。
模式用途:
(1)创建新数据库;
(2)重建控制文件。

2.Mount模式(加载数据库但不打开数据库)
命令:startup mount
讲解:这种启动模式将为实例加载数据库,但保持数据库为关闭状态。因为加载数据库时需要打开数据库控制文件,但数据文件和重做日志文件都都无法进行读写,所以用户还无法对数据库进行操作。 在Mount模式下,只能访问那些与控制文件相关的数据字典视图,包括V$THREADV$CONTROLFILEV$DATABASEV$DATAFILEV$LOGFILE等,这些视图都是从控制文件中获取的。
模式用途:
(1)重命名数据文件;
(2)添加、删除或重命名重做日志文件;
(3)执行数据库完全恢复操作;
(4)改变数据库的归档模式。

3.Open模式(正常打开数据库)
命令:startup [open]
讲解:正常按3个步骤启动数据库。
模式用途:平时不对数据库做什么维护,像只做应用开发,用这个模式就好了。

4.强制启动模式
命令:startup force
用途&讲解:在某些情况下,使用前面的各种模式都无法成功启动数据库时,可以尝试强制启动模式。

各个模式的切换

使用Alter Database语句,还可以在各启动模式间切换。并且,还可以对数据库设置不同的状态用于不同的操作,如受/非受限抽状态、只读。
详情参考如下:
使用Alter Database语句,在各启动模式间切换。
1.从NoMount模式切换到Mount模式(没有从mount切换到nomount的):
命令:ALTER DATABASE MOUNT;

2.当数据库状态为关闭时,切换到Open模式
命令:ALTER DATABASE OPEN;

3.在Open模式下,还可以选择将数据库设置为非受限状态和受限状态。
命令:
在启动Open模式时,添加restrict关键字:startup restrict
设置或取消受限状态:alter system enable\disable restricted session;
讲解:
非受限状态,就是我们平时应用程序开发用到的状态。
受限状态,当打开的数据库被设置为受限状态时,只有Create Session 和 Restricted Session系统权限 或者 具有SYSDBA 和 SYSPORE 系统权限的用户才能连接到数据库。但进入受限状态后,系统中仍然可能会存在活动的普通用户会话。
受限状态用途:
(1)执行数据导入或导出操作;
(2)暂时拒绝普通用户访问数据库;
(3)进行数据库移植或升级操作。

4.只读状态
设置只读命令:alter database open read only;
取消只读命令:alter database open read write;
用途&讲解:当一个正常打开的数据库被设置为只读状态时,用户只能查询数据,但不能以任何方式对数据库对象进行修改。处于只读状态,可能保证数据文件和重做日志文件中的内容不被修改,但是并不限制那些不会写入数据文件与重做日志文件的操作。

关闭数据库与实例

与数据库启动一下,关闭数据库与实例也分为3步:
关闭数据库–> 实例卸载数据库—> 终止实例。

1.Nomal(正常关闭方式)
命令:shutdown nomal
讲解:正常方式关闭数据时,Oracle执行如下操作:
(1)阻止任何用户建立新的连接。
(2)等待当前所有正在连接的用户主动断开连接(此方式下Oracle不会立即断掉当前用户的连接,这些用户仍然操作相关的操作)
(3)一旦所有的用户都断开连接,则立即关闭、卸载数据库,并终止实例。(所以,一般以正常方式关闭数据库时,应该通知所有在线的用户尽快断开连接)

2.Immediate(立即关闭方式)
命令:shutdown immediate
讲解:
(1)阻止任何用户建立新的连接,同时阻止当前连接的用户开始任何新的事务。
(2)Oracle不等待在线用户主动断开连接,强制终止用户的当前事务,将任何未提交的事务回退。(如果存在太多未提交的事务,此方式将会耗费很长时间终止和回退事务)
(3)直接关闭、卸载数据库,并终止实例。

3.Transactional(事务关闭方式)
命令:shutdown transactional
讲解:这种方式介于正常关闭方式跟立即关闭方式之间,响应时间会比较快,处理也将比较得当。执行过程如下:
(1)阻止任何用户建立新的连接,同时阻止当前连接的用户开始任何新的事务。
(2)等待所有未提交的活动事务提交完毕,然后立即断开用户的连接。
(3)直接关闭、卸载数据库,并终止实例。

4.Abort(终止关闭方式)
命令:shutdown abort
讲解:这是比较粗暴的一种关闭方式,当前面3种方式都无法关闭时,可以尝试使用终止方式来关闭数据库。但是以这种方式关闭数据库将会丢失一部份数据信息,当重新启动实例并打开数据库时,后台进程SMON会执行实例恢复操作。一般情况下,应当尽量避免使用这种方式来关闭数据库。执行过程如下:
(1)阻止任何用户建立新的连接,同时阻止当前连接的用户开始任何新的事务。
(2)立即终止当前正在执行的SQL语句。
(3)任何未提交的事务均不被退名。
(4)直接断开所有用户的连接,关闭、卸载数据库,并终止实例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值