我是靠谱客的博主 大胆月饼,最近开发中收集的这篇文章主要介绍Oracle数据库启动过程及状态详解(nomount、mount和open),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述


先来简要了解一下Oracle数据库体系架构以便于后面深入理解,Oracle Server主要由实例(instance)数据库(database)组成。实例(instance)共享内存(SGA)后台进程系统组成,数据库(database)是存储在磁盘上的一系列物理文件。

oracle-system

SGA主要由Share Pool(共享池,又分Library Cache和Data Dictionary Cache,前者临时存储最近执行过的语句代码等,后者临时存储数据位置、表定义及用户权限等)、Database Buffer Cache(数据缓冲区,临时存储读过的数据块)、Redo Log Buffer(重做日志缓冲区,临时存储数据库修改操作)、Large Pool(大池,分担Share Pool部分工作供共享服务器进程使用,如备份恢复、大型I/O操作、并行查询等)和Java Pool(Java池,分析Java语句)。

后台进程是数据库和操作系统进行交互的通道,后台进程的命名由ORACLE_SID决定,ORACLE根据ORACLE_SID来寻找参数文件启动实例。是Oracle数据库为保持最佳性能和协调多用户请求而设置的,主要有DBWR(将Database Buffer Cache数据写入Data Files)、LGWR(将Redo Log Buffer数据写入Redo Log Files)、CKPT(协调数据文件、控制文件和重做日志,将System Change Number即SCN写入到控制文件和数据文件头部,促使DBWR、LGWR执行)、SMON(System Monitor,3方面作用:instance recovery实例故障数据恢复、合并空闲碎片空间、回收临时段)、PMON(用户例程意外终止时处理事务,如回退事务、释放锁及其他资源等)、ARCH(将Redo Log Files写入Archive Log Files)、CJQ0(job queue coordinator)、RVWR(recover writer,为flashback database提供日志记录)等进程。

数据库(database)是指存储在磁盘上的一组物理文件,如数据文件(Data files,用于存储数据)、控制文件(Control files,存储数据文件、重做日志文件、归档日志文件位置及维护数据库完整性所需信息)和重做日志文件(Redo Log files,存储修改数据的所有操作记录以备故障后恢复),这三个是启动数据库必须的文件;另外还有参数文件(Parameter file,设置内存后台进程的启动等)、归档日志文件(Archived Log files,归档记录写满的重做日志文件的内容)和口令文件(Password file,验证用户名密码),这三个是非必须的文件。

Oracle启动分3个过程nomount、mount和open,这三个过程具体执行的工作如下:

nomount状态:启动实例。

Reading the initialization file from $ORACLE_HOME/dbs in the following order:

从环境变量下dbs目录按如下顺序读取初始化文件:

-first  spfileSID.ora

首先,读取spfile+实例名.ora

-if not found then, spfile.ora

若未发现文件则读取spfile.ora

-if not found then, initSID.ora

若未发现文件则读取init+实例名.ora

Specifying the PFILE parameter with STARTUP overrides the default behavior.

指定pfile参数文件启动以替代默认启动方式

*  Allocating the SGA

分配SGA

*  Starting the background processes

启动后台进程

*  Opening the alertSID.log file and the trace files

启动预警日志文件(记录实例生命周期内事件,如系统内部错误、数据块损坏、系统参数修改等)和追踪文件(记录SQL操作及时间消耗等)

The database must be named with the DB_NAME parameter either in the initialization Parameter file or in the STARTUP command.

数据库必须用初始参数文件或启动命令中的DB_NAME参数命名。

mount状态:关联实例与数据库,读取控制文件并获取数据文件和重做日志文件名称状态。

Mounting a database includes the following tasks:

装载数据库包括以下任务:

* Associating a database with a previously started instance

将先前启动的实例与数据库相关联

* Locating and opening the control files specified in the parameter file

从参数文件中找到控制文件位置并打开

* Reading the control files to obtain the names and status of the data files and online redo log files.However,no checks are performed to verify the existence of the data files and online redo log files at this time.

从控制文件中读取数据文件及重做日志文件名称与状态,但是,此时并不检查数据文件与重做日志文件的存在性。

open状态

opening the database includes the following tasks:

打开数据库包含以下任务:

opening the online data log files

打开数据文件

opening the onling redo log files

打开重做日志文件

If any of the datafiles or noline redo log files are not present when you attempt to open the database ,the oracle server returns an error.

若在打开数据库时数据文件或重做日志文件任何一个不存在,则Oracle服务器返回一个错误。

During this final stage,the oracle server verfies that all the data files and online redo log files can be opened and checks the consistency of the database. If necessary,the SMON background process initiates instance recovery.

在最后阶段,Oracle数据库验证数据文件和重做日志文件可否打开并检验数据库的一致性,若不一致,SMON后台进程将启动实例恢复。

shutdown或startup状态可执行的操作:

shutdown有四个参数:normal、transactional、immediate、abort,不带参数默认为normal。

shutdown normal:不断开现在连接用户,阻止任何用户建立新的连接,包括管理员在内。已经连接的用户能够继续他们当前的工作,如递交新的更新事务,直到此用户自行断开连接。这样需要等待的时间长,可以查出现连用户,再通知其自行断开。所有的用户都断开连接,数据库才进行关闭操作,即关闭数据库、卸载数据库、终止例程。在这种情况下关闭的数据库在重新启动后,不会出现问题。启动时不需要实例恢复。

shutdown transactional:阻止任何用户建立新连接,等待所有当前连接用户的未递交的活动事务提交完毕,然后立即断开用户的连接。所有的用户都断开连接则立即关闭数据库,进行关闭数据库、卸载数据库、终止进程等操作。这种方式,用户有可能正在算账,做复杂报表!一次数据库操作做不完的,在刚做了一次数据库操作后,将被断开,这样对用户有一定影响,启动时不需要实例恢复。

shutdown immediate:阻止任何用户新的连接,同时限制当前连接用户开始新的事务。如果已连接用户有未完成的事务,则数据库系统不会等待他们完成,而是直接把当前未递交的事务回退。数据库系统不再等待用户主动断开连接,当未递交的事务回退成功后,系统会直接关闭、卸载数据库,并终止数据库进程,启动时不需要实例恢复。

shutdown abort:当数据库出现故障时,可能以上三种方式都无法正常关闭数据库,则使用这种方法。强制结束当前正在执行的SQL语句,任何未递交的事务都不被回退!这种方法基本上不会对控制文件或者参数文件造成破坏,这比强制关机要好一点(在无法正常关闭数据库的时候),启动时自动进行实例恢复。

startup有7个参数:nomount、mount、open、pfile、force、restrict和

startup nomount:通过参数文件,分配sga,启动数据库后台进程,不打开控制文件和数据文件,不能访问数据库。

startup mount:仅给dba进行管理操作,不允许数据库用户访问。仅当前实例的控制文件被打开,数据文件未打开,在这个模式下可以进行如下操作:重命名数据文件、添加取消或重命名重做日志文件、设置归档模式、设置闪回、执行完整的数据库恢复操作等。

startup open:startup的默认参数就是open,打开数据库,允许数据库的访问,当前实例控制文件中所描述的所有文件都已经打开。

startup pfile=FILENAME:以FILENAME为初始化文件启动数据库,不是采用默认初始化文件。

startup force:中止当前数据库的运行,并开始重新正常的启动数据库。

startup restrict:只允许具有restricted session权限的用户访问数据库,该模式下登陆者可做如下操作:执行数据库数据的导出或导入、执行数据装载操作用SQL*Loader、暂时阻止一般的用户使用数据、在某个移植过程和升级操作过程中restricted session登陆后可使用ALTER SYSTEM 语句来禁止RESTRICTED SESSION特性ALTER SYSTEM DISABLE RESTRICTED SESSION;如果是在非受限模式下打开的数据库,后来发现需要限制访问,此时可以使用带ENABLE RESTRICTED SESSION 子句的ALTER SYSTEM 语句来完成。

startup recover:数据库启动,并开始介质恢复。

最后

以上就是大胆月饼为你收集整理的Oracle数据库启动过程及状态详解(nomount、mount和open)的全部内容,希望文章能够帮你解决Oracle数据库启动过程及状态详解(nomount、mount和open)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部