Oracle启动数据库过程中实例与线程思考
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Oracle启动数据库过程中实例与线程思考,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4849字,纯文字阅读大概需要7分钟。
内容图文
![Oracle启动数据库过程中实例与线程思考](/upload/InfoBanner/zyjiaocheng/497/9aa81f379fa44ebfa839e86bda41835a.jpg)
首先Oracle启动阶段nomount,mount,open(其余不作啰嗦)每一个阶段都做了测试和总结
1、数据库关闭阶段(实例状态)
服务 "CLRExtProc" 包含 1 个实例。
实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序.
已连接到空闲例程。
登录之后已连接空闲进程,而且状态未知的,后期查阅资料才知道UNKNOWN状态非自动注册,通过搜索Listener.org里面内容,匹配services之后才进行的注册,在这个文件中不需要配置SID,PMON会自动检测,因为数据库没有启动,所以空闲进程。
2、nomount阶段
SQL> startup nomount;
ORACLE 例程已经启动。
Total System Global Area 1686925312 bytes
Fixed Size 2176368 bytes
Variable Size 1090521744 bytes
Database Buffers 587202560 bytes
Redo Buffers 7024640 bytes
可见数据库大小,变量缓冲区等资源已经启动。我们测试查询一下v$datafile,v$controlfile,v$database.
SQL> select file#,name from v$datafile;
select file#,name from v$datafile
*
第 1 行出现错误:ORA-01507: ??????
SQL> select name from v$controlfile;
未选定行
查询看到nomount阶段没有加载数据文件,可以检测SGA相关。
监听状态查看(实例)
服务 "soujiusubdb" 包含 1 个实例。
实例 "soujiusubdb", 状态 BLOCKED, 包含此服务的 1 个处理程序...
引用:这时候实例已经启动,BLOCKED阻塞的状态,那么Oracle实例应该是操作系统中线程运行,OS阻塞用pritive调用原子操作,由于某事件无法运行,受阻塞。但是nomount阶段多数讲解:只会创建实例,并不加载数据库,Oracle仅为实例创建各种内存结构和服务进程,不会打开任何数据文件。在NoMount模式下,只能访问那些与SGA区相关的数据字典视图,包括V$PARAMETER、V$SGA、V$PROCESS 和 V$SESSION等,这些视图中的信息都是从SGA区中获取的,与数据库无关,系统分配内存、开启后台进程,同时更新alter日志文件。
那么在操作系统的层面是否能这样理解,通过Oracle的nomount命令来创建实例,这时候操作系统会给分配进程或线程去响应请求,Oracle为实例创建内存结构和服务进程,也就是实例具备了必要资源分配,那么此时的线程的状态应该为就绪状态(除了得到CUP之外的资源,获得处理机即可运行),插入就绪队列,但是监听状态为阻塞,也就意味着nomount状态下,实例线程在就绪队列被挂起,不释放CUP(实例当前应该没有获取CPU),调用suspend原子操作,静止就绪(不接受调度)nomount是主动而非被动去阻塞。
3、mount阶段
我们这时候去查看数据文件,日志文件,控制文件都是正常,查看监听实例,这时候实例状态变成了Ready(就绪状态),也就是Oracle在执行mount时候时候调用原语active来唤醒实例线程,变成活动就绪状态。
服务 "CLRExtProc" 包含 1 个实例。
实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "soujiusubdb" 包含 1 个实例。
实例 "soujiusubdb", 状态 READY, 包含此服务的 1 个处理程序...
引用:这种启动模式将为实例加载数据库,但保持数据库为关闭状态。因为加载数据库时需要打开数据库控制文件,但数据文件和重做日志文件都都无法进行读写,所以用户还无法对数据库进行操作。 在Mount模式下,只能访问那些与控制文件相关的数据字典视图,包括V$THREAD、V$CONTROLFILE、V$DATABASE、V$DATAFILE 和 V$LOGFILE等,这些视图都是从控制文件中获取的。 启动条件是需要有控制文件,如果控制文件丢失或者损坏,启动将会报错。此时系统会打开控制文件、检查数据文件、日志文件的名称和位置,但此时不检查文件到底是否存在不存在。
4、open阶段
引用:open阶段,该阶段主要是打开数据文件、日志文件,在打开的过程中对数据文件和日志文件进行一致性检查,如果不一致,则SMON进程继续实例恢复,如果文件丢失,打开失败。
我本以为在此阶段实例状态会就绪变成执行状态,变更open阶段之后,查看监听后发现多出一个服务,但是实例名一样,状态也一样,仍然为就绪状态,Oracle实例线程一直处于就绪状态这一点还没有搞清楚,希望老师们给予解答,解析迷惑。
服务摘要..
服务 "CLRExtProc" 包含 1 个实例。
实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "SOUJIUSUBDBXDB" 包含 1 个实例。
实例 "soujiusubdb", 状态 READY, 包含此服务的 1 个处理程序...
服务 "soujiusubdb" 包含 1 个实例。
实例 "soujiusubdb", 状态 READY, 包含此服务的 1 个处理程序...
数据库关闭,卸载实例,终止实例,几种参数关闭方式需求不同,应用场合不同,但是最后整体一个关闭过程大同小异,希望也能学习到关于关闭数据库时候线程的动作。
Oracle启动数据库过程中实例与线程思考
标签:线程进程 oracle 基础 操作系统 数据库
本文系统来源:http://blog.51cto.com/13352079/2054644
内容总结
以上是互联网集市为您收集整理的Oracle启动数据库过程中实例与线程思考全部内容,希望文章能够帮你解决Oracle启动数据库过程中实例与线程思考所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。