数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
使用Oracle9i的新特征-停顿(QUIESCING)数据库

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

原作者:Sameer Wadhwa

停顿(Quiescing)一个数据库是一个强大的新特征,使得DBA可以完成一些数据库处于受限模式(restricted mode)才能完成的一些操作。使用这个特征,当以syssystem帐户登陆后,DBA可以执行查询,PL/SQL,和进行其它的一些事务。而所有其它用户的会话都将处于暂停(suspended)的状态,一旦DBA把数据库置回到正常模式,用户的这些会话又将会自动继续运行了。

1a:数据库处于正常状态 .

1b: 数据库处于状态.

1a是数据库处于正常模式的系统状态,在这种模式中DBA和用户的事务都是运行着的。一些DBA的事务是被限制着的,因为数据库必须处于受限模式时才可以运行这些事务。相反的方面,图1b是数据库处于停顿状态的情况,在图中,所有用户的事务都是被阻塞(blocked)着的,而没有重启数据库到受限模式,DBA的事务也毫无问题的运行着。

 

一旦所有活动的会话都执行了commitrollback,数据库将会被停顿。

让我们看一下它是如何进行的。停顿数据库所用的主要的命令为ALTER SYSTEM QUIESCE RESTRICTED;我将首先使用SQLPLUS登陆执行这个操作。

C:\> U:\>sqlplus /nolog

SQL*Plus: Release 9.2.0.1.0 - Production on Wed Apr 16 16:08:27 2003

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

SQL> connect sys/change_on_install as sysdba
Connected.

SQL> ALTER SYSTEM QUIESCE RESTRICTED;
ALTER SYSTEM QUIESCE RESTRICTED
*
ERROR at line 1:
ORA-25507: resource manager has not been continuously on

如上的错误表明资源管理器(resource manager)是非活动的,要使它活动你可以这样:

SQL> alter system set resource_manager_plan='SYSTEM_PLAN' scope=spfile sid='OR9I';

System altered.

OR9i 是我的SID.

做完这个操作你不得不重启一下数据库了。

SQL> show parameter RESOURCE_MANAGER_PLAN

NAME                                 TYPE        VALUE
------------------------------------ ----------- ----------------
resource_manager_plan                string      SYSTEM_PLAN
SQL> ALTER SYSTEM QUIESCE RESTRICTED;
System altered.

如果有一些未决的事务需要提交或回滚的话,先前的那条命令将会挂起而等待事务的完成。如想确定是哪些用户的会话没提交或回滚,你可以用如下的语句。

SELECT S.SID,S.SERIAL#,S.MACHINE,S.TERMINAL,S.USERNAME
FROM V$SESSION S WHERE S.SID IN
(SELECT SID FROM V$LOCK WHERE TYPE='TX')
/

查询的结果将会提供充足的信息使你能够要求那些用户提交、回滚或终止他们的事务。更坏一点的情况是你可以杀掉这些会话,会话将被被自动回滚。系统处于停顿状态后,你就可以不受其它用户的干扰进行工作了,完成工作后你可以用如下命令解除这种停顿的状态:

SQL> ALTER SYSTEM UNQUIESCE;

System altered.

情景1:

事务顺序

用户会话

DBA 会话

(1)

Connected with SCOTT

SQL> update emp3 set

ename='John'

where ename='samir';

Connected with SYS

(2)

 

SQL> ALTER SYSTEM QUIESCE RESTRICTED;

 

等待用户SCOTT完成事务.

(3)

SQL> commit;

 

Commit complete.

 

(4)

 

System altered.

第一种情景表明,在所有活动的事物完成前DBA是不能停顿数据库的。一旦数据库停顿了,库对其它的用户呈现的是停止(halt)或非活动(inactive)的状态。然后当数据库变为正常状态后,所有的数据块和暂停的事务又继续运行了。

情景 2:

事务顺序

用户 会话

DBA 会话

(1)

Connected with Scott User .

Connected with SYS.

SQL> ALTER SYSTEM QUIESCE RESTRICTED;

System altered.

(2)

Select * from EMP;

wait for result

 

(3)

 

SQL> ALTER SYSTEM UNQUIESCE;

System altered.

 

EMPNO   ENAME   SALARY
---------    ----------   ----------
1       Sasa    1000
2       John    5000
3       Hema    7000

User can see the results.

 

情景2表明它如何影响了用户的会话。简而言之,此时系统对于最终用户是临时的无效。

通常的一些问题:

 (Q)做为DBA的你如何检查你的数据库是什么状态呢?

(A)你可以检查V$INSTANCE视图中的ACTIVE_STATE这上字段。

SQL> SELECT ACTIVE_STATE FROM V$INSTANCE;

ACTIVE_ST

---------

NORMAL

ACTIVE_STATE有如下几个可能值:

Active_state

描述

Normal

数据库处于正常状态

QUIESCING

DATABASE wants to QUIESCED but waiting for active running transactions to finish.

数据库要想停顿,但要等待活动的运行事务完成。

 

 

Quiesced

数据库处于停顿的状态了.

 

(Q)怎样确定哪些连接着库的会话在等待停顿着的数据库呢?

(A)可以用如下的查询来确定:

SELECT SID,EVENT,TOTAL_WAITS,TIME_WAITED "TIME WAITED[100 OF SEC]",

AVERAGE_WAIT FROM V$SESSION_EVENT

WHERE EVENT='wait for possible QUIESCE finish'

/

SQL>  
SID EVENT                              TOTAL_WAITS            Time Waited[100 of Sec] AVERAGE_WAIT
--- ---------------------------------- -----------            ----------------------- ------------
  6 wait for possible QUIESCE finish           412                             126532          307

"wait for possible QUIESCE finish"这个事件表明会话正等着“正停顿”的数据库以至于它不能进行它的事物。库停顿后这些会话将呈现hung的状态。

 (Q)在停顿数据库之前,对于资源管理器计划(resource manager plan) 需要做什么设定?

(A)  当你停顿了数据库,INTERNAL_QUIESCE资源计划被激活了。除SYS_GROUPS其它所有的资源组中的ACTIVE_SESS_POOL_P1应被设置为0。因SYSSYSTEM用户都属于SYS_GROUPS组,所以只有它们可以连接到数据库。

要查看细节的信息可以查询DBA_RSRC_PLAN_DIRECTIVES这个视图。

记着如下几点:

  • 处于停顿状态的数据库只有SYSSYSTEM是有效的用户来执行维护的工作;其它有DBA权限的用户也被视为一般的用户。
  • 在停顿的数据库中备份数据文件(泠备,拷贝数据文件)是无效的。
  • 如果库中有“活动”的事务,库是不能被停顿的。.
  • 需要启动数据库以设置资源计划

  • 停顿数据是9i的新特征,因此之前的版本中是不能用的。

结论:

停顿数据库是一个强大的特征使DBA不必重启数据库就可以执行一些特别的维护工作。




相关文章

相关软件