千家信息网

深入剖析Oracle启动过程内部初始化

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,1 Oracle启动选项;Oracle数据库在startup启动时,Oracle将在默认位置$ORACLE_HOME/dbs中查找初始化参数文件;Oracle以下面的顺序在其中寻找合适的初始化文件:S
千家信息网最后更新 2025年02月01日深入剖析Oracle启动过程内部初始化

1 Oracle启动选项;

Oracle数据库在startup启动时,Oracle将在默认位置$ORACLE_HOME/dbs中查找初始化参数文件;Oracle以下面的顺序在其中寻找合适的初始化文件:


Spfile$ORACLE_SID.ora


Spfile.ora


Init$ORACLE_SID.ora

可以用几种方式启动oracle数据库,不同方式启动将影响启动数据库的程度,启动状态由nomount(数据库未装载)-->mount(数据库完成装载)-->open(数据库打开)


1.1 STARTUP NOMOUNT;

SQL> startup nomountORACLE instance started.Total System Global Area 1603411968 bytesFixed Size             2253664 bytesVariable Size               1375734944 bytesDatabase Buffers     218103808 bytesRedo Buffers                   7319552 bytes

Oracle读参数文件,打开实例,启动Oracle后台进程,给Oracle分配SGA。此时数据库状态为未装载。


1.2 ALTER DATABASE MOUNT;

SQL> alter database mount;Database altered.

Oracle 打开并读取控制文件,获取数据文件和重做日志文件的名称和位置。此时数据库完成装载。


1.3 ALTER DATABASE OPEN;

SQL> alter database open;Database altered.

Oracle打开数据文件和重做日志文件,至此Oracle可以对外提供服务。


2 通过10046事件查看内部启动过程

SQL> startup nomount;Total System Global Area 1603411968 bytesFixed Size             2253664 bytesVariable Size               1375734944 bytesDatabase Buffers     218103808 bytesRedo Buffers                   7319552 bytesSQL> oradebug setmypidStatement processed.SQL> oradebug tracefile_name/oracle/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_3682.trcSQL> alter session set events'10046 trace name context forever,level 12';Session altered.SQL> alter database mount;Database altered.SQL> alter database open;Database altered.

查看udump文件

[oracle@rhel6 ~]$ more /oracle/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_3682.trc
Trace file /oracle/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_3682.trcOracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsORACLE_HOME = /oracle/app/oracle/product/11.2.0System name:    LinuxNode name:      rhel6Release:        2.6.32-431.el6.x86_64Version:        #1 SMP Sun Nov 10 22:19:54 EST 2013Machine:        x86_64VM name:        VMWare Version: 6Instance name: orcl

Oracle数据库mount启动读取控制文件,写日志文件

...WAIT #140528657591192: nam='control file sequential read' ela= 8 file#=0 block#=1 blocks=1 obj#=-1 tim=1502627703012561WAIT #140528657591192: nam='control file sequential read' ela= 2 file#=1 block#=1 blocks=1 obj#=-1 tim=1502627703012583WAIT #140528657591192: nam='control file sequential read' ela= 47 file#=0 block#=3 blocks=8 obj#=-1 tim=1502627703012650WAIT #140528657591192: nam='control file sequential read' ela= 13 file#=1 block#=3 blocks=8 obj#=-1 tim=1502627703012674...WAIT #140528657591192: nam='ADR block file read' ela= 847  =0  =0  =0 obj#=-1 tim=1502627707123048WAIT #140528657591192: nam='ADR block file read' ela= 576  =0  =0  =0 obj#=-1 tim=1502627707124068WAIT #140528657591192: nam='ADR block file read' ela= 562  =0  =0  =0 obj#=-1 tim=1502627707125013WAIT #140528657591192: nam='ADR block file read' ela= 473  =0  =0  =0 obj#=-1 tim=1502627707125891...

Oracle数据库open过程读取控制文件信息,与读取磁盘数据文件头部进行对比

alter database openEND OF STMTPARSE #140528657591192:c=0,e=274,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=0,tim=1502627713479605WAIT #140528657591192: nam='control file sequential read' ela= 8 file#=0 block#=1 blocks=1 obj#=-1 tim=1502627713479904WAIT #140528657591192: nam='control file sequential read' ela= 4 file#=1 block#=1 blocks=1 obj#=-1 tim=1502627713479922WAIT #140528657591192: nam='control file sequential read' ela= 2 file#=0 block#=15 blocks=1 obj#=-1 tim=1502627713479931...WAIT #140528657591192: nam='Disk file operations I/O' ela= 11 FileOperation=2 fileno=1 filetype=2 obj#=-1 tim=1502627713481300WAIT #140528657591192: nam='Disk file operations I/O' ela= 6 FileOperation=2 fileno=2 filetype=2 obj#=-1 tim=1502627713481317WAIT #140528657591192: nam='Disk file operations I/O' ela= 4 FileOperation=2 fileno=3 filetype=2 obj#=-1 tim=1502627713481327WAIT #140528657591192: nam='Disk file operations I/O' ela= 4 FileOperation=2 fileno=4 filetype=2 obj#=-1 tim=1502627713481338WAIT #140528657591192: nam='Disk file operations I/O' ela= 5 FileOperation=2 fileno=201 filetype=2 obj#=-1 tim=1502627713481351


0