Oracle 数据库的启动需要三个步骤,当我们直接输入Startup进行启动时,实际上数据库已经隐含的将三个步骤一起执行。
而实际上,Oracle的启动过程包括了启动例程,装载数据库,打开数据库。每完成一个步骤,数据库就进入了一个特定的环境,以保证数据库进入了某种一致性的状态。
本文即是对这三个步骤中需要打开的文件,以及各个步骤执行后的数据库状态进行简单的实验。我们在每一个步骤执行时,通过alert_orcl.log观察每个步骤oracle所做的工作
1.启动例程
每一个启动的数据库,至少要对应一个例程。它是由一组逻辑内存结构和后台进程组成的。
当数据库启动时,这些内存结构和后台进程得到分配,初始化,和启动。
oracle数据在这一步骤中,只会读取参数文件的内容,只是为例程创建各种逻辑内存结构和后台服务进程。此时数据库还不能使用数据库中的任何文件。
SQL> startup nomount
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218968 bytes
Variable Size 83887720 bytes
Database Buffers 192937984 bytes
Redo Buffers 7168000 bytes
我们通过人为的移除初始化参数文件,测试在每一个步骤中都用到了那些文件:
首先重命名初始化文件(数据库启动失败)
:[oracle@myhost dbs]$ mv spfileorcl.ora spfileorcl.ora.bak
SQL> startup nomount
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/u01/app/oracle/product/10.2.0/db_1/dbs/initorcl.ora'
重命名控制文件(数据库启动没有受影响):
[oracle@myhost orcl]$ mv control01.ctl control01.ctl.bak
[oracle@myhost orcl]$ mv control02.ctl control02.ctl.bak
[oracle@myhost orcl]$ mv control03.ctl control03.ctl.bak
SQL> startup nomount
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218968 bytes
Variable Size 83887720 bytes
Database Buffers 192937984 bytes
Redo Buffers 7168000 bytes
2.装载数据库
在启动实例所用到的参数文件中,记录了控制文件的相关位置和存储信息。当数据库在启动过程中试图装载数据库时,会按照这个路径找到控制文件,并打开。
控制文件中记录着数据库的名称,数据文件的位置和名称等数据库物理结构方面的信息。此时数据库会去读取这些信息,但是并不打开数据文件,只是为了打开数据文件做准备。
在装载数据库时,系统不会去打开数据文件和重做日志文件。此时数据库仍然处于关闭的状态。
在这一状态下,数据库管理员可以进行如下的操作:
1、对数据库的数据文件进行重命名。
2、维护重做日志文件。如添加、删除日志文件或者更改日志文件的名字。
3、执行数据库的完全恢复操作
4、改变数据库的归档
3.打开数据库
在打开数据库的过程中,例程会根据控制文件中的信息找到对应的重做日志文件,数据文件等等。
只要控制文件中列出的任何一个重做日志文件或者数据文件损坏的话,都无法正常打开数据库。只有在打开数据库的时候,系统才会真正的去查看这些文件是否可用。
此时的数据文件,日志文件都处于打开状态,管理员无法对这些文件进行维护操作。