Oracle数据库的启动实现过程

 更新时间:2025年08月29日 09:36:36   作者:DG0913L  
Oracle数据库启动分nomount、mount、open三阶段,各阶段需不同文件并执行特定操作,停库有正常、事务级、立即、强制四种方式,影响数据库状态及数据一致性

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

shutdown —> nomount —> mount —> open

2、启动数据库到 nomount 阶段

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

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

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

  • (1)按如下顺序读取初始化参数文件:spfile.ora —> spfile.ora —> init.ora
  • (2)分配SGA、启动后台进程;
  • (3)启动警报日志文件(alert_.log)和跟踪文件。

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

  • (1)可以修改参数;
  • (2)可以查看内存和后台进程的信息;
  • (3)可以创建数据库;
  • (4)可以重建控制文件。

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状态

会执行如下操作:

  • (1)将先前启动的实例与数据库相关联;
  • (2)根据参数文件中保存的控制文件的位置找到控制文件并打开;
  • (3)从控制文件中读取数据文件及联机日志文件的位置与名称。(此时并不检查数据文件与联机日志文件是否存在)。

3.2 数据库启动到mount状态

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

  • (1)可以备份、还原、恢复;
  • (2)可以查看所有的动态视图;
  • (3)可以移动数据库文件;
  • (4)可以进行数据库文件的offline;
  • (5)可以打开和关闭归档模式;
  • (6)可以打开和关闭闪回数据库的功能。

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 阶段

  • 数据库启动到 open 阶段时,将启动数据库实例,加载联机日志和数据文件并打开数据库。
  • 数据库启动到 open 阶段需要有正确的数据文件和联机日志文件。
  • 数据库处于 open 状态时可以对数据库进行所有正常的操作。

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

  • (1)打开数据文件;
  • (2)打开联机日志文件(打开数据库时如果数据文件或联机日志文件中的任何一个不存在,会出现错误);
  • (3)Oracle 数据库验证数据文件和联机日志文件是否能够打开,并检验数据库的一致性。如果不一致,SMON 后台进程将启动实例恢复。

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停库与启动数据库顺序相反,也分三个步骤:

  • (1)关闭数据库(关闭数据文件);
  • (2)卸载数据库(关闭控制文件, DISMOUNT);
  • (3)关闭 Oracle 实例(SHUTDOWN)。

5.2 关闭的方式有四种

5.2.1 正常停库

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

  • (1)阻止任何用户建立新的连接;
  • (2)等待查询结束;
  • (3)等待事务结束;
  • (4)产生检查点(数据同步);
  • (5)关闭联机日志和数据文件;
  • (6)关闭控制文件;
  • (7)关闭数据库实例。

5.2.1.1 正常停库语法

  • shutdown normal
  • shutdown

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 将执行如下操作:

  • (1)阻止任何用户建立新的连接;
  • (2)查询直接终止;(正常停库等待查询结束)
  • (3)等待事务结束;
  • (4)产生检查点(数据同步);
  • (5)关闭联机日志和数据文件;
  • (6)关闭控制文件;
  • (7)关闭数据库实例。

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 将执行如下操作:

  • (1)阻止任何用户建立新的连接;
  • (2)查询直接终止;
  • (3)中断当前事务,回滚未提交事务;
  • (4)产生检查点(数据同步);
  • (5)关闭联机日志和数据文件;
  • (6)关闭控制文件;
  • (7)关闭数据库实例。

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 将执行如下操作:

  • (1)强制结束当前正在执行的SQL语句;
  • (2)任何未递交的事务都不被回退!

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

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.

总结

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

相关文章

  • Oracle中大对象(LOB)处理方法

    Oracle中大对象(LOB)处理方法

    这篇文章介绍了Oracle中大对象(LOB)的处理方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • Oracle中dblink的实际应用示例详解

    Oracle中dblink的实际应用示例详解

    DBLink的作用是在局域网内,通过一台服务器上面的数据库访问另外一台服务器上面数据库的功能。下面这篇文章主要给大家介绍了关于Oracle中dblink实际应用的相关资料,文中通过示例代码介绍的非常详细,需要的朋友们下面来一起看看吧。
    2017-09-09
  • oracle SQL递归的使用详解

    oracle SQL递归的使用详解

    本篇文章是对oracle SQL递归的使用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Oracle 多行记录合并/连接/聚合字符串的几种方法

    Oracle 多行记录合并/连接/聚合字符串的几种方法

    怎么合并多行记录的字符串,一直是oracle新手喜欢问的SQL问题之一,关于这个问题的帖子我看过不下30个了,现在就对这个问题,进行一个总结。
    2009-11-11
  • Oracle 查看表空间的大小及使用情况sql语句

    Oracle 查看表空间的大小及使用情况sql语句

    表空间使用情况包括:查看表空间的名称及大小/查看表空间物理文件的名称及大小/查看回滚段名称及大小等等感兴趣的你可以参考下本文
    2013-03-03
  • oracle 10g 精简版安装步骤分享

    oracle 10g 精简版安装步骤分享

    今天遇到个软件要求安装oracle client端,于是考虑装精简版本的,以下是具体的安装步骤,特分享下,方便需要的朋友
    2014-06-06
  • Oracle特有的DECODE函数的使用

    Oracle特有的DECODE函数的使用

    Oracle中的DECODE函数是一种条件表达式函数,本文主要介绍了Oracle特有的DECODE函数的使用,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • 通过PLSQL Developer创建Database link,DBMS_Job,Procedure,实现Oracle跨库传输数据的方法(推荐)

    通过PLSQL Developer创建Database link,DBMS_Job,Procedure,实现Oracle

    这篇文章主要介绍了通过PLSQL Developer创建Database link,DBMS_Job,Procedure,实现Oracle跨库传输数据,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • oracle中add_months()函数及用法总结

    oracle中add_months()函数及用法总结

    这篇文章主要介绍了oracle中add_months()函数及用法总结,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • Oracle12c的数据库向11g导进的方法

    Oracle12c的数据库向11g导进的方法

    这篇文章主要介绍了 Oracle12c的数据库向11g导进的方法的相关资料,需要的朋友可以参考下
    2016-03-03

最新评论