ITPub博客

首页 > 数据库 > Oracle > 【02】Oracle数据库的实例启动关闭详解

【02】Oracle数据库的实例启动关闭详解

原创 Oracle 作者:神谕丶 时间:2015-01-28 11:25:41 0 删除 编辑
启动
数据库的启动分为三个阶段:
nomount:启动数据库实例。(查找参数文件)
mount:启动数据库实例并加载数据文件。(查找控制文件)
open:启动数据库实例,打开数据文件

当然也可以直接通过startup来打开数据库
可选参数是:
startup (默认为open)
startup nomount
startup mount
startup force(实际上为shutdown abort + startup)

启动到nomount状态:
SQL> startup nomount
ORACLE instance started.


Total System Global Area 1603411968 bytes
Fixed Size                  2213776 bytes
Variable Size            1174407280 bytes
Database Buffers          419430400 bytes
Redo Buffers                7360512 bytes

实际上就是查找参数文件,根据参数文件的内容(应用参数),创建了instance,并为其分配内存,启动相应的后台进程。

输入 show parameter spfile便可查询使用的是哪个spfile进行的启动

SQL> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /u01/app/oracle/product/11.2.0
                                                 /db_1/dbs/spfileORCL.ora
其中ORCL是数据库的sid

若找不到spfile.ora文件,则将以spfile.ora文件启动数据库。
若找不到spfile.ora文件,则将以init.ora文件启动数据库。

若上述三者都不在,则oracle将无法启动。

在上述参数文件中,至少需要提供db_name才能启动instance。
其他几个参数值将会调用系统缺省值:

SQL> show parameter dump_dest
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
background_dump_dest                 string      /u01/app/oracle/diag/rdbms/orc
                                                 l/ORCL/trace
core_dump_dest                       string      /u01/app/oracle/diag/rdbms/orc
                                                 l/ORCL/cdump
user_dump_dest                       string      /u01/app/oracle/diag/rdbms/orc
                                                 l/ORCL/trace

SQL>show parameter control_files
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      /u01/app/oracle/oradata/ORCL/c
                                                 ontrol01.ctl, /u01/app/oracle/
                                                 flash_recovery_area/ORCL/contr
                                                 ol02.ctl


启动到mount状态:
SQL> alter database mount;

Database altered.

启动到mount这个过程中,oracle会从控制文件中获得数据文件的位置,这将判断数据文件是否存在。
如果不存在,后台进程将会在告警日志中记录文件缺失信息。



启动到open状态:
SQL> alter database open;

Database altered.

启动到open阶段时,oracle会根据控制文件记录的数据文件头块及日志文件信息,然后进行检查点及完整性检查。
假若不存在问题,则可以打开数据库。
反之,存在不一致性或文件丢失,则需要进行恢复。

在open的时候需要进行很多校验。
第一次检查数据文件头块中的checkpoint cnt,这将于控制文件中的checkpoint cnt做对比,看是否一致。用以确认数据文件是来自同一版本,而不是从备份中恢复而来。(checkpoint cnt会一直被修改)

第二次检查数据文件头块的开始scn和控制文件中记录的该文件的结束scn是否一致,如果控制文件中记录的结束scn等于数据文件头块开始的scn,则不需要对那个文件进行恢复。(如果此前异常宕机,则结束scn会变成无穷大,数据库必须执行实例恢复以确保一致性)

最后打开数据库,锁定数据文件,同时将每个数据文件的结束scn设置为无穷大。

如果无法锁定某数据文件,则会直接返回error,数据库将停止打开。
此时会将完整的错误信息和错误号写入告警日志中。

优先检查alert_.log,位置可以通过:
show parameter background_dumo_dest来查询。




关闭

数据库的关闭实际上是启动的逆操作,也可以分为三个阶段:
close(关闭数据库到mount)
dismount(卸载数据库到nomount)
shutdown(关闭实例)


在shutdown关闭数据库时,还有几个可选参数:
shutdown (默认为normal)
shutdown immediate
shutdown transactional
shutdown abort

normal:
拒绝任何新的会话连接,并等待所有会话断开。
此方法不常用,因为需要所有的用户连接断开才能关闭。

immediate:
拒绝任何新的会话连接,并将所有正在被处理的事务中断,未提交的事务回滚。
强行断开所有连接,执行检查点,将变更数据写入数据文件。
此方法常用,但在系统繁忙的时候,有大量事务或大事务执行时,关闭也需要大量时间。

transactional:
拒绝任何新的会话连接,等待未完成的事务完成,拒绝新的事务缠身。
待所有活动事务完成之后,关闭过程和immediate一致。

abort:
立刻终止所有用户连接、所有事务、立即关闭数据库。
后果:未完成的事务不会回滚,不执行检查点。
在下一次启动数据库时,数据库必须进行实例恢复,可能需要更大的等待时间。

其效果类似于服务器突然断电,可能会导致出现不一致的情况。

(摘自深入解析oracle)
以下场景需要使用abort来关闭:
数据库或应用异常,其他方式无法关闭数据库。
因为马上要到来的断电或其他维护情况,需要快速关闭数据库。
启动异常后需要重新尝试启动
当使用shutdown immediate无法关闭时
需要快速重新启动数据库
shutdown超时或异常

     
abort之后重启数据库需要进行恢复。
启动时间有时会很长,如果时间允许,可以在关闭之前执行一次:
alter system checkpoint
这样可以再下次启动恢复时,需要恢复的数据可以减少。

在通过其他三种方式关闭的过程中,如果等待时间超过1h,则会抛出:(可能因为个别事务或进程阻塞)
ORA-01013: user requested cancel of current operation


此外,在关闭过程中,用户发出ctrl+c则关闭也会被取消。

无论是ctrl+c或是等待超时,都会使数据库进入两种状态之一:
可能会正常,可以继续运行。
也可能会无法正常运行,进入未知状态。

abort、immediate、transactional、normal四种参数比较:






图摘自Eygle Gai


p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 13.0px 'Helvetica Neue'}

作者公众号(持续更新)


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

请登录后发表评论 登录
全部评论
微信公众号:神谕的暗影长廊

注册时间:2014-07-28

  • 博文量
    161
  • 访问量
    1195299