分类: Oracle
2013-07-31 22:03:48
关闭数据库过程
1.1 关闭数据库
1. 把高速缓冲区和重做日志缓冲区中的内容分别写入数据文件和联机日志文件,
2. 关闭所有联机数据文件和日志文件
此时控制文件仍处于打开状态.
1.2 卸载数据库
1. 从一个实例卸装数据库
2. 关闭控制文件
此时实例依然存在。
1.3 关闭实例
1. 关闭alert文件和跟踪文件
2. 释放SGA
3. 终止后台进程
2 数据库关闭模式
?指令 |
操作过程说明 |
注意事项 |
shutdown normal |
◆ 阻止任何用户建立新的连接 ◆ 等待当前所有正在连接的用户主动断开连接. 正在连接的用户能够继续他们当前的工作, 甚至能够提交新的事务. ◆ 直到所有的用户都断开连接(自己断开), 才进行关闭、制裁数据库, 并终止例程. |
重点在等待会话结束,然后关闭数据库 |
shutdown transactional |
transactional选项比normal选项稍微主动些. 它能在尽可能短的时间内关闭数据库. ◆ 阻止任何用户建立新的连接, 同时阻止当前连接的用户开始任何新的事务 ◆ 等待所有当前未提交的活动事务提交完后, 然后立即断开用户的连接 ◆ 断开连接, 立即进行关闭、制裁数据库, 并终止例程 |
重点在等待事物结束,然后干掉会话,关闭数据库 |
shutdown immediate |
immediate选项关闭数据库, 就能够在尽可能短的时间内关闭数据库. ◆ 阻止任何用户建立新的连接, 同时阻止当前连接的用户开始任何新的事务 ◆ 立即结束当前正在执行的sql语句 ◆ 任何当前未提交的事务均被回退 ◆ 断开连接, 关闭、卸载数据库, 并终止例程 |
重点在不管事务完成和会话结束了,直接把未提交的事物被回退,如果事物较多,关闭的时间就比较长了。 话说回来,回退事务,还是在纠结于事务 |
shutdown abort |
如果上述三种选项都无法成功关闭数据库, 就说明数据库存在严重错误. 这时只能使用abort选项来关闭数据库. ◆ 阻止任何用户建立新的连接,同时阻止当前连接的用户开始任何新的事务。 ◆ 立即终止当前正在执行的SQL语句。 ◆ 任何未提交的事务均不被退名。 ◆ 直接终止实例。 |
不再纠结于事务,没有完全检查点,直接终止实例,下一次启动时需要进行实例恢复 |
3 关闭模式与过程关系
关闭模式 |
Abort |
Immediate |
Transactional |
Normal |
允许新连接 |
X |
X |
X |
X |
等到当前会话结束 |
X |
X |
X |
○ |
等到当前事务结束 |
X |
X |
○ |
○ |
执行检查点并关闭文件 |
X |
○ |
○ |
○ |