关闭数据库
当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