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权限的用户能够访问数据库
--------------------------------------------------------------
spfile,pfile:
给数据库指定参数文件。
--------------------------------------------------------------
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]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
停止数据库:
--------------------
同样,要关闭数据库实例,必须以SYSOPER或SYSDBA身份连接。
-----------------------------------------------------------------------------------------
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 cnt小1。这是因为,当检查
点更新控制文件和数据文件头上的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/