資料庫共有三種狀態:quiesce、resrict、suspend

kasabulanka888發表於2017-09-19

資料庫共有三種狀態:quiesce、resrict、suspend

一、quiesce模式

首先來說說資料庫的靜默狀態

靜默狀態是指資料庫中只存在sys和system使用者建立的活動會話。只有dba能繼續運算元據庫。
此狀態下可以進行一些在非靜默狀態下執行可能存在不安全因素的特殊操作。
對於必須持續執行的系統,在不關閉資料庫就能執行某些特殊操作的功能十分重要。

靜默狀態下資料庫資源管理器(database resource manager)將阻止sys、system使用者以外的使用者提交操作。

進入靜默狀態的方法為:
alter system quiesce restricted;(sys或system使用者執行)

進入靜默模式的過程為:資料庫資源管理器控制所有例項,阻止非活動會話恢復為活動狀態。普通使用者無法執

行新的事務、查詢、資料提取和pl/sql過程。如果一個查詢是由多個連續的 OCI 資料提取操作執行的,Oracle

不會等待所有的資料提取全部結束。Oracle 只會等待當前的資料提取結束並阻塞之後的資料提取。Oracle 還

會等待所有擁有共享資源的會話(SYS 及 SYSTEM 使用者的資源除外)釋放資源。上面提到的所有等待都結束之

後,Oracle 可以將資料庫置為靜默狀態,並結束 QUIESCE RESTRICTED 語句。

如果資料庫的某個例項是在共享服務模式(shared server mode)下執行的,Oracle 透過資料庫資源管理器(

Database Resource Manager)阻止使用者(SYS 及 SYSTEM 使用者除外)登入到此例項。如果例項執行在專用服務

模式(dedicated server mode)下,Oracle 不會對此例項的使用者登入進行限制。

靜默狀態恢復到正常狀態方法為:
alter system unquiesce

可以透過v$instance等檢視得到資料庫狀態。

 

具體例項為:

Microsoft Windows XP [版本 5.1.2600]
(C) 版權所有 1985-2001 Microsoft Corp.

D:\Documents and Settings\tian>set oracle_sid=test_database

D:\Documents and Settings\tian>sqlplus /nolog

SQL*Plus: Release 9.2.0.1.0 - Production on 星期五 10月 19 09:19:50 2012

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

SQL> conn /as sysdba
已連線。
SQL> alter system quiesce restricted
  2  ;
alter system quiesce restricted
*
ERROR 位於第 1 行:
ORA-25507: 沒有使資源管理器一直處於開啟狀態
//如果是9i,那麼必須設定resource_limit引數為true,並設定resource_manager_plan引數指向一個資源計劃

SQL> alter system set resource_manager_plan='SYSTEM_PLAN' scope=spfile sid='JLRP
S';
//由於資料庫沒有開啟資源管理器,無法執行這個操作。需要開啟後重啟才生效。

系統已更改。

SQL> shutdown immediate;
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啟動。

Total System Global Area  126950220 bytes
Fixed Size                   453452 bytes
Variable Size             109051904 bytes
Database Buffers           16777216 bytes
Redo Buffers                 667648 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL> alter system quiesce restricted;

系統已更改。

SQL> conn
^C
//此處證明靜默模式下其他使用者不能登入資料庫


D:\Documents and Settings\tian>sqlplus /nolog

SQL*Plus: Release 9.2.0.1.0 - Production on 星期五 10月 19 09:32:07 2012

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

SQL> conn /as sysdba
已連線。
SQL> select * from v$instance;

INSTANCE_NUMBER INSTANCE_NAME
--------------- ----------------
HOST_NAME
----------------------------------------------------------------
VERSION           STARTUP_TI STATUS       PAR    THREAD# ARCHIVE LOG_SWITCH_
----------------- ---------- ------------ --- ---------- ------- -----------
LOGINS     SHU DATABASE_STATUS   INSTANCE_ROLE      ACTIVE_ST
---------- --- ----------------- ------------------ ---------
              1 test_database
TIANLEI
9.2.0.1.0         19-10月-12 OPEN         NO           1 STARTED
ALLOWED    NO  ACTIVE            PRIMARY_INSTANCE   QUIESCED//處於靜默狀態


SQL> alter system unquiesce;

系統已更改。

SQL> conn scott/tiger
已連線。
SQL> select * from v$instance;

INSTANCE_NUMBER INSTANCE_NAME
--------------- ----------------
HOST_NAME
----------------------------------------------------------------
VERSION           STARTUP_TI STATUS       PAR    THREAD# ARCHIVE LOG_SWITCH_
----------------- ---------- ------------ --- ---------- ------- -----------
LOGINS     SHU DATABASE_STATUS   INSTANCE_ROLE      ACTIVE_ST
---------- --- ----------------- ------------------ ---------
              1 test_database
TIANLEI
9.2.0.1.0         19-10月-12 OPEN         NO           1 STARTED
ALLOWED    NO  ACTIVE            PRIMARY_INSTANCE   NORMAL//恢復正常狀態了


在設定靜默狀態時,正在登陸的普通使用者被掛起,無法進行操作了。
而當狀態改為正常後,普通使用者的會話繼續執行。
以上的實驗是在oracle9i環境下操作的,在10g中,必須開啟資料庫資源管理器的限制已經被取消了。因此,向

上面實驗中的操作其實是沒意義的,因為靜默狀態和restricted狀態的區別就在於其不用停掉資料庫而執行操

作。

在RAC環境下某個節點設定了靜默狀態後,其他節點也是能夠監測到的。


二、restrict模式:
直接實驗

1.會話1中進行操作:

SQL> startup restrict
ORACLE 例程已經啟動。

Total System Global Area  126950220 bytes
Fixed Size                   453452 bytes
Variable Size             109051904 bytes
Database Buffers           16777216 bytes
Redo Buffers                 667648 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL> select * from v$instance;

INSTANCE_NUMBER INSTANCE_NAME
--------------- ----------------
HOST_NAME
----------------------------------------------------------------
VERSION           STARTUP_TI STATUS       PAR    THREAD# ARCHIVE LOG_SWITCH_
----------------- ---------- ------------ --- ---------- ------- -----------
LOGINS     SHU DATABASE_STATUS   INSTANCE_ROLE      ACTIVE_ST
---------- --- ----------------- ------------------ ---------
              1 jlrps
TIANLEI
9.2.0.1.0         19-10月-12 OPEN         NO           1 STARTED
RESTRICTED NO  ACTIVE            PRIMARY_INSTANCE   NORMAL

SQL> create user tes1 identified by tes1;

使用者已建立

SQL> grant create session to tes1;

授權成功。


2.會話2中進行操作:
SQL> conn tes1/tes1
ERROR:
ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege
SQL> conn scott/tiger
已連線。
SQL> select * from emp;

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM
---------- ---------- --------- ---------- ---------- ---------- ----------
    DEPTNO
----------
      7369 SMITH      CLERK           7902 17-12月-80        800
        20

      7499 ALLEN      SALESMAN        7698 20-2月 -81       1600        300
        30

      7521 WARD       SALESMAN        7698 22-2月 -81       1250        500
        30
……//結果省略,scott使用者擁有dba角色(RESTRICTED SESSION privilege)

3.會話1中操作:
SQL> shutdown immediate;
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啟動。

Total System Global Area  126950220 bytes
Fixed Size                   453452 bytes
Variable Size             109051904 bytes
Database Buffers           16777216 bytes
Redo Buffers                 667648 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL>

4.會話2中操作:
SQL> conn tes1/tes1
已連線。

可以看到,restrict模式需要重啟資料庫,且擁有RESTRICTED SESSION privilege的使用者在此模式可以登入系

統進行操作。
而quiese模式就死板多了,除了sys、system都不行,不過也更安全。


三、suspend模式:

面向所有使用者,限制I/O操作。當我們需要進行物理讀操作時,會話會暫停。

SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啟動。

Total System Global Area  126950220 bytes
Fixed Size                   453452 bytes
Variable Size             109051904 bytes
Database Buffers           16777216 bytes
Redo Buffers                 667648 bytes
資料庫裝載完畢。
資料庫已經開啟。


SQL> alter system suspend;

系統已更改。

SQL> select * from scott.emp;

//一直沒有查詢結果。


這個問題還真不會解決了。將資料庫重啟再操作還是無效的

 


說到了資料庫啟停,再複習一下:
啟動型別:
startup nomount  --啟動例項
startup mount    --啟動例項、裝載
startup (normal) --啟動例項、裝載、開啟資料庫
startup pfile='xx/xx/xx.ora'  --引數檔案啟動
startup restrict --限制模式,無restricted session許可權的使用者無法登入
startup force    --強制啟動,正常啟動不了才用
startup open recover --啟動例項,裝載資料庫和啟動完全介質恢復
停止型別:
shutdown (normal) --正常模式
shutdownimmediate --立即模式
shutdown abort    --中斷模式,再次啟動時可能需要恢復
alter system quiese restricted; --停頓資料庫,只有sys、system使用者可操作
  掛起資料庫
   --暫停對資料檔案和控制檔案的所有IO,可以在無IO干擾情況先進行備份
   --掛起命令可以掛起資料庫而並不指定一個例項
   ALTER SYSTEM SUSPEND;
   --恢復到非掛起狀態
   ALTER SYSTEM RESUME;  
   --檢視掛起狀態
   SELECT DATABASE_STATUS FROM V$INSTANCE;

 

參考文章http://space.itpub.net/4227/viewspace-591661
http://blog.csdn.net/nsj820/article/details/6573525

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11297314/viewspace-2145137/,如需轉載,請註明出處,否則將追究法律責任。

相關文章