1.前言
数据库的启动,通过只需要一个startup就完成了,实际上在后台Oracle是通过nomount、mount、open这3个步骤来完成的,将这个过程逆向过来,那么实际上当通过shutdown来关闭数据库时,实际上数据库也就经历了close、dismount、shutdown三个步骤。
2.数据库关闭的步骤
以下是Oracle 10g中数据库关闭的分步操作
SQL> alter database close; alter database close * ERROR at line 1: ORA-01093: ALTER DATABASE CLOSE only permitted with no sessions connected
注意Close数据库仅允许连接的情况下进行,否则可以就会出现如下的报错。
第一步:
SQL> alter database close; Database altered.
日志信息:
Sat Sep 25 23:22:56 2021 alter database close Warning: ALTER DATABASE CLOSE is not a publicly supported command. Sat Sep 25 23:22:56 2021 SMON: disabling tx recovery All dispatchers and shared servers shutdown CLOSE: killing server sessions. CLOSE: all sessions shutdown successfully. Stopping background process SMCO SMON: disabling cache recovery Sat Sep 25 23:22:57 2021 Shutting down archive processes Archiving is disabled Archive process shutdown avoided: 0 active Thread 1 closed at log sequence 12 Successful close of redo thread 1 Completed: alter database close Sat Sep 25 23:23:16 2021 alter database dismount Sat Sep 25 23:23:16 2021 idle dispatcher 'D000' terminated, pid = (20, 6) Completed: alter database dismount
第二步
SQL> alter database dismount; Database altered.
日志信息
Sat Sep 25 23:23:16 2021 alter database dismount Sat Sep 25 23:23:16 2021 idle dispatcher 'D000' terminated, pid = (20, 6) Completed: alter database dismount
第三步
SQL> shutdown ORA-01507: database not mounted ORACLE instance shut down. SQL>
日志信息
Sat Sep 25 23:23:27 2021 Shutting down instance (normal) Shutting down instance: further logons disabled Stopping background process MMNL Stopping background process MMON License high water mark = 4 All dispatchers and shared servers shutdown ALTER DATABASE CLOSE NORMAL ORA-1507 signalled during: ALTER DATABASE CLOSE NORMAL... ARCH: Archival disabled due to shutdown: 1090 Shutting down archive processes Archiving is disabled Archive process shutdown avoided: 0 active ARCH: Archival disabled due to shutdown: 1090 Shutting down archive processes Archiving is disabled Archive process shutdown avoided: 0 active Sat Sep 25 23:23:31 2021 Stopping background process VKTM: Sat Sep 25 23:23:33 2021 Instance shutdown complete
在使用shutdown命令关闭数据库时,还有几个可选参数,这几个参数分别是normal、immediate、transactional、abort
3.几种关闭方式的对比
3.1 shutdown normal
shutdown normal是数据库关闭shutdown命令的缺省选项,当我们执行shutdown时,Oracle即以正常方式关闭数据库,发出该命令后,任何新的连接都不再允许连接到数据库,但是在数据库关闭之前,oracle需要等待当前连接的所有用户都从数据库退出。
采用这种方式关闭数据库,在下一次启动时不需要进行任何的实例恢复,但是由于Normal方式要等到所有用户断开连接后才能关闭数据库,所以等待时间可能超长,,在生产环境中,这种方式几乎无法关闭有大量用户连接的数据库,所以很少被采用。
3.2 shutdown immediate
shutdown immediate是最为常用的一种关闭数据库的方式,使用这个命令时,当前正在被oracle处理的事务立即中断,未提交的事务将全部回滚,系统不等待连接到数据库的用户退出,强制断开所有的连接用户,然后执行检查点,将变更数据全部写回数据文件,关闭数据,使用这种方式关闭数据库,在下次启动数据库时不需要进行实例恢复,是一种安全的数据库关闭方式。
但是注意,如果数据库系统繁忙,当前有大量事务执行(甚至是大事务正在处理),那么使用此选项关闭数据库也可能需要大量时间。
3.3 shutdown transactional
shutdown transactional 仅在Oracle 8i后可用,使用该命令时,数据库不再允许建立新的连接,禁止新事务的进行,但是允许当前活动事务执行完毕。
在所有活动的事务完成后,数据库将与shutdown immediate同样的方式关闭数据库。
3.4 shutdown abort
shutdown abort 是最不推荐采用的关闭数据库的方法,使用该选项,数据库会立即终止所有用户连接,中断所有事务,立即关闭数据库,使用这种方式关闭数据库,未完成的事务不会回滚,数据库也不会执行检查点,所以在下次启动时,数据库必须执行实例恢复,实例恢复可能会需要大量的时间,数据库的启动因此可能需要等待很长时间。
abort的方式关闭数据库,就类似于数据库服务突然断电,可能会导致不一致的情况出现,所以不到万不得已,轻易不要使用这种方式关闭数据库,那么什么时候使用shutdown abort方式关闭数据库呢?以下是一些常见的场景:
- 数据库或应用异常,其他方式无法关闭数据库
- 因为马上到来的断电或者其它维护情况,需要快速关闭数据库
- 启动异常后需要重新尝试启动
- 当使用shutdown immediate无法关闭时;
- 需要快速重新启动数据库
- shutdown 超时或异常