Oracle数据库启动与关闭各种⽅式详解整理
概述
只有具备sysdba和sysoper特权的⽤户才能启动和关闭。
在启动数据库之前应该启动监听程序,否则就不能利⽤命令⽅式来管理数据库,包括启动和关闭数据库。
虽然数据库正常运⾏,但如果没有启动监听程序,客户端就不能连接到数据库。
在oracle⽤户下:启动监听程序 lsnrctl start 关闭监听程序lsnrctl stop
查询监听程序状态lsnrctl status
startup
⽀持参数
STARTUP options | upgrade_options
options为:[FORCE] [RESTRICT] [PFILE=filename] [QUIET] [ MOUNT [dbname]
| [ OPEN [open_options] [dbname] ] | NOMOUNT ],
NOMOUNT、MOUNT、OPEN为startup的三个阶段,不能在命令中同时存在。其中,open_options为:READ {ONLY
| WRITE [RECOVER]} | RECOVER。
upgrade_options为:[PFILE=filename] {UPGRADE | DOWNGRADE} [QUIET]
的完整启动过程包含以下3个步骤:
简单地说,就是:启动实例-->加载数据库-->打开数据库.
------------------------------------------------------------------------------------------------------------------
1.创建并启动与数据库对应的实例。
在启动实例时,将为实例创建⼀系列后台进程和服务进程,并且在内存中创建SGA区等内存结构。在实例启动的过程中只会使⽤到初始化参数⽂件,数据库是否存在对实例的启动没有影响。如果初化参数设置有误,实例将⽆法启动。
2.为实例加载数据库。
加载数据库时实例将打开数据库的控制⽂件,从控制⽂件中获取数据库名称、数据⽂件的位置和名称等有关数据库物理结构的信息,为打开数据库做好准备。如果控制⽂件损坏,则实例将⽆法加载数据库。在加载数据库阶段,实例并不会打开数据库的物理⽂件----数据⽂件和重做⽇志⽂件。
3.将数据库设置为打开状态。
打开数据库时,实例将打开所有处于联机状态的数据⽂件和重做⽇志⽂件。控制⽂件中的任何⼀个数据⽂件或重做⽇志⽂件⽆法正常打开,数据库都将返回错误信息,这时需要进⾏数据库恢复。
只有将数据库设置为打开状态后,数据库才处于正常状态,这时普通⽤户才能够访问数据库。在很多情况下,启动数据库时并不是直接完成上述3个步骤,⽽是逐步完成的,然后执⾏必要的管理操作,最后才使数据库进⼊正常运⾏状态。所以,才有了各种不同的启动模式⽤于不同的数据库维护操作。
因为Oracle数据库启动过程中不同的阶段可以对数据库进⾏不同的维护操作,对应我们不同的需求,所以就需不同的模式启动数据库。
⼩⽩:在启动实例之前,需要先启动SQL*Plus,并以⼀个⽤户⾝份连接到Oracle。
启动模式详解
1.NoMount 模式(启动实例不加载数据库)
命令:startup nomount
讲解:这种启动模式只会创建实例,并不加载数据库,Oracle仅为实例创建各种内存结构和服务进程,不会打开任何数据⽂件。在NoMount 模式下,只能访问那些与SGA区相关的数据字典视图,包括V$PARAMETER、V$SGA、V$PROCESS 和 V$SESSION等,这些视图中的信息都是从SGA区中获取的,与数据库⽆关。⾮安装启动,这种⽅式启动下可执⾏:重建控制⽂件、重建数据库、读取a⽂件,启动instance,即启动SGA和后台进程,这种启动只需要a⽂件。
模式⽤途:
(1)创建新数据库;
(2)重建控制⽂件。
2.Mount模式(加载数据库但不打开数据库)
命令:startup mount
讲解:这种启动模式将为实例加载数据库,但保持数据库为关闭状态。因为加载数据库时需要打开数据库控制⽂件,但数据⽂件和重做⽇志⽂件都都⽆法进⾏读写,所以⽤户还⽆法对数据库进⾏操作。在Mount模式下,只能访问那些与控制⽂件相关的数据字典视图,包括
V$THREAD、V$CONTROLFILE、V$DATABASE、V$DATAFILE 和 V$LOGFILE等,这些视图都是从控制⽂件中获取的。
模式⽤途:
(1)重命名数据⽂件;
(2)添加、删除或重命名重做⽇志⽂件;
oracle客户端卸载步骤
(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)关闭数据库,oracle将重做⽇志⾼速缓存中的内容写⼊重做⽇志⽂件,并且将数据库⾼速缓存中被改动过的数据写⼊数据⽂件,然后再关闭所有的数据⽂件和重做⽇志⽂件,这时数据库的控制⽂件仍然处于打开状态,但是由于数据库处于关闭状态,所以⽤户⽆法访问数据库。(2)卸载数据库,关闭数据库后,例程才能被卸载,控制⽂件再这个时候被关闭,但例程仍然存在。
(3)终⽌例程,进程终⽌,分配给例程的内存sga区被回收。
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)直接断开所有⽤户的连接,关闭、卸载数据库,并终⽌实例。