Oracle 12c ASM|專題配額組的配額真的管用嗎?

沃趣科技發表於2017-09-01

原文連結

譯者  沃趣科技 周天鵬 


本專題的上一部分中,我介紹了Flex ASM Diskgroup的兩個相關概念,配額組和檔案組。但配額組的配額是否真的寫多少就是多少呢?(還是超出個百分之多少也沒關係)我對此非常好奇。

幸運的是,我又發現了12c ASM相關的值得寫部落格跟大家分享的一些點,所以:

  • 這並不是本專題的最後一章

  • 這篇文章可能比前兩篇稍短(因為把這篇文章和我想寫的下一篇文章結合在一起真的太長了......)


配額組的配額是強制的嗎?


其實配額組的目的就是限制磁碟組的配額,就像檔案系統那樣。這非常有意思,因為對於存放在某磁碟組中的某CDB/PDB(即使是non-CDB),你都可以給一個硬的限制來限制這個庫在這個磁碟組上可使用的儲存空間。

我將要回答的問題是:這個配額真的管用嗎?如果你看了前兩部分,你應該知道,我在Flex ASM Diskgroup上建立了兩個資料庫:ORCL和CDB,都是容器資料庫。

我的檔案組當前狀態是醬紫的:


ASMCMD> lsfg
File Group         Disk Group  Quota Group  Used Quota MB  Client Name    Client Type  
DEFAULT_FILEGROUP  FLEX        GENERIC      2488                                       
CDB_CDB$ROOT       FLEX        QG_CDB       6744           CDB_CDB$ROOT   DATABASE     
CDB_PDB$SEED       FLEX        QG_CDB       1656           CDB_PDB$SEED   DATABASE     
PDB1               FLEX        QG_CDB       1784           PDB1           DATABASE     
ORCL_CDB$ROOT      FLEX        GENERIC      9104           ORCL_CDB$ROOT  DATABASE     
ORCL_PDB$SEED      FLEX        GENERIC      1616           ORCL_PDB$SEED  DATABASE     
PDB1_0001          FLEX        GENERIC      9424           PDB1           DATABASE   


名為CDB的資料庫用的是叫做QG_CDB的配額組,ORCL那個庫沒指定配額組,所以還用的預設配額組。我想讓這個庫使用新建的QG_ORCL這個配額組,因為我想讓不同的庫用不同的配額組。


ASMCMD> mkqg -G FLEX QG_ORCL quota 20G
Diskgroup altered.
ASMCMD> lsqg
Group_Num  Quotagroup_Num  Quotagroup_Name  Incarnation  Used_Quota_MB  Quota_Limit_MB  
2          1               GENERIC          1            22632          0               
2          2               QG_ORCL          7            0              20480           
2          3               QG_CDB           1            10184          20480           
ASMCMD> 


如果你看過前兩部分,應該還記得名為Flex的Flex Diskgroup的磁碟組號原本是5,但重啟機器後,磁碟組號從5變成了2。


SQL> select group_number, name, state, type from v$asm_diskgroup
2  where group_number = 2;

GROUP_NUMBER NAME                           STATE       TYPE
------------ ------------------------------ ----------- ------
2 FLEX                           CONNECTED   FLEX


不要為此困擾。

回到剛才的例子:檔案組ORCL_CDB$ROOT, ORCL_PDB$SEED和PDB1_0001還不屬於QG_ORCL。這可以透過ASMCMD使用3個簡單的mvfg命令來修改,或者使用sql也可以。移動命令完成後,配額組仍然後空間剩餘(雖然已經不多了)。


ASMCMD> mvfg -G flex --filegroup PDB1_0001 QG_ORCL
Diskgroup altered.
ASMCMD> mvfg -G flex --filegroup ORCL_PDB$SEED  QG_ORCL
Diskgroup altered.
ASMCMD> mvfg -G flex --filegroup ORCL_CDB$ROOT  QG_ORCL
Diskgroup altered.
ASMCMD> lsfg
File Group         Disk Group  Quota Group  Used Quota MB  Client Name    Client Type  
DEFAULT_FILEGROUP  FLEX        GENERIC      2488                                       
CDB_CDB$ROOT       FLEX        QG_CDB       6744           CDB_CDB$ROOT   DATABASE     
CDB_PDB$SEED       FLEX        QG_CDB       1656           CDB_PDB$SEED   DATABASE     
PDB1               FLEX        QG_CDB       1784           PDB1           DATABASE     
ORCL_CDB$ROOT      FLEX        QG_ORCL      9104           ORCL_CDB$ROOT  DATABASE     
ORCL_PDB$SEED      FLEX        QG_ORCL      1616           ORCL_PDB$SEED  DATABASE     
PDB1_0001          FLEX        QG_ORCL      9424           PDB1           DATABASE     
ASMCMD> lsqg
Group_Num  Quotagroup_Num  Quotagroup_Name  Incarnation  Used_Quota_MB  Quota_Limit_MB  
2          1               GENERIC          1            2488           0               
2          2               QG_ORCL          7            20144          20480           
2          3               QG_CDB           1            10184          20480           
ASMCMD> 


現在我要把它佔用的儲存空間撐到配額組的配額極限,來看下配額組是不是真的靠譜。方法當然很簡單:在ORCL庫中建立一個表空間嘛。


SQL> show con_name

CON_NAME
------------------------------
PDB1
SQL> create tablespace userdata datafile size 500m;
create tablespace userdata datafile size 500m
*
ERROR at line 1:
ORA-01119: error in creating database file '+FLEX'
ORA-17502: ksfdcre:4 Failed to create file +FLEX
ORA-15437: Not enough quota available in quota group QG_ORCL.

SQL> 


這報錯和我們之前建立pdb時指定storage子句的時候非常類似。但是,對於ASM上的非資料檔案(例如引數檔案,日誌檔案等)來說會怎樣呢?


SQL> get /tmp/non_data_files

  1  SELECT
  2      f.group_number as DG_NUMBER,
  3      f.file_number,
  4      f.incarnation as file_incarnation,
  5      f.type,
  6      fg.name as filegroup_name,
  7      a.name as file_name
  8  FROM
  9      v$asm_alias a,
 10      v$asm_file f,
 11      v$asm_filegroup fg
 12  WHERE
 13          a.group_number = f.group_number
 14      AND
 15          a.file_number = f.file_number
 16      AND
 17          a.file_incarnation = f.incarnation
 18      AND
 19          fg.group_number = f.group_number
 20      AND
 21          fg.filegroup_number = f.filegroup_number
 22      AND
 23*         f.type  'DATAFILE';
SQL> start /tmp/non_data_files

 DG_NUMBER FILE_NUMBER FILE_INCARNATION TYPE            FILEGROUP_NAME       FILE_NAME
---------- ----------- ---------------- --------------- -------------------- ------------------------------
         2         282        948453843 PASSWORD        DEFAULT_FILEGROUP    pwdorcl.282.948453843
         2         287        948462715 PASSWORD        DEFAULT_FILEGROUP    pwdorcl.287.948462715
         2         293        948462849 CONTROLFILE     ORCL_CDB$ROOT        Current.293.948462849
         2         292        948462849 CONTROLFILE     ORCL_CDB$ROOT        Current.292.948462849
         2         294        948462855 ONLINELOG       ORCL_CDB$ROOT        group_2.294.948462855
         2         295        948462855 ONLINELOG       ORCL_CDB$ROOT        group_1.295.948462855
         2         296        948462861 ONLINELOG       ORCL_CDB$ROOT        group_1.296.948462861
         2         297        948462861 ONLINELOG       ORCL_CDB$ROOT        group_2.297.948462861
         2         304        948463227 ONLINELOG       ORCL_CDB$ROOT        group_3.304.948463227
         2         305        948463231 ONLINELOG       ORCL_CDB$ROOT        group_3.305.948463231
         2         306        948463239 ONLINELOG       ORCL_CDB$ROOT        group_4.306.948463239
         2         307        948463243 ONLINELOG       ORCL_CDB$ROOT        group_4.307.948463243
         2         298        948462891 TEMPFILE        ORCL_CDB$ROOT        TEMP.298.948462891
         2         302        948462937 TEMPFILE        ORCL_PDB$SEED        TEMP.302.948462937
         2         308        948463249 PARAMETERFILE   ORCL_CDB$ROOT        spfile.308.948463249
         2         312        948464283 TEMPFILE        PDB1_0001            TEMP.312.948464283

16 rows selected.


新建一個online redo log試試:


SQL> alter database add logfile thread 1 size 1g;
alter database add logfile thread 1 size 1g
*
ERROR at line 1:
ORA-00301: error in adding log file '+FLEX' - file cannot be created
ORA-17502: ksfdcre:4 Failed to create file +FLEX
ORA-15437: Not enough quota available in quota group QG_ORCL.


這些都證明了配額組確實是強制的。至少對於上面的例子來說是的。


小  結


對於配額組來說,確實還有很多東中西值得探索,例如:自動擴充套件的資料檔案、歸檔日誌、臨時檔案以及undo檔案等等。但是初步看來,配額組確實還不錯。

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

相關文章