对于oracle的关闭,有几种模式,各有不同。现将oracle的关闭方式做一些总结。
1 关闭数据库大概有以下过程
1.1 关闭数据库
1. 把高速缓冲区和重做日志缓冲区中的内容分别写入数据文件和联机日志文件,
2. 关闭所有联机数据文件和日志文件
此时控制文件仍处于打开状态.
1.2 卸载数据库
1. 从一个实例卸装数据库
2. 关闭控制文件
此时实例依然存在。
1.3 关闭实例
1. 关闭alert文件和跟踪文件
2. 释放SGA
3. 终止后台进程
2 数据库关闭模式 以下做一下对比:
指令 | 操作过程说明 |
shutdown normal | 1 阻止任何用户建立新的连接 |
2 等待当前所有正在连接的用户主动断开连接. 正在连接的用户能够继续他们当前的工作, 甚至能够提交新的事务. | |
3 直到所有的用户都断开连接(自己断开), 才进行关闭、制裁数据库, 并终止例程. | |
shutdown transactional | 1 transactional选项比normal选项稍微主动些. 它能在尽可能短的时间内关闭数据库. |
2 阻止任何用户建立新的连接, 同时阻止当前连接的用户开始任何新的事务 | |
3 等待所有当前未提交的活动事务提交完后, 然后立即断开用户的连接 | |
4 断开连接, 立即进行关闭、制裁数据库, 并终止例程 | |
shutdown immediate | 1 immediate选项关闭数据库, 就能够在尽可能短的时间内关闭数据库. |
2 阻止任何用户建立新的连接, 同时阻止当前连接的用户开始任何新的事务 | |
3 立即结束当前正在执行的sql语句 | |
4 任何当前未提交的事务均被回退 | |
5 断开连接, 关闭、卸载数据库, 并终止例程 | |
shutdown abort | 1如果上述三种选项都无法成功关闭数据库, 就说明数据库存在严重错误. 这时只能使用abort选项来关闭数据库. |
2 阻止任何用户建立新的连接,同时阻止当前连接的用户开始任何新的事务。 | |
3 立即终止当前正在执行的SQL语句。 | |
4 任何未提交的事务均不被提交。 | |
5 直接终止实例 ---有点类似与PC无响应了。直接强行关机。 |
关闭模式 | Abort | Immediate | Transactional | Normal | |||||
允许新连接 | NO | NO | NO | NO | |||||
等到当前会话结束 | NO | NO | NO | YES | |||||
等到当前事务结束 | NO | NO | YES | YES | |||||
执行检查点并关闭文件 | NO | YES | YES | YES |