5.4 停顿并挂起数据库
在维护操作期间可临时停顿或挂起数据库。使用这些操作可在应用程序维护期间保持数据库为打开状态,从而避免数据库关闭所带来的时间或可用性影响。
停顿数据库时,除SYS和SYSTEM外,其他任何账户都不允许执行新的事务。新查询或尝试登录将表现为挂起,直到结束停顿数据库。停顿特性在执行表维护或复杂的数据维护时非常有用。为使用停顿特性,必须先按本章前面介绍的方法启用数据库资源管理器。此外,在启动数据库时,必须将RESOURCE_MANAGER_PLAN初始参数设置为一个有效的计划,在随后的数据库启动时一定不能禁用它。
作为SYS或SYSTEM(其他SYSDBA权限账户不可以执行这些命令)登录时,可以如下面这样停顿数据库:
alter system quiesce restricted;
任何登录到数据库中的非DBA会话都将继续执行,直到它们当前的命令完成,此时,它们将不再活跃。当前不活动的会话仍然停顿。在RAC配置中,所有运行中的实例将停顿。
为查看数据库是否处于停顿状态,以SYS或SYSTEM身份登录,并执行下面的查询:
select active_state from v$instance;
ACTIVE_STATE值为NORMAL(unquiesced)、QUIESCING(活动的非DBA会话仍在运行)或QUIESCED。
可使用下面的命令结束停顿数据库:
alter system unquiesce;
也可以不停顿数据库,取而代之的是挂起数据库。挂起的数据库不对它的数据文件和控制文件执行I/O,并允许在没有I/O干扰的情况下备份数据库。用以下命令挂起数据库:
alter system suspend;
注意:
只有在数据库处于热备份模式时,才可以使用ALTER SYSTEM SUSPEND命令。
虽然任何SYSDBA权限的账户都可执行ALTER SYSTEM SUSPEND命令,但只可从SYS和SYSTEM账户恢复普通数据库操作。使用SYS和SYSTEM可避免在重新开始数据库操作时的潜在错误。在RAC配置中,挂起所有实例。用以下命令查看实例的当前状态:
select database_status from v$instance;
数据库将是SUSPENDED或ACTIVE状态。为重新开始数据库,以SYS或SYSTEM身份登录,并执行下面的命令:
alter system resume;