3.4 数据库的特殊状态

静默状态和挂起状态是两种特殊的数据库状态。当数据库处理静默状态时,只有SYS和SYSTEM用户能够在数据库中进行操作。当数据库处于挂起状态时,数据库I/O操作都会被暂停。利用这两种数据库状态,数据库管理员可以完成一些特殊的管理和维护操作。

3.4.1 静默状态

在静默状态下,只有具有管理员权限的用户才能在数据库中执行查询、更新操作,运行PL/ SQL程序时,任何非管理员用户都不能在数据库中执行任何操作。

在数据库运行过程中,执行如下的语句将进入静默状态。

      SQL> alter system quiesce restricted;
      系统已更改。

执行上述语句后,数据库将等待所有正在运行的非管理员用户会话主动终止,同时不再允许开始任何新的非管理员用户会话。当所有的非管理员用户的活动会话都被暂停后,ALTER SYSTEM QUICESCE RESTRICTED语句执行完毕,这时数据库被认为处于静默状态。

由于等待所有的非管理员用户会话都终止可能需要很长一段时间,因此,在这个过程中如果执行ALTER SYSTEM语句的会话被意外终止,则进行静默状态的操作将被撤销,已经暂停的会话将被恢复。

如果数据库处理静默状态,则可以执行如下语句,将静默状态恢复为正常状态。

      SQL> alter system unquiesce;

      系统已更改。

可以通过使用动态性能视图V$INSTANCE来查询当前数据库是否处于静默状态。在V$INSTANCE视图中的ACTIVE_STATUS字段显示了数据库当前的活动状态。

※ NORMAL:正常状态,即非静默状态。

※ QUIESCING:正在进入静默状态,仍然存在活动的非管理员用户会话。

※ QUIESCED:静默状态。

在下面的示例显示了如何改变和查询数据库的静默状态。

3.4.2 挂起状态

当数据库处于挂起状态时,数据库所有的物理文件(控制文件、数据文件和重做日志文件)的I/O操作都被暂停,这样能够保证数据库在没有任何I/O操作的情况下进行物理备份。挂起状态与静默状态的区别是:挂起状态并不禁止非管理员用户进行数据库操作,只是暂停所有用户的I/O操作。

提示:

当数据库进入静默状态时,不能通过复制物理文件的方法来对数据库进行备份,因为静默状态中数据文件仍然处于读写状态,只能在数据库关闭状态或挂起状态下才能对数据库物理文件进行复制操作。

在数据库进入挂起状态时,当前的所有I/O操作能够继续进行,但是所有新提交的I/O操作不会执行,而是被放入一个等待队列中。一旦数据库恢复到正常状态,这些I/O操作将从队列中取出并继续执行。

挂起数据库操作可以通过ALTER SYSTEM语句完成,例如:

      SQL> alter system suspend;
      系统已更改。

如果要将数据库从挂起状态中恢复,可以使用如下语句:

      SQL> alter system resume;
      系统已更改。

可以通过使用动态性能视图V$INSTANCE来查询当前数据库是否处于挂起状态。动态性能视图V$INSTANCE中的Database_STATUS字段显示了数据库当前的活动状态。

SUSPENDED:挂起状态。

ACTIVED:正常状态。

下面的示例显示了如何改变和查询数据库的挂起状态: