停顿数据库

偶尔,您可能希望将数据库置于只允许DBA事务,查询,提取或PL / SQL语句的状态。这种状态被称为停顿状态,意思是系统中没有正在运行的非DBA事务,查询,提取或PL / SQL语句。

在对quiesce数据库的讨论中,DBA被定义为用户SYS或SYSTEM。其他用户(包括具有DBA角色的用户)不允许发出ALTER SYSTEM QUIESCE DATABASE语句,或者在数据库停止后继续。

静止状态让管理员执行不能安全地执行的操作。这些行动包括:

  • 如果并发用户事务访问同一对象,则操作失败 - 例如,更改数据库表的模式或将列添加到需要不等待锁定的现有表中
  • 并发用户事务可以看到不想要的中间效应 - 例如,多表程序用于在表首次导出,然后丢弃并最终导入时重新组织表。试图在删除表之后但在导入之前访问表的并发用户将无法准确查看情况。

如果没有停顿数据库的能力,您需要关闭数据库并以限制模式重新打开数据库。这是一个严重的限制,特别是对于需要24 x 7可用性的系统。停顿数据库是一个较小的限制,因为它消除了用户的中断以及与关闭和重新启动数据库相关的停机时间。

当数据库处于停顿状态时,通过数据库资源管理器的功能可以防止非DBA会话变为活动状态。因此,在本声明生效的同时,任何改变当前资源计划的尝试都将排队,直到系统解除锁定。有关数据库资源管理器的更多信息,请参见第27章“使用Oracle数据库资源管理器管理资源”。

将数据库置于静默状态


要将数据库置于停顿状态,请发出以下SQL语句:
 
ALTER SYSTEM QUIESCE RESTRICTED;

 非DBA活动会话将继续,直到它们变为非活动状态。活动会话是当前处于事务,查询,获取或PL / SQL语句中的会话;或者当前持有任何共享资源的会话(例如排队)。不允许非活动会话变为活动状态。例如,如果用户尝试强制执行非活动会话时发出SQL查询,则查询将显示为挂起。当数据库稍后解除时,会话将恢复,并且处理阻止的操作。 一旦所有非DBA会话变为非活动状态,ALTER SYSTEM QUIESCE RESTRICTED语句完成,并且数据库处于静默状态。在Oracle Real Application Clusters环境中,此语句会影响所有实例,而不仅仅是发布语句的实例。 ALTER SYSTEM QUIESCE RESTRICTED语句可能会长时间等待活动会话变为非活动状态。您可以通过查询V $ BLOCKING_QUIESCE视图来确定阻塞静默操作的会话。该视图只返回单个列:SID(会话ID)。您可以使用V $ SESSION将其加入以获取有关会话的更多信息,如以下示例所示:

SELECT Bl.Sid
    ,User
    ,Osuser
    ,Type
    ,Program
FROM V$blocking_Quiesce Bl
    ,V$session Se
WHERE Bl.Sid = Se.Sid;

如果您中断请求以停顿数据库,或者如果会话在所有活动会话停顿之前异常终止,则Oracle数据库会自动反转该语句的任何部分影响。 对于连续多个Oracle调用接口(OCI)提取执行的查询,ALTER SYSTEM QUIESCE RESTRICTED语句不会等待所有提取完成。它只等待当前获取完成。 对于专用服务器和共享服务器连接,颁发此语句后的所有非DBA登录均由数据库资源管理器排队,并且不允许继续。对用户来说,它看起来好像登录被挂起。登录将在数据库不起作用时恢复。 即使发出语句的会话退出,数据库仍保持静止状态。 DBA必须登录到数据库才能发出专门取消数据库停用的语句。

当数据库处于停顿状态时,您无法执行冷备份,因为即使数据库处于停顿状态,Oracle数据库后台进程仍可能为内部目的执行更新。另外,在线数据文件的文件头继续显示为可访问。它们看起来不像完全关闭一样。但是,您仍然可以在数据库处于停顿状态时进行联机备份。

将系统恢复到正常运行状态


以下语句将数据库恢复为正常操作:

ALTER SYSTEM UNQUIESCE;

所有非DBA活动都允许继续。在Oracle Real Application Clusters环境中,不需要在与静默数据库相同的会话或甚至相同的实例中发布此语句。如果发出ALTER SYSTEM UNQUIESCE语句的会话异常终止,那么Oracle数据库服务器将确保unquiesce操作完成。

查看实例的静默状态


您可以查询V $ INSTANCE视图的ACTIVE_STATE列以查看实例的当前状态。列值具有以下值之一:

  •  NORMAL  正常不停顿状态
  • QUIESCING  正在停顿,但一些非DBA会话仍处于活动状态
  • QUIESCED  静默;没有非DBA会话处于活动状态或被允许

暂停和恢复数据库


ALTER SYSTEM SUSPEND语句暂停数据文件(文件头和文件数据)和控制文件的所有输入和输出(I / O)。暂停状态可让您备份数据库而不会造成I / O干扰。当数据库挂起时,所有先前存在的I / O操作都可以完成,并且任何新的数据库访问都处于排队状态。

暂停命令不是特定于实例的。在Oracle Real Application Clusters环境中,当您在一个系统上发出suspend命令时,内部锁定机制会通过实例传播暂停请求,从而静默给定集群中的所有活动实例。但是,如果在另一个实例挂起时启动新实例,则新实例不会挂起。

使用ALTER SYSTEM RESUME语句恢复正常的数据库操作。 SUSPEND和RESUME命令可以从不同的实例发出。例如,如果实例1,2和3正在运行,并且您从实例1发出ALTER SYSTEM SUSPEND语句,则可以从实例1,2或3发出具有相同效果的RESUME语句。

挂起/恢复功能在允许您镜像磁盘或文件然后拆分镜像的系统中非常有用,它提供了备用备份和恢复解决方案。如果在写入过程中使用无法从现有数据库分割镜像磁盘的系统,则可以使用挂起/恢复功能来简化拆分。

挂起/恢复功能不是正常关机操作的合适替代品,因为挂起数据库的副本可能包含未提交的更新。

不要使用ALTER SYSTEM SUSPEND语句替代将表空间置于热备份模式。在ALTER TABLESPACE BEGIN BACKUP语句前面的任何数据库挂起操作。

以下语句说明ALTER SYSTEM SUSPEND / RESUME用法。查询V $ INSTANCE视图以确认数据库状态。

SQL> ALTER SYSTEM SUSPEND;
System altered
SQL> SELECT DATABASE_STATUS FROM V$INSTANCE;
DATABASE_STATUS
---------
SUSPENDED

SQL> ALTER SYSTEM RESUME;
System altered
SQL> SELECT DATABASE_STATUS FROM V$INSTANCE;
DATABASE_STATUS
---------
ACTIVE

参考资料


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

原文地址:https://www.cnblogs.com/ZeroTiny/p/9009634.html