`
junge8618
  • 浏览: 121021 次
  • 性别: Icon_minigender_1
  • 来自: 邵阳
社区版块
存档分类
最新评论

数据库的三种状态RESTRICT、QUIESCE和SUSPEND(三)

阅读更多
http://dev.firnow.com/course/7_databases/oracle/oraclejs/20091217/184945_3.html

数据库的这三种状态有相似之处,这里简单总结一下。

这一篇介绍SYSPEND状态。

RESTRICT、QUIESCE和SUSPEND(一):http://yangtingkun.itpub.net/post/468/483100

RESTRICT、QUIESCE和SUSPEND(二):http://yangtingkun.itpub.net/post/468/483165





RESTRICT限制的是没有RESTRICTED SESSION权限的用户,使得这些用户无法登陆数据库。而QUIESCE针对所有的非SYS、SYSTEM用户,禁止这个用户的任何新的操作,包括登陆、查询、DML等等。和RESTRICT、QUIESCE不同的是,SUSPEND主要是限制数据库IO操作的。而且SUSPEND限制的不仅仅是普通用户,而是数据库中任何的用户。

SQL> alter system suspend;

系统已更改。

在另一个终端上执行:

SQL> SET SQLP 'SQL2> 'ITPUB个人空间Z6q,@7k0H/t3M5qX
SQL2> conn test/testITPUB个人空间3[M/nR:?W
已连接。
CVRqgVe0SQL2> conn / as sysdbaITPUB个人空间A] Nm2{
已连接。ITPUB个人空间*vA;Ig(lY
SQL2> select * from dual;

DU
,q9oj1ca;H#LT1L0--ITPUB个人空间7} | M b8HL1y5u#s
X

SQL2> conn test/testITPUB个人空间*{eJcJ0O}
已连接。
9~L&KMu}7e0SQL2> select * from dual;

DU
i u*?Kw5V0--
'C$BC){_ H0X

SQL2> select count(*) from t;

由于数据库已经运行了一段时间,很多数据都在缓存之中,因此无论是DBA用户,还是普通用户,都可以正常登陆,且都可以执行查询操作,只要结果可以在CACHE中找到,不引起物理IO,就不会被阻塞,直到查询引发了物理IO操作,导致会话被挂起。

SQL> alter system resume;

系统已更改。

直到执行了RESUME命令,被挂起的操作恢复执行:


8JC7] H;NGn0  COUNT(*)
1E}4DPQ]6d#j,[0----------ITPUB个人空间(L.h-qq,a6Pl
     54020

SQL2> select * from session_roles;

ROLE
&@(Ms.|7R-b0------------------------------------------------------------
YX8\C.Y#f0CONNECT
R ` FG5v*AU}!c0V0RESOURCE

下面再次将数据库置于SUSPEND状态:

SQL> alter system suspend;

系统已更改。

执行刚才被阻塞的SQL:SELECT COUNT(*) FROM T。

SQL2> select count(*) from t;

  COUNT(*)
'FU&u2Rq4L+v0----------
z z+r@{8Zf`0     54020

SQL2> delete t;

由于CACHE缓存的作用,这次查询T表所有的IO都是逻辑IO,不会导致物理IO的产生,因此上一次被阻塞的操作,这次可以顺利执行,不过随后的DELETE操作由于要产生物理IO,因此被阻塞了。

SQL> alter system resume;

系统已更改。

执行RESUME后,DELETE操作完成:

ITPUB个人空间 qXjK ]vhF_C#HM
已删除54020行。

SQL2> select sid from v$mystat where rownum = 1;

       SIDITPUB个人空间7u7d Q'`$l5u8d3T$To^#|-A
----------
@!E C9[[,i G Jd!hZ0       155

查询V$SESSION_WAIT的信息,并将数据库再次置于SYSPEND状态:

文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/7_databases/oracle/oraclejs/20091217/184945.html

SQL> select event from v$session_wait where sid = 155;

EVENTITPUB个人空间 S(aMU!M?l3C:T|
--------------------------------------------------------------------------------
e:Y T+e1ZQb/N0SQL*Net message from client

SQL> alter system suspend;

系统已更改。

在会话2执行ROLLBACK操作:

SQL2> rollback;

由于ROLLBACK会导致物理IO,会话被阻塞,下面回到会话1,检查会话2的等待事件:

SQL> select event from v$session_wait where sid = 155;

EVENT
,KuaK!Wl!k G0--------------------------------------------------------------------------------ITPUB个人空间&|5m2Cg7R3k^'ly
writes stopped by instance recovery or database suspension

这是写操作被阻塞时,会话的等待事件,这个事件的名称已经很清楚的说明了问题。

最后还是看看RAC环境下SUSPEND对不同实例的影响。

依旧是在一个三节点的RAC环境中进行测试,其中两个节点处于启动状态,另一个节点关闭。

随后在实例1上发出ALTER SYSTEM SUSPEN语句,检查这个操作对实例2是否生效,将实例3启动,检查这个限制新启动的实例3是否有效。

bash-2.03$ srvctl status db -d testrac
lcf&IF8j0Instance testrac1 is running on node racnode1ITPUB个人空间dY+wRM'Y&wv
Instance testrac2 is running on node racnode2ITPUB个人空间*O c2^8G[D8lFM
Instance testrac3 is running on node racnode3ITPUB个人空间}RD9M,s7BD6I
bash-2.03$ srvctl stop inst -d testrac -i testrac3ITPUB个人空间.o0X*e`Jo
bash-2.03$ srvctl status db -d testracITPUB个人空间)VNe s-q'u\,y
Instance testrac1 is running on node racnode1ITPUB个人空间}:Iz\z BV} o%G
Instance testrac2 is running on node racnode2
GJ#uV w/OK jlX0Instance testrac3 is not running on node racnode3
C.phcPi0bash-2.03$ sqlplus "/ as sysdba"

SQL*Plus: Release10.2.0.3.0 - Production on星期五2月20 19:17:04 2009

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

ITPUB个人空间3_P&d(|j,M"c6R8iW
连接到:ITPUB个人空间N`0E`-N`+sAu
Oracle Database10gEnterprise Edition Release10.2.0.3.0 - 64bit ProductionITPUB个人空间h#N;Xe?@ b
With the Partitioning, Real Application Clusters, OLAP and Data Mining options

SQL> alter system suspend;

系统已更改。

SQL> select instance_name from v$instance;

INSTANCE_NAMEITPUB个人空间%C ] bdY(o5Y7M O4z
----------------
y P%~ ^dR@0B}0testrac1

现在检查实例2上是否也会产生禁止物理IO的产生:

SQL> conn test/test@testrac2
"UsF+?S)j.u8K0已连接。
2RHm d)h8q`0E ^0SQL> select instance_name from v$instance;

INSTANCE_NAMEITPUB个人空间;Y(lU yt
----------------
M/D'z$d3Ge0testrac2

SQL> select * from tab;

显然实例2上的操作被阻塞了,现在启动实例3,看看实例3上是否也会阻塞物理IO操作:

SQL> host
+m9\(ZG2T$zuV0$ srvctl start inst -d testrac -i testrac3

SVRCTL命令居然也被HANG住了,那么SUSPEND是否和QUIESCE一样,禁止没有启动的实例启动呢,通过sqlplus直接连接实例3:

$ sqlplus /nolog

SQL*Plus: Release10.2.0.3.0 - Production on星期五2月20 19:23:02 2009

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

SQL> conn sys@testrac3 as sysdba
]yNS7I01

文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/7_databases/oracle/oraclejs/20091217/184945_2.html
>输入口令:
f_O"gB Y.]O0已连接。ITPUB个人空间b \5mn-Tx [!L(K
SQL> select instance_name from v$instance;

INSTANCE_NAME
p H \,X!MT0----------------
&^+S.q/{%}J+W%qd0testrac3

SQL> conn test/test@testrac3
*A_ID7ic9IjLF0ERROR:ITPUB个人空间)_ D&_~q]|P
ORA-01033: ORACLE initialization or shutdown in progress


/D DU6dC&Tt0警告:您不再连接到ORACLE。

可以看到,数据库还没有完全被打开,就处于被阻塞状态了。

登陆实例3:

SQL> conn sys@testrac3 as sysdba
W,@|#p/r5@ N;SSU0输入口令:
Q:TG)gyc~a/I0已连接。ITPUB个人空间0ACY M7pqT1v
SQL> select instance_name, status, database_status from v$instance;

INSTANCE_NAME    STATUS       DATABASE_STATUS
u0TA(C&u4Z8fm0---------------- ------------ -----------------
SM9^`:t0testrac3         STARTED      ACTIVE

SQL> conn sys@testrac1 as sysdba
h!}ls+v:Ft0输入口令:
n'L$v*? e3w0已连接。
`#e S&V-`{~*Va0SQL> select instance_name, status, database_status from v$instance;

INSTANCE_NAME    STATUS       DATABASE_STATUSITPUB个人空间P,mH3IU\'vRK
---------------- ------------ -----------------ITPUB个人空间S+y0t#@H4g [
testrac1         OPEN         SUSPENDED

SQL> conn sys@testrac2 as sysdbaITPUB个人空间$X0b sAe-t
输入口令:ITPUB个人空间4f4e sy \4i7q
已连接。
s\+\.i8N,r2Ux2JG0SQL> select instance_name, status, database_status from v$instance;

INSTANCE_NAME    STATUS       DATABASE_STATUSITPUB个人空间|h G:P7j3|)|
---------------- ------------ -----------------
4N};y~b!h n0testrac2         OPEN         SUSPENDED

显然SUSPEND对所有当前运行的RAC实例生效,而新启动的实例,数据库状态并非SUSPEND,而是ACTIVE,但是和文档描述不同的是,这个实例根本无法成功的启动,从这一点上将,SUSPEND还是会对整个数据库起作用的。

同样在实例1和实例2上,都可以执行RESUME命令,来恢复数据库状态:

SQL> conn sys@testrac2 as sysdbaITPUB个人空间S,s-XOS4~:L+S
输入口令:
xvG`3YxT#c3@ q0已连接。
R-B$BNh"z t'e.A0SQL> alter system resume;

系统已更改。


文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/7_databases/oracle/oraclejs/20091217/184945_3.html
  • 大小: 55.9 KB
  • 大小: 67.6 KB
分享到:
评论

相关推荐

    《数据库系统概论》第三章例题 Student Course SC 三张 基础表 源代码

    在第五版的第三章中,作者通过具体的例子介绍了数据库设计的基本原理,其中包括了如何创建和操作数据库表等内容。本章节将重点分析该书中所提及的“Student”、“Course”和“SC”三张基础表的设计及其相关源代码。 ...

    数据库启动需要三个步骤

    数据库启动过程是数据库管理系统中至关重要的环节,尤其是对于Oracle数据库来说,其启动步骤涉及到了实例创建、数据库安装和数据库打开等多个阶段。以下是针对标题和描述中提到的三个关键步骤的详细解释: 1. 创建...

    深刻理解Oracle数据库的启动和关闭

    首先,Oracle 数据库启动过程通常涉及三个主要步骤:创建实例、安装数据库和打开数据库。在Oracle 8i 及之后的版本中,Server Manager 的功能被整合到 SQL*Plus 中,使得数据库的管理和操作更加集中和方便。同时,...

    oracle数据库的启动与关闭

    Oracle数据库的启动分为三个阶段:启动例程、装载数据库和打开数据库。首先,启动例程涉及读取初始化参数文件,分配内存给SGA(系统全局区)和PGA(程序全局区),启动后台进程,并开启跟踪和预警文件。初始化参数...

    Oracle 数据库管理.pdf

    数据库实例和数据库的启动与关闭是日常管理中常见的操作。实例是Oracle数据库的内存结构和后台进程的集合,而数据库是指存储在磁盘上的数据文件、控制文件和在线重做日志文件的集合。启动数据库的过程通常包括以下...

    Oracle第8章数据库的启动与关闭.pptx

    理解数据库的不同状态及其转换对数据库管理员来说至关重要,例如NOMOUNT、MOUNT和OPEN状态,每个状态都对应不同的操作权限和数据库功能。熟练掌握这些操作,能有效保障数据库的稳定运行和数据的安全性。

    数据库的三大范式及五大约束.docx

    外键约束的参照操作有四种:RESTRICT、CASCADE、SET NULL 和 NO ACTION。RESTRICT 拒绝参照表删除或更新参照字段;CASCADE 删除或更新参照表的参照字段时,外键表中的外键同步删除更新;SET NULL 删除或更新参照表的...

    数据库实验3报告(数据完整性与安全性控制).docx

    本次实验主要涉及了数据库中关于数据完整性和安全性的关键概念和操作,具体包括数据约束的设定、表的创建与删除、权限的管理等多个方面。以下是对实验内容的详细解释: 1. 数据完整性: - 非空约束:非空约束(NOT...

    Oracle数据库的启动和关闭

    数据库的启动分为三个阶段:创建实例、安装数据库和打开数据库。启动命令STARTUP可以根据需要选择不同的选项: 1. STARTUP NOMOUNT:只创建实例,不安装或打开数据库。这一步骤用于初始化系统全局区(SGA)并读取...

    2023年全国计算机三级数据库考点汇总.doc

    36. CASCADE和RESTRICT是数据库约束的两种方式,分别表示级联操作和限制操作。 37. 分槽的页结构用于将不同长度的记录组织在同一磁盘块中。 38. 分布式数据库系统中,数据可以分割成逻辑单位,即结点,分派到不同...

    实验二 数据库管理1

    每种模式对应不同的数据库状态,适用于不同的操作场景。 - 使用ALTER DATABASE命令可以改变数据库的状态,如CLOSE、MOUNT、OPEN以及OPEN READ ONLY。 - 启动数据库时,可以使用FORCE、RESTRICT、PFILE等选项,以...

    Oracle数据库startup和shutdown方式[文].pdf

    3. **打开数据库**:STARTUP命令(无参数)执行上述两个步骤并打开数据库,使得数据文件和重做日志可访问,数据库进入服务状态。 不同的启动选项包括: - **STARTUP NOMOUNT**:只创建实例,不安装数据库。 - **...

    数据库原理模拟试卷三(答案)(常用版).doc

    数据库原理模拟试卷三的答案涵盖了多个数据库管理系统的理论和实践知识点,包括数据模型、SQL操作、关系操作、数据库设计...在实际工作中,掌握这些知识可以帮助开发人员和数据库管理员更有效地管理和维护数据库系统。

    修改数据库最大连接数以及linux系统下ORACLE数据库启动多实例参照.pdf

    Oracle 数据库有多种启动和关闭方式,包括: 1. startup nomount:非安装启动,仅需要init.ora 文件。 2. startup mount dbname:安装启动,数据库日志归档、数据库恢复、重新命名一些数据库文件。 3. startup open...

    数据库启动与关闭.pptx

    在启动数据库之前,需要确保监听服务和数据库服务已开启。在Windows系统中,可以通过命令行工具LSNRCTL启动监听服务,使用ORACLE命令启动数据库服务。或者通过服务管理窗口进行操作。 在SQL*Plus中,可以使用...

    LGWR & ARCH 数据库的备份与恢复

    Oracle数据库是企业级数据库系统中应用广泛的一种,它提供了强大的备份和恢复机制以保障数据的完整性和可用性。本篇博文介绍了Oracle9i中备份与恢复的概念、策略以及几种备份与恢复的方法。下面将详细阐述所涉及的...

Global site tag (gtag.js) - Google Analytics