千家信息网

Oracle启动数据库过程中实例与线程思考

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,早期用Linux的时候,看Oracle监听状态和端口只是浏览一下,没有认真看过内容也是英文提示,时隔数载重新捡起Oracle,Windos下CMD查看监听状态发现很多有意思的问题,Oracle实例和线
千家信息网最后更新 2025年02月03日Oracle启动数据库过程中实例与线程思考

早期用Linux的时候,看Oracle监听状态和端口只是浏览一下,没有认真看过内容也是英文提示,时隔数载重新捡起Oracle,Windos下CMD查看监听状态发现很多有意思的问题,Oracle实例和线程很多不懂之处请高手指点


首先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 个处理程序...


数据库关闭,卸载实例,终止实例,几种参数关闭方式需求不同,应用场合不同,但是最后整体一个关闭过程大同小异,希望也能学习到关于关闭数据库时候线程的动作。





实例 状态 文件 数据 服务 数据库 阶段 线程 处理 程序 进程 控制 日志 监听 系统 阻塞 时候 视图 操作系统 内存 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 arm嵌入式软件开发版 石家庄软件开发培训吧 静安区个性化软件开发哪里好 中小学的家庭教育与网络安全 mc服务器设置资源包下载位置 威海联想服务器总代理哪家好 游戏服务器卡顿的危害 明日之后橡树岭服务器的货架 网络安全公司哪家 无线网络安全领域 数据库故障恢复技巧 2008年网络安全事件 数据库三级模式的概念 作用 用什么软件开发远程控制 服务器 860p 网络安全电子数据取证 国家网络安全四川中心曾佐兵 mac连接内网服务器无法连接 苏州园区安卓软件开发 数字化转型与数据库管理 世界最大的服务器是哪家公司 网络安全策略实施原则的是 重庆憨牛科技互联网有限公司 艾利艾互联网科技有限公司 基于构件软件开发方法的缺点 四川新一代软件开发厂家现货 高考学生网络安全 数据库开发技术大报告 江西数字多媒体软件开发 林区一张图数据库
0