Answers:
关闭进行维护(或冷备份)的目的是使数据库保持一致状态,而无需在启动时回滚/恢复。
shutdown
从理论上讲,有3条SQL * Plus 命令可以实现此目的,所有这些命令都会立即阻止新的会话连接到实例:
shutdown normal
或只是shutdown
:等待所有会话断开连接。这种模式在实践中很少使用,因为它依赖行为良好的客户端而不会保持连接打开。这曾经是shutdown
不取消正在运行的事务的唯一模式。shutdown transactional
:一旦当前运行的事务完成,将断开会话连接,从而阻止新事务开始。shutdown immediate
:立即关闭所有会话并回滚中断的事务,然后再关闭。请注意,断开连接是立即的,但是关闭可能不是,因为任何中断的事务都可能需要一些时间才能回滚。的第四个模式shutdown
是shutdown abort
。这就像拉电源线一样-该实例现在停止,无需任何清理。如您的示例所示,通常您希望随后再重新启动数据库,然后立即彻底关闭数据库。概念指南说:
此模式用于紧急情况,例如没有其他成功的关闭方式时。
您提供的所有示例都将检查点作为shutdown [normal]
或shutdown immediate
明确检查点的一部分,以减少恢复所需的时间。
一般建议:
shutdown normal
。shutdown transactional
仅出席关机时,要尽量减少交易取消(只参加了,因为这种关机,不能保证关闭数据库下的所有如果超时,违反)。shutdown immediate
无人值守关机,或当你不关心当前运行的事务。shutdown abort
除非必须,否则不要使用(加上启动/关闭)-在今天的Oracle早期版本中,这种情况更为常见。在其他情况下(不是补丁/升级),如果您需要最小化停机时间,则此模式可能是合适的。shutdown abort
与意外备份联机日志有关,但这仅在您随后不执行干净关机的情况下。如果您知道自己在做什么,我认为shutdown abort
可以认为这是绝对安全的-而且我不确定Oracle的职位是否算作“
我更喜欢使用shutdown abort方法,因为它是关闭数据库的最快方法。关闭中止后,有些操作无法执行,例如
在这两种情况下,数据库均已损坏,必须从完整备份中还原该数据库。
从9i开始,可以使用dbnewid实用程序来重命名数据库或更改dbid 。据我所知,该实用程序会检查数据库是否正确关闭。重命名数据文件,临时文件和日志文件可以通过执行适当的sql语句来完成,而无需重新创建控制文件。
shutdown abort
?扮演对手,如果我们可以相信Oracle在断电时能够正确恢复,那么我们是否不应该在a期间信任它shutdown abort
,特别是如果它更快并且我们将立即执行astartup restrict
和ashutdown immediate
?换句话说,是否有事实可以支持Oracle的可怕警告shutdown abort
?