oracle startup过程解析

Oracle的正常启动是指:

------------------------------

              1.启动实例

              -------------------------

              2.加载数据库

              -------------------------

              3.打开数据库

              -------------------------

         语法:

              startup {nomount|mount|open|force|restrict}

                            {spfile=spfile_name}{pfile=pfile_name}

         -------------------------------------------------------------

         ***注意:这是不完整的语法

         -------------------------------------------------------------

              open:

                     打开数据库,使用户能够访问

               --------------------------------------------------------------

              nomount:

                     创建SGA并启动后台进程,不能访问数据库

              --------------------------------------------------------------

              mount:

                     DBA的某些操作加载数据库,此时用户不能访问数据库

              --------------------------------------------------------------

              force:

                     执行正常启动之前,终止运行的实例

              --------------------------------------------------------------

              restrict:

                     只允许具有restricted session权限的用户能够访问数据库

              --------------------------------------------------------------

              spfilepfile

                     给数据库指定参数文件。

              --------------------------------------------------------------

 

 

 

 

 

                                                                open

                 startup                                    ................................

                   ^                              mount   |

                   |                          ...................|             |

                   |              nomount   |                      |

                             ........................|                    shutdown

               shutdown   |                                                                

            ………..........|.......................................................................................

          ------------------------------------------------------------- ----------------------------------------------------------------

             启动实例:(nomount)

             -----------------------

数据库首先要找参数文件,通过指定spfile,pfile参数或者使用默认文件,如果找到,则覆盖相应的默认参数值,然后分配SGA并启动后台进程,打开alertsid.log文件和进程跟踪文件。      

                       -------------------------------------------------------------------------------------------------------------------

                       一般在创建数据库或创建控制文件时,实例才需要在nomount阶段启动。

                       -------------------------------------------------------------------------------------------------------------------

                      startup nomount;

                       alter database mount;

                       alter database open;

                       -------------------------------------------------------------------------------------------------------------------

              加载数据库:(mount)    

           ---------------------------

                     加载数据库时,使数据库与前一步启动的实例相关联,定位并打开参数文件

                     中指定的控制文件,并在控制文件中获得数据文件和重做日志的名称和状态。

                     ***注意:此时只是在控制文件中查找,不去检查数据文件和重做日志文件是

                     否存在。

                     ---------------------------------------------------------------------------------------------------

                     一般需要重命名数据文件,切换数据库到归档和非归档模式,以及执行数据

                     恢复时需要将数据库启动到mount状态,但并不打开数据库

                     ---------------------------------------------------------------------------------------------------

                     startup mount;

                     alter database open;

                     -------------------------------------------------------------------

              打开数据库(open):

           -----------------------

                     打开数据库包括打开数据文件和重做日志文件,Oracle到这个步骤才去校验

                     这两个文件是否存在并检查数据库的一致性,如果不存在,Oracle服务器将

                     返回错误消息,如果有必要,系统监视后台进程(SMON)将启动实例恢复操作。           

           ------------------------------------------------------------------------------------------------------------

              将数据库启动到指定状态:

              -----------------------------------

                     alter database { mount|open|[read write|read only] }

                     --------------------------------------------------------------------

                            read write:

                                   以读写模式打开数据库,以便用户生成重做日志

                    ----------------------------------------------------------------------------------------

                            read only:

                                   将用户限制为只能执行只读事务,防止用户生成重做日志信息。

                                   -----------------------------------------------------------------------------------------

              以只读模式打开数据库:          

              -------------------------------

                     为了防止数据被其它用户事务修改,可以以只读模式打开数据库

                     -----------------------------------------------------------------------------------

                     startup mount;

                     alter database open read only;

                     ----------------------------------------------------------------------------------

              以受限模式打开数据库:

              --------------------------------

                     当执行结构维护或数据导出导入时,为禁止普通用户访问数据库,可以以受限模式

                     打开数据库,只有特权用户和拥有Restricted session权限的用户才可以访问数据库。

                     -----------------------------------------------------------------------

                     startup restrict;

                     --------------------

                     也可以使用SQL语句alter system使数据库设为受限模式或取消受限模式:

                     -----------------------------------------------------------------------

                     alter system [ (enable|disable) restricted session]

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

       停止数据库:             

--------------------                                

              同样,要关闭数据库实例,必须以SYSOPERSYSDBA身份连接。

              -----------------------------------------------------------------------------------------              

              shutdown [normal|transactional|immediate|abort]

              ----------------------------------------------------------------------------------------

              选项特征参考表:             

          -----------------------------------------------------------------------------------------

                |是否允许操作                   |  normal  |  transactional |immediate | abort

                -----------------------------------------------------------------------------------------------    

                |允许建立新的连接            | no       |    no       |   no    |  no

                ----------------------------------------------------------------------------------------------

                |等待会话结束                   | yes      |       no           |   no    |  no

                -----------------------------------------------------------------------------------------------

                |等待事务结束                   | yes        | yes      |   no    |  no

                -----------------------------------------------------------------------------------------------

                |强制执行检查点操作并关闭数据库 | yes        | yes      |   yes   |  no

                --------------------------------------------------------------

详细说明:

1.NOMOUNT

---------------------------

这一步只和参数文件有关,如果在这一步就出现问题,那么通常可能是系统配置(如内核参数等)存在问题,需要检查是否分配了足够的系统资源。

              ---------------------------------------------------------------------------------------------------------------------------

       2.MOUNT

--------------------------

              这一步需要从参数文件中获得控制文件位置,读取其中内容,校验数据文件的存在性。

除此之外还会去校验口令文件。Oracle缺省查找orapw文件,如果该文件找不到,则继续查找orapw文件,如果两者都不存在,数据库将出现错误。但数据为仍可以打开。从Oracle10g开始,当口令文件丢失后,Oracle将不再提示错误,只是和口令文件相关的部分功能将无法使用。

              ----------------------------------------------------------------------------------------------------------------------------

              lk文件及作用

              ---------------------------------------

该文件在数据库启动时创建,用于操作系统对数据库的锁定。当数据库启动时获得锁定,数据库关闭时释放。在系统出现异常时,可能数据库已经关闭,但锁定并未释放,或者因为后台进程未正常停止等原因,会导致下次数据库无法启动。解决办法就是重启服务器,或者手工释放共享内存段。                    

                     -----------------------------------------------------------------------------------------------------------------------

       3.OPEN

--------------------

这一步将进行检查点和完整性的检查。如果检查全部通过,则打开数据库,否则给出错误警告,停止打开数据库。

              --------------------------------------------------------------------------------------------------------------------------

              数据库的启动验证:

              ------------------------

1.       第一次检查数据文件头中的Checkpoint CNT是否与对应控制文件中的Checkpoint CNT一致。此步骤检查用以确认数据文件是否来自同一版本,而不是从备份中恢复而来

(在热备份模式下,数据文件检查点被冻结,但检查点计数不会被冻结,会一直修改)

Oracle10g中用8级转储获得控制文件信息。

SQL> alter session set events 'immediate trace name controlf level 8';

Oracle9i中用10级转储。

           ----------------------------------------------------------------------------------------------------------------------------

2.       第二次检查数据文件头的开始SCN控制文件中记录的该文件的的结束SCN是否一致。如果一致,则不需要对那个文件进行恢复。

 

部分控制文件转储内容:

222 DATA FILE RECORDS

223 ***************************************************************************

224  (size = 428, compat size = 428, section max = 100, section in-use = 5,

225   last-recid= 8, old-recno = 0, last-recno = 0)

226  (extent = 1, blkno = 11, numrecs = 100)

227 DATA FILE #1:

228   (name #7) /u01/app/oracle/oradata/orcl/system01.dbf

229 creation size=0 block size=8192 status=0xe head=7 tail=7 dup=1

230  tablespace 0, index=1 krfil=1 prev_file=0

231  unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00

232  Checkpoint cnt:52 scn: 0x0000.0007ba16 02/18/2011 16:30:22

233  Stop scn: 0xffff.ffffffff 02/16/2011 11:07:26

234  Creation Checkpointed at scn:  0x0000.00000009 06/30/2005 19:10:11

235  thread:0 rba:(0x0.0.0)

236  enabled  threads:  00000000 00000000 00000000 00000000 00000000 00000000

              ----------------------------------------------------------------------------------------------------------------------------

在数据库出现问题时,提示中给出的可能是不完整的信息,而告警日志中则记录了完整的错误过程和错误号。

说明:

控制文件中记录的SCN指最后一次成功完成的检查点SCN

数据文件头中的记录的SCN指数据文件最后一次成功完成的检查点SCN

              此外,在控制文件和数据文件头都记录一个检查点计数(chkpt cnt),而且数据文件头还记录了一个             控制文件检查点计数(ctl cnt)。但这个ctl cnt要比控制文件中的ctl cnt1。这是因为,当检查

              点更新控制文件和数据文件头上的chkpt cnt信息时,在更新控制文件之前,可以获得当前的ctl cnt

              , 这个信息被记入了数据文件。之所以这么做,是因为不能保证更新控制文件上的 chkpt cnt 一定               会成功,记录之前的 ctl cnt 可以确保上一次的 chkpt cnt 是成功完成的。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25963200/viewspace-700402/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25963200/viewspace-700402/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值