首页 > 代码库 > Oracle启动和关闭

Oracle启动和关闭

 
1 数据库启动
 
1.1 需要的权限
SYSDBA或者SYSOPER系统权限。
 
1.2 启动的方法
  • SQL*Plus STARTUP command
  • Oracle Enterprise Manager (Enterprise Manager)
  • SRVCTL utility
 
1.3 启动的过程
启动主要分为三个步骤:
1)启动数据库到Nomount状态
2)启动数据库到Mount状态
3)启动数据库到Open状态
 技术分享
 
1.3.1 启动到Nomount
Nomount的过程实质上是创建数据库实例的过程。这个过程在后台是启动Oracle可执行程序的过程,Windows上是执行oracle.exe文件进行初始化,在Unix/Linux上是执行$ORACLE_HOME/bin/oracle可执行文件进行初始化。
 
主要的步骤:
1)根据ORACLE_SID到缺省目录下查找参数文件。若在启动时指定了参数文件,则会查找指定的参数文件。
2)读取参数文件中的初始化参数。
3)基于初始化参数分配SGA。
4)依次启动Oracle后台进程。
5)打开告警日志和跟踪文件。
 
可用下面的命令启动到nomount:
startup nomount [PFILE=filename]
 
此时可通过动态性能视图v$instance,查看实例状态:
SQL> select status from v$instance;
 
STATUS
------------
STARTED
 
参数文件的缺省目录:
Windows缺省目录为 $ORACLE_HOME\database
Unix/Linux 下缺省目录为$ORACLE_HOME/dbs
 
查找参数文件的顺序:
spfile<ORACLE_SID>.ora  --> spfile.ora  -->  init<ORACLE_SID>.ora
 
实例启动的最小参数需求:
db_name
 
查询后台进程信息:
select addr,pid,spid,username,program from v$process;
 
告警日志位置:
在ORACLE 10g中,BACKGROUND_DUMP_DEST参数确定了告警日志的位置,但是告警日志的文件名无法修改,告警日志的名称为:alert_<SID>.log ,其中<SID>是实例的名称。
从ORACLE 11g开始,告警日志文件的位置有了变化。主要是因为引入了ADR(Automatic Diagnostic Repository:一个存放数据库诊断日志、跟踪文件的目录),关于ADR对应的目录位置可以通过查看v$diag_info系统视图。告警日志存放在Diag Trace目录下。
 
1.3.2 启动到Mount
Oracle根据参数文件中control_files参数的值,找到控制文件,并且根据控制文件中记录的数据文件位置进行数据文件的存在性判断。
 
将数据库启动到mount的命令:
startup mount [PFILE=filename]
 
将数据库由nomount转换到mount状态:
alter database mount;
 
通常在Linux/Unix平台下,在$ORACLE_HOME/dbs目录下,还会存在另外一个文件,该文件命名规则为lk<ORACLE_SID>,lk指lock。该文件在数据库mount时创建,用于操作系统对数据库的锁定。当数据库启动时获得锁定,数据库关闭时释放。
用下面的命令可以查看该文件的锁定信息:
$ fuser -u $ORACLE_HOME/dbs/lkFSDB
/u01/app/oracle/product/11.2.0/dbhome_1/dbs/lkFSDB: 15228(oracle) 15230(oracle) 15236(oracle) 15240(oracle) 15244(oracle) 15246(oracle) 15248(oracle) 15250(oracle) 15252(oracle) 15254(oracle) 15256(oracle) 15258(oracle)
 
1.3.3 启动到Open
控制文件中记录了数据库中数据文件、日志文件的位置信息,检查点信息等重要信息,在数据库的Open阶段,Oracle根据控制文件中记录的这些信息找到这些文件,然后进行检查点及完整性检查。如果不存在问题就可以启动数据库,如果存在不一致或文件丢失则需要进行恢复。
 
主要步骤:
1)打开除undo表空间之外其它表空间的在线数据文件。
2)获取一个undo表空间。
3)打开在线重做日志文件。
 
Oracle在Open阶段将要进行很多校验检查,其中主要的校验包括以下两项:
1)第一次检查数据文件头中的检查点计数(Checkpoint cnt)是否和控制文件中的检查点计数(Checkpoint cnt)一致。此步骤检查用以确认数据文件是来自同一版本,而不是从备份中恢复而来(因为Checkpoint Cnt不会被冻结,会一直被修改)。
2)第二次检查数据文件头的开始SCN和控制文件中记录的该文件的结束SCN是否一致,如果控制文件中记录的结束SCN等于数据文件头的开始SCN,则不需要对那个文件进行恢复(如果此前数据库异常崩溃,则结束SCN会保持在最大值(无穷大),数据库必须执行实例恢复以确保一致性)。
 

2 数据库关闭

技术分享

 

Oracle 11g中数据库关闭的分步骤操作:
1)关闭数据库
alter database close; 
Close数据库仅允许在没有连接的情况下进行,否则可能遇到 ORA-01093错误。
 
2)卸载数据库
alter database dismount;
 
3)关闭数据库实例
shutdown;
 

2.1 关闭方式

 

Database Behavior

ABORT

IMMEDIATE

TRANSACTIONAL

NORMAL

Permits new user connections

No

No

No

No

Waits until current sessions end

No

No

No

Yes

Waits until current transactions end

No

No

Yes

Yes

Performs a checkpoint and closes open files

No

Yes

Yes

Yes

 

2.1.1 SHUTDOWN NORMAL

SHUTDOWN命令的缺省选项就是NORMAL,当执行SHUTDOWN命令时,Oracle即以正常方式关闭数据库。
采用这种方式关闭数据库,在下一次启动时不需要进行任何的实例恢复,但是由于Normal方式要等所有用户断开连接后才能关闭数据库,所以等待时间可能超长;在生产环境中,这种方式几乎无法关闭有大量用户连接的数据库,所以很少被采用。
 
2.1.2 SHUTDOWN IMMEDIATE
SHUTDOWN IMMEDIATE方式是最为常用的一种关闭数据库的方式,使用这个命令时,当前正在被Oracle处理的事务立即中断,未提交的事务将全部回滚,系统不等待连接到数据库的用户退出,强制断开所有的连接用户。然后执行检查点,将变更数据全部写回数据文件,关闭数据库。使用这种方式关闭数据库,在下次启动数据库时不需要进行实例恢复,是一种安全的数据库关闭方式。
但是注意,如果数据库系统繁忙,当前有大量事务执行(甚至是大事务正在处理),那么使用此选项关闭数据库也可能需要大量时间。
 
2.1.3 SHUTDOWN TRANSACTIONAL
SHUTDOWN TRANSACTIONAL选项仅在Oracle 8i后可用,使用该命令时,数据库不再允许建立新的连接,禁止新事务的进行,但是允许当前活动事务执行完毕。
在所有活动的事务完成后,数据库将和SHUTDOWN IMMEDIATE同样的方式关闭数据库。
 
2.1.4 SHUTDOWN ABORT
SHUTDOWN ABORT是最不推荐采用的关闭数据库的方法,使用该选项,数据库会立即终止所有用户连接、中断所有事务、立即关闭数据库,使用这种方式关闭数据库,未完成事务不会回滚,数据库也不会执行检查点,所以在下次启动时,数据库必须执行实例恢复,实例恢复可能会需要大量时间,数据库的启动因此可能需要等候很长时间。
Abort的方式关闭数据库,就类似于数据库服务器突然断电,可能会导致不一致的情况出现,所以除非不得已,轻易不要使用这种方式关闭数据库。那么在什么情况下需要使用Shutdown abort方式关闭数据库呢?以下是一些常见的场景:
  • 数据库或应用异常,其他方式无法关闭数据库
  • 因为马上到来的断电或其他维护情况,需要快速关闭数据库
  • 启动异常后需要重新尝试启动
  • 当使用Shutdown Immediate无法关闭时
  • 需要快速重新启动数据库
  • Shutdown超时或异常
 

2.2 关闭的过程

2.2.1 关闭数据库
非abort方式:
将SGA中的数据写入到数据文件和在线重做日志文件。之后关闭数据文件和在线重做日志文件。
Abort方式:
直接关闭数据库和实例。与断电类似。
 
2.2.2 卸载数据库
断开数据库和实例的关联。
关闭数据库的控制文件。
 
2.2.3 关闭数据库实例
终止相关进程,回收SGA所占内存。

 

 
 
参考资料:
 
http://docs.oracle.com/database/122/CNCPT/oracle-database-instance.htm#CNCPT602
 
http://www.eygle.com/orabk/hforacle/01.DBStartAndShutdown.pdf
 

Oracle启动和关闭