停顿数据库
假设为了进行表的重新组织(reorganization)或其他某种管理任务,希望使数据库处于限制方式。在数据库中用户正执行事务时,进行模式更改特别困难。用户连接到数据库时将数据导入到一个大表也相当困难。你不得不在“维护时间窗”中完成这些活动,或者你不得不关闭数据库并以限制方式启动它。
但是,如果没有关闭和重启数据库的维护时间窗时怎么办?或者,假定的时间窗由于执行任务时遇到问题而奇迹般地消失时怎么办?这在实践当中这是经常发生的。多数情况下,你不得不等到下一个周末.为了解决这个问题,停顿(quiescing)数据库提供了使数据库处于单用户方式而不必关闭数据库的机会。
当DBA使数据库进入停顿状态时,有下列限制:
(1) 所有非活动会话不允许发布任何数据库命令直到数据库停顿终止为止;
(2) 允许完成所有活动会话;
(3) 所有新登录企图将被排队.在数据库处于停顿状态时,用户试图登录不会出现错误消息。但这些登录企图似乎像被挂起一样;
(4) 数据库中只允许DBA的査询、事务和PL/SQL语句。更准确地说,只允许Oracle Resource Manager SYS_GROUP用户组的用户发布的査询和语句。
为使数毎库进入停顿状态,可作为SYS或SYSTEM用户发布下面的ALTER SYSTEM命令:
ALTER SYSTEM QUIESCE RESTRICTED;
稍后,当完成了管理任务时,可发布下面的命令允许正常访问:
ALTER SYSTEM UNQUIESCE;
数据库停顿终止后,数据库允许所有排队的登录进入,再次允许所有不活动的事务转为活动,让它们执行它们的DML语句。
为联机维护使用数据库停顿
假定你要改变一个表的模式。如果一个事务正在使用这个表,就不能执行这个任务。如果稍后更新了一段PL/SQL过程来反映模式中的改变,用户试图执行这个过程时将会收到一个错误。幸运的是,Oracle有一个重要的停顿(quiescing)特性,藉此,你就不用关闭数据库然后再在限定模式下打开数据库。
当你需要执行一个操作,且该操作要求当前数据库中没有运行的活动事务时,就可以使用这一特性。在数据库处于禁止状态下,用户将保持登录状态并执行请求。但是,数据库将阻塞除了SYS和SYSTEM用户请求之外的所有事务请求。用户可以继续查询数据库,这意味着数据库要比限定模式下更可用。这样,停顿将数据库置于部分可用的状态。当数据库脱离停顿状态时,之前被阻塞的任何一个用户谙求都会被自动处理。
下面的命令执行数据库停顿和取消停顿:
ALTER SYSTEM QUIESCE RESTRICTED;
ALTER SYSTEM UNQUIESCE;
注解 不是每一个具有DBA权限的用户都可以停顿数据库.只有SYS和SYSTEM用户可以使用这个特性.
用户可以登录到系统中,除非正在使用共享服务器架构。需要使用数据库停顿特性的一般维护操作是那些需要独占使用对象的操作,如ALTER TABLE, DROP TABLE或者CREATE PROCEDURE.任何一个DBA用来对一个活动数据库执行的DDL语句都需要独占锁定,如果其他的事务正在使用这个表,这个操作将失败。
当数据库处于停顿状态时,SYS和SYSTEM之外的用户不能启动任何新的事务或査询。任何一个非活动的会话也都不能被激活。在停顿期间,Oracle等待所有的事务和查询来提交或回退,数据库等待释放所有的共享资源,如入队。在数据库取消停顿之后,所有阻塞的操作都被允许继续执行。
在这期间,用户得不到任何错误消息。在试图对一个处于停顿状态的数据库执行一个事务时,事务只是被简单地挂起,直到数据库再次进入正常模式。




