本文内容
- 服务器环境
- 客户端环境
- 概述
- 启动数据库
- 关闭数据库
- 补充
- 参考资料
本文说明 Oracle 数据库的启动和关闭,内容虽然基础,但是在数据库很多操作中都需要,因此,基础而重要,必须深入理解。比如,何种情况应该使用何种数据库加载模式,以及数据库文件打开模式。
服务器环境
- Windows 2003 R2
- Oracle11g 32位
客户端环境
- Windows 2008R2
- Oracle 11g 32位客户端
概述
若用 startup 命令启动数据库,执行的操作要经历三个不同的阶段:
- 实例启动(instance startup)
- 数据库加载(database mount)
- 数据库打开(database open)
实例启动(instance startup),在这个阶段,Oracle 分析数据库参数文件,并通过设法获得实例锁来确定实例还未运行。随后,Oracle 启动多种不同的数据库进程,如 DBWn 和 LGWR 进程。Oracle 还将分配SGA所需的内存。一旦启动了实例,Oracle 会向启动实例的用户报告后台进程已经启动了实例。
数据库加载(加载启动),在加载阶段,Oracle 打开数据库控制文件。成功打开控制文件后,Oracle 从这个控制文件中析取数据库数据文件名,为打开这些数据库文件做准备。需要注意的是,这个时候,Oracle 不会检查这些数据文件是否存在,而只是从控制文件中标识数据文件的位置。完成这个步骤后,Oracle 向用户报告已经加载了数据库。
数据库打开,Oracle 将继续启动进程并设法打开数据库。在数据库打开阶段,Oracle 验证数据库文件是否存在,并打开这些文件。Oracle 打开数据文件时会检查数据文件头,并且比较这些文件头中的 SCN 信息和控制文件中存储的 SCN(SCN 是跟踪数据库状态的 Oracle 方法)。
Oracle 设法打开数据库时,会检查每个数据文件和数据库控制文件中的 SCN。如果 SCN 相同,并且位映射标记设置正确,则认为这个数据库是一致的,即可打开和使用数据库。如果 SCN 不相同,则 Oracle 会自动执行灾难或实例恢复。如果联机重做日志文件中存在生成一致的映像所需要的重做,就会发生灾难或实例恢复。如果由于数据文件损坏或由于恢复需要的重做不在联机重做日志中而不能执行灾难或实例恢复,Oracle 会要求 DBA 执行介质恢复。介质恢复需要从一个数据库备份中恢复一个或多个数据库数据文件,与实例恢复不同的是,介质恢复是一个手动执行的进程。
与启动对应是关闭 shutdown 命令,关闭卸载数据库,执行与 startup 相反的操作。
下面本例,启动或关闭数据库都在服务器上进行。
启动数据库
图 1 启动数据库
关闭数据库
图 2 关闭数据库
先关闭数据库,再启动。
补充
Startup 有几种不同的变体,这些变体包括:
- Startup:使Oracle经历三个启动阶段。
- Startup restrict:使Oracle经历三个启动阶段,并已限制模式打开数据库。只有具有限定权限的用户才能访问数据库。
- Startup nomount:在成功启动数据库实例后,停止启动进程。通常在创建数据库之前,使用该命令来启动数据库实例。如果需要重新创建控制文件,使用这条命令也很方便。需要注意的是,为了在给定数据库中使用RMAN,必须能够使用startup nomount命令成功启动实例。
- Startup mount:在成功启动数据库实例,并加载数据库后,停止启动进程。如果需要恢复system表空间,这个命令很有用。
- Startup read only:使Oracle数据库(或备用数据库)以read only模式打开。这样,不支持DML操作,但可以查询数据库。如果正在执行时间点恢复操作,并且希望确保在使用resetlogs命令提交数据库实例之前,将数据库恢复到当前的时间点,这个命令很有用。
- Startup force:与shutdown abort命令(接下来说明)一起关闭数据库。Startup force命令后面可以再加上数据库的打开模式。示例如下:
Startup force restrict
Startup force mount
Startup force nomount
换句话说,Startup 命令后面是可以加上数据库加载模式命令;加载模式命令后面,还加上数据库打开模式。
Shutdown命令有如下形式:
- Shutdown(以及shutdown normal):使Oracle等待直至所有用户进程与数据库断开连接。所有进程断开连接后,数据库将完全闭关。这个命令可以避免实例恢复。执行后,任何新用户进程都不能连接到数据库。
- Shutdown immediate:清除所有存在的用户回话,并且回滚所有未提交的事务。这个命令可以避免实例恢复。执行后,任何新用户进程都不能连接到数据库。
- Shutdown abort:通常会使数据库奔溃。这个命令要求实例恢复(而不是介质恢复)。执行后,任何新用户进程都不能连接到数据库。
- Shutdown transactional:使Oracle等待所有用户进程提交当前事务,再断开这些用户进程并关闭数据库。在等待完成这些事务的期间,任何新用户回话都不能连接到数据库。
Shutdown immediate 一般比较常用,而 Shutdown 往往关闭数据库很慢~