oracle 启动
Oracle数据库启动过程及状态详解(nomount、mount和open)
先来简要了解一下Oracle数据库体系架构以便于后面深入理解,Oracle Server主要由实例(instance)和数据库(database)组成。实例(instance)由共享内存(SGA)和后台进程系统组成,数据库(database)是存储在磁盘上的一系列物理文件。
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 启动的更多相关文章
- Oracle启动报错ORA-27102解决
环境:RHEL5.5 + Oracle 10.2.0.4 此错误一般是因为数据库的初始化参数文件的内存设置不当导致.本例是因为操作系统参数设置问题导致. 当前现象:Oracle启动报错ORA-2710 ...
- Oracle 启动状态解说
oracle 启动状态由nomount-mount-open 一. nomount状态下操作 08:09:49 idle> startup nomount; ORACLE instance st ...
- oracle启动,提示“LRM-00109: could not open parameter file”
转载自 http://blog.sina.com.cn/s/blog_53e731b70101liku.html oracle启动,提示“LRM-00109: could not open par ...
- oracle 启动三步骤
oracle 启动三步骤 oracle启动会经过三个过程,分别是nomount.mount.open 一.nomount 阶段 nomount 阶段,可以看到实例已经启动.oracle进程会根据参数文 ...
- oracle启动服务和监听
1.故障问题:tomcat显示启动oracle数据库失败,数据库服务启动正常 操作1:重启tomcat查看错误信息 2:重启数据库服务 命令: (1) 启动Oracle服务 C:\Users\Admi ...
- Oracle启动和归档模式
数据库运行 Oracle数据库的完整启动过程是分步骤完成的,包含以下3个步骤: 启动实例–>加载数据库–>打开数据库 因为Oracle数据库启动过程中不同的阶段可以对数据库进行不同的维护操 ...
- Oracle 启动实例(instance)、打开数据库
Oracle启动实例(instance).打开数据库 by:授客 QQ:1033553122 启动实例(instance).打开数据库 1.开启sqlplus [laiyu@localhost ~ ...
- ORA-01078和LRM-00109问题导致ORACLE启动失败解决方法
操作环境 SuSE11sp3 + ORACLE11gR2(11.2.0.3) 问题现象 新安装的ORACLE启动失败,提示ORA-01078和LRM-00109错误.具体错误现象如下 SQL> ...
- Oracle启动两个监听
接上篇:Oracle服务器修改IP后 Oracle服务器更换IP后,办公网络里面可以正常访问了,外地的同事,连了vpn 也可以访问,以为可以收工回家,突然又有同事过来说,机房的服务器ping不通新的i ...
- LINUX ORACLE 启动与关闭
1.环境变量 如果没有配置环境变量的要配置哟,已配置就不用配置了! export ORACLE_BASE=/home/oracle/app export ORACLE_HOME=$ORACLE_BAS ...
随机推荐
- char、vchar、nvarchar 的区别
Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示 如果还为了这个纠结,就直接看看后面的解说,做决定吧. 一般如果用到中文或者其 ...
- 【Flutter】Demo1一个名字生成器
根据官网的例子敲的~效果还是很棒的! 首先导入一个第三方包,可以用来随机生成单词组合 在 pubsepec.yaml下添加如下语句 dependencies: flutter: sdk: flutte ...
- 导航贴 | IT Crypt 密码学优秀博文
Base64编码: 什么是Base64? 一篇文章彻底弄懂Base64编码原理 Morse密码: 看似神秘,实则简单的装逼利器-摩斯密码 Bacon 密码: 密码学笔记 -- 培根密码 RSA 加密: ...
- 吴裕雄--天生自然 R语言开发学习:模块\包的安装命令
install.packages('模块包名称') 或者 install.packages('模块包名称',repos='http://cran.us.r-project.org')
- 怎么在IDEA中给方法添加分割线?
方法中间分割不清晰 怎么在IDEA中给方法添加分割线呢? 效果如图 方法上有一条分割线,比较明了 按照下列顺序点击修改设置即可 File→Settings→Editor→General→Appeara ...
- 使用Scanner类
import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { ...
- ubuntu更改mysql配置文件,使其产生日志文件mysql.log
1.打开mysql配置文件,将68,69行的注释取消掉,保存关闭 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 2.重启mysql服务 sudo servic ...
- afl-fuzz技术初探
afl-fuzz技术初探 转载请注明出处:http://www.cnblogs.com/WangAoBo/p/8280352.html 参考了: http://pwn4.fun/2017/09/21/ ...
- Redis是什么? —— Redis实战经验
REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo编写的开源的.基于键值对的缓存与存储系统,它具有以下特点: 1. 高性能 Redis具有 ...
- 基于EFCore3.0+Dapper 封装Repository
Wei.Repository 基于EFCore3.0+Dapper 封装Repository,实现UnitOfWork,提供基本的CURD操作,可直接注入泛型Repository,也可以继承Repos ...