关闭数据库

当Oracle Restart不在使用中时,可以通过连接SYSOPER或SYSDBA并发出SHUTDOWN命令来关闭具有SQL * Plus的数据库实例。如果您的数据库由Oracle Restart管理,则关闭数据库的推荐方法是使用srvctl stop database命令。

控制不会返回到启动数据库关闭的会话,直到关闭完成。在关机过程中尝试连接的用户会收到如下消息:

ORA-01090: shutdown in progress - connection is not permitted

 如果通过共享服务器进程连接到数据库,则无法关闭数据库。

有几种关闭数据库的模式:普通,即时,事务和中止。有些关机模式会在实际关闭数据库之前等待某些事件发生(例如事务完成或用户断开连接)。这些事件有一个小时的超时时间。

以下部分提供了详细信息:

  • 使用normal模式关闭
  • 使用immediate模式关机
  • 使用Transactional模式关闭
  • 用Abort模式关闭
  • 关闭超时

使用normal模式关闭


要在正常情况下关闭数据库,请使用以下命令之一:

SQL*Plus SRVCTL (When Oracle Restart Is In Use)
SHUTDOWN [NORMAL]
srvctl stop database -d db_unique_name -o normal

SQL * Plus SHUTDOWN命令的NORMAL子句是可选的,因为这是默认的关闭方法。对于SRVCTL,如果省略-o选项,则关闭操作将根据存储在数据库的Oracle Restart配置中的停止选项继续。默认停止选项是immediate。

正常的数据库关闭进行下列条件:

  • 声明发布后,不允许有新的连接。
  • 在数据库关闭之前,数据库将等待所有当前连接的用户与数据库断开连接。

数据库的下一次启动不需要任何实例恢复过程。

使用immediate模式关机


仅在以下情况下使用立即数据库关闭:

  • 启动自动化无人值守备份
  • 当电源关闭即将发生时
  • 当数据库或其某个应用程序不正常运行时,您无法联系用户请求他们注销或无法注销

要立即关闭数据库,请使用以下命令之一:

SQL*Plus SRVCTL (When Oracle Restart Is In Use)
SHUTDOWN IMMEDIATE
srvctl stop database -d db_unique_name -o immediate

立即数据库关闭进行下列条件:

  • 声明发布后,不允许新的连接,也不允许新的事务启动。
  • 任何未提交的事务都会回滚。 (如果存在长时间未提交的事务,则尽管名称存在,但此关闭方法可能无法快速完成。)
  • Oracle数据库不会等待当前连接到数据库的用户断开连接。数据库隐式回滚活动事务并断开所有连接的用户。

数据库的下一次启动不需要任何实例恢复过程。

使用Transactional模式关闭


如果要在执行活动事务首先完成的同时执行实例的计划关闭,请使用以下命令之一:

SQL*Plus SRVCTL (When Oracle Restart Is In Use)
SHUTDOWN TRANSACTIONAL
srvctl stop database -d db_unique_name -o transactional

事务性数据库关闭进行下列条件:

  • 声明发布后,不允许新的连接,也不允许新的事务启动。
  • 在所有事务完成后,仍然连接到实例的任何客户端都将断开连接。
  • 此时,实例将关闭,就像提交SHUTDOWN IMMEDIATE语句时一样。

数据库的下一次启动不需要任何实例恢复过程。

事务关闭可防止客户端丢失工作,同时不需要所有用户注销。

用Abort模式关闭


您可以通过中止数据库实例来即时关闭数据库。如果可能,仅在以下情况下执行此类关机:

数据库或其中一个应用程序运行不规律,其他类型的关闭都不起作用。

  • 您必须立即关闭数据库(例如,如果您知道电源关闭将在一分钟内发生)。
  • 启动数据库实例时遇到问题。

当您必须通过中止事务和用户连接来执行数据库关闭时,请使用以下命令之一:

SQL*Plus SRVCTL (When Oracle Restart Is In Use)
SHUTDOWN ABORT
srvctl stop database -d db_unique_name -o abort

中止的数据库关闭会继续执行以下条件:

  • 声明发布后,不允许新的连接,也不允许新的事务启动。
  • Oracle数据库正在处理的当前客户端SQL语句会立即终止。
  • 未提交的事务不会回滚。
  • Oracle数据库不会等待当前连接到数据库的用户断开连接。数据库隐式断开所有连接的用户。

数据库的下一次启动将需要自动实例恢复过程。

关闭超时


等待用户断开或交易完成的关机模式对其等待的时间量有限制。如果阻塞关闭的所有事件都不会在一个小时内发生,则关闭操作将中止以下消息:ORA-01013:用户请求取消当前操作。如果您中断关闭过程,例如按下CTRL-C,也会显示此消息。 Oracle建议您不要尝试中断实例关闭。相反,请允许关闭过程完成,然后重新启动实例。

 在发生ORA-01013之后,您必须将实例视为处于不可预知状态。因此,您必须通过重新提交SHUTDOWN命令来继续关机过程。如果随后的SHUTDOWN命令继续失败,则必须提交SHUTDOWN ABORT命令来关闭实例。然后您可以重新启动实例。

参考资料


https://docs.oracle.com/cd/E11882_01/server.112/e25494/start.htm#ADMIN11156

猜你喜欢

转载自www.cnblogs.com/sorliran/p/9008338.html