oracle

关注公众号 jb51net

关闭
首页 > 数据库 > oracle > Oracle数据库的启动过程

Oracle数据库的启动实现过程

作者:DG0913L

Oracle数据库启动分nomount、mount、open三阶段,各阶段需不同文件并执行特定操作,停库有正常、事务级、立即、强制四种方式,影响数据库状态及数据一致性

1、Oracle 数据库的启动分为三个阶段

shutdown —> nomount —> mount —> open

2、启动数据库到 nomount 阶段

数据库启动到 nomount 阶段时,将启动数据库实例, 读取参数文件,写审计文件和警报日志,不加载数据库。

因此,数据库启动到 nomount 阶段需要有正确的参数文件,需要正确的审计目录(由参数 audit_file_dest 指定)和跟踪文件目录(由 BACKGROUND_DUMP_DEST 参数指定)。

2.1 数据库从关闭状态启动到 nomount 状态会执行如下操作:

2.2 在 nomount 阶段可以进行如下操作

2.3 启动数据库到 nomount 阶段的方法如下

shutdown --> nomount

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup nomount
ORACLE instance started.

Total System Global Area 9395237080 bytes
Fixed Size   12685528 bytes
Variable Size 1543503872 bytes
Database Buffers 7818182656 bytes
Redo Buffers   20865024 bytes
SQL> select status from v$instance;

STATUS
------------------------------------
STARTED

2.4 查看警告日志关于 startup nomount 的信息

SQL> SELECT * FROM v$diag_info a WHERE a.name = 'Diag Trace';
   INST_ID NAME                                                             VALUE                                                                                CON_ID
---------- ---------------------------------------------------------------- -------------------------------------------------------------------------------- ----------
         1 Diag Trace                                                       /app/oracle/diag/rdbms/orcl/orcl/trace                                                    0
[oracle@node1 ~]$ cd /app/oracle/diag/rdbms/orcl/orcl/trace
[oracle@node1 trace]$ cat alert_orcl.log

由于 nomount 状态下数据库没有加载,因此无法访问数据字典。

nomount 状态下参数文件已经加载,可以查看参数。

SQL> select name from v$datafile;
select name from v$datafile
*
ERROR at line 1:
ORA-01507: database not mounted

数据库参数已经加载

SQL> show parameter open_cursor
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     300

3、启动数据库到 mount 阶段

数据库启动到 mount 阶段时,将启动数据库实例,加载控制文件的信息到内存,加载数据库并保持数据库关闭状态。

数据库启动到 mount4 阶段需要有正确的控制文件。

3.1 数据库从nomount状态启动到mount状态

会执行如下操作:

3.2 数据库启动到mount状态

数据库可以进行如下操作:

3.3 启动数据库到mount阶段的方法如下

3.3.1 数据库处于关闭状态(shutdown --> mount)

startup mount;

SQL> shutdown
ORA-01507: database not mounted


ORACLE instance shut down.
SQL> sas
SP2-0042: unknown command "sas" - rest of line ignored.
SQL> select status from v$instance;
select status from v$instance
*
ERROR at line 1:
ORA-01034: ORACLE not available
Process ID: 0
Session ID: 0 Serial number: 0


SQL> startup mount
ORACLE instance started.

Total System Global Area 8002730448 bytes
Fixed Size    8915408 bytes
Variable Size 1308622848 bytes
Database Buffers 6677331968 bytes
Redo Buffers    7860224 bytes
Database mounted.
SQL> select status from v$instance;

STATUS
------------------------------------
MOUNTED

3.3.2 数据库处于 nomount 状态(nomount --> mount)

alter database mount

SQL> select status from v$instance;

STATUS
------------------------------------
STARTED

SQL> alter database mount;

Database altered.

SQL> select status from v$instance;

STATUS
------------------------------------
MOUNTED

数据库启动到 mount 阶段可以访问所有的动态视图:

SQL> select name from v$datafile;
NAME
/app/oracle/oradata/ORCL/system01.dbf
/app/oracle/oradata/ORCL/test01.DBF
/app/oracle/oradata/ORCL/sysaux01.dbf
/app/oracle/oradata/ORCL/undotbs01.dbf
/app/oracle/oradata/ORCL/wms01.DBF
/app/oracle/oradata/ORCL/users01.dbf
6 rows selected.

4、启动数据库到 open 阶段

4.1 数据库从 mount 状态启动到 open 状态会执行如下操作:

4.2 启动数据库到 open 阶段的方法如下:

4.2.1 数据库处于关闭状态(shutdown --> open)

startup

SQL> startup
ORACLE instance started.

Total System Global Area 8002730448 bytes
Fixed Size    8915408 bytes
Variable Size 1308622848 bytes
Database Buffers 6677331968 bytes
Redo Buffers    7860224 bytes
Database mounted.
Database opened.
SQL> select status from v$instance;

STATUS
------------------------------------
OPEN

4.2.2 数据库处于 nomount 状态(nomount --> mount)

alter database mount;

alter database open;

SQL> select status from v$instance;

STATUS
------------------------------------
STARTED

SQL> alter database mount;

Database altered.

SQL> alter database open;

Database altered.

SQL> select status from v$instance;

STATUS
------------------------------------
OPEN

4.2.3 数据库处于 mount 状态(mount --> mount)

alter database open;

SQL> select status from v$instance;

STATUS
------------------------------------
MOUNTED
SQL> alter database open;
Database altered.
SQL> select status from v$instance;

STATUS
------------------------------------
OPEN

5、数据库的停止

5.1停库与启动数据库顺序相反,也分三个步骤:

5.2 关闭的方式有四种

5.2.1 正常停库

数据库正常的关闭方式,以正常停库方式关闭数据库,Oracle 将执行如下操作:

5.2.1.1 正常停库语法

5.2.1.2 正常停库操作

SQL> shutdown
Database closed.
Database dismounted.
ORACLE instance shut down.

 SQL> shutdown normal
Database closed.
Database dismounted.
ORACLE instance shut down.

5.2.2 事务级停库

以事务级停库方式关闭数据库,Oracle 将执行如下操作:

5.2.2.1 事务级停库的语法如下:

shutdown transactional

5.2.2.1 事务级停库的操作

SQL> shutdown transactional
Database closed.
Database dismounted.
ORACLE instance shut down.

5.2.3 立即停库

以立即停库方式关闭数据库,Oracle 将执行如下操作:

5.2.3.1 立即停库的语法如下:

生产库最常用的停库方式

shutdown immediate

5.2.3.2 立即停库的操作

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

5.2.4 强制停库

当数据库出现故障时,如果以上三种方式都无法正常关闭数据库,则使用强制停库。以这种方法停库,Oracle 将执行如下操作:

以强制停库方式停止数据库之后,数据库可能存在脏数据。重启数据库实例时会自动做实例恢复。

5.2.4.1 立即停库的语法如下(生产库不建议操作)

shutdown abort
startup force = shutdown abort + startup
startup force nomount = shutdown abort + startup nomount
startup force mount = shutdown abort + startup mount

5.2.4.1 立即停库的操作

SQL> startup force nomount
ORACLE instance started.

Total System Global Area 8002730448 bytes
Fixed Size    8915408 bytes
Variable Size 1308622848 bytes
Database Buffers 6677331968 bytes
Redo Buffers    7860224 bytes
SQL> select status from v$instance;

STATUS
------------------------------------
STARTED
SQL> alter database mount;

Database altered.

SQL> alter database open;

Database altered.

SQL> shutdown abort
ORACLE instance shut down.

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文