Oracle 12c系列(三)|儲存資源隔離 Flex Diskgroup
作者 姚崇
出品 沃趣技術
在12cR2版本中,我們可以在一個ASM Diskgroup提供不同的冗餘級別和配額給不同的資料庫使用。提到Quota會讓人立即想到建立使用者在表空間上的配額限制,其實有點類似。
Flex磁碟組中檔案的冗餘是靈活的,並允許在資料庫級別進行儲存管理。你可以以資料庫為粒度在磁碟組內做配額限制,並且你可以給不同的檔案組定義不同的冗餘度(即不同的資料庫、PDB可以有不同的冗餘度)。
換句話說就是,你可以在同一個flex磁碟組裡建兩個庫,資料庫1是Normal冗餘度,資料庫2是High冗餘度。如果資料庫2是一個CDB,你甚至可以以PDB為粒度再去管理設定檔案相關屬性。
Flex Diskgroup要求最少需要3個故障組。前提資料庫版本是12.2版本時,Flex Diskgroup一般可以容忍兩個故障組丟失。但是,如果故障組少於5個,則只允許一個故障組丟失。
注1:下文中每個所提到的磁碟組都針對於Flex Diskgroup,並且磁碟組一般給資料庫檔案使用,給ASM Volume和Cluster使用的情況我們不做討論。
注2:下文提到的磁碟組都是Flex或Extended屬性的磁碟組。
下面是關於Flex Diskgroup、Quota Group、File Group 之間的關係。
1、一個檔案組只能所屬於一個配額組,一個配額組可以包含多個檔案組。一個磁碟組可以擁有多個檔案組,一個檔案組只能所屬於一個磁碟組。
2、一個檔案組只能描述一個file實體(PDB, CDB, volume, or cluster),一個實體可以使用多個檔案組。通常用磁碟組儲存我們的資料庫物件,也就是說每個資料庫都至少有一個單獨的檔案組。
3、建立檔案組時預設會指定到名字為generic的無上限的配額組。並且至少含有一個檔案組,即預設名為DEFAULT_FILEGROUP。
配額組不能跨多個磁碟組,只能所屬於一個磁碟組。
4、預設磁碟組的au大小是4M。
5、配額是一個物理空間,每個配額組有兩個引數描述使用情況,USED_QUOTA_MB、QUOTA_LIMIT_MB。
6、磁碟組的每個檔案組都有自己的冗餘屬性設定。
7、建立新資料庫時,client_name(db name)和Filegroup Name一樣,如果已經有相同client_name存在時,Oracle自動取別名。
用到sql:
col group_name FOR a10 col quota_name FOR a20 col FILE_GROUP FOR a120 col NAME FOR a10 SELECT G.NAME AS GROUP_NAME, Q.NAME AS QUOTA_NAME, Q.USED_QUOTA_MB, Q.QUOTA_LIMIT_MB, F.FILE_GROUP FROM V$ASM_DISKGROUP G LEFT JOIN V$ASM_QUOTAGROUP Q ON G.GROUP_NUMBER = Q.GROUP_NUMBER LEFT JOIN (SELECT QUOTAGROUP_NUMBER, LISTAGG(PROPERTY, '|') WITHIN GROUP(ORDER BY PROPERTY) AS FILE_GROUP FROM (SELECT ('NAME=>' || NAME || ';' || 'DB_NAME=>' || NVL(CLIENT_NAME, 'no_db') || ';' || 'USED_QUOTA_MB=>' || USED_QUOTA_MB) AS PROPERTY, QUOTAGROUP_NUMBER FROM V$ASM_FILEGROUP) GROUP BY QUOTAGROUP_NUMBER) F ON F.QUOTAGROUP_NUMBER = Q.QUOTAGROUP_NUMBER order by group_name;
col FILE_NAME for a20 col client_name for a30 col quota_name for a15 col GROUP_NAME for a20 set pages 100 col name for a30 SELECT G.NAME AS GROUP_NAME, Q.QUOTAGROUP_NUMBER, Q.NAME AS QUOTA_NAME, Q.USED_QUOTA_MB, Q.QUOTA_LIMIT_MB, F.NAME AS FILE_NAME, F.CLIENT_NAME, F.USED_QUOTA_MB FROM V$ASM_DISKGROUP G LEFT JOIN V$ASM_QUOTAGROUP Q ON G.GROUP_NUMBER = Q.GROUP_NUMBER LEFT JOIN V$ASM_FILEGROUP F ON F.QUOTAGROUP_NUMBER = Q.QUOTAGROUP_NUMBER AND F.GROUP_NUMBER = Q.GROUP_NUMBER ORDER BY GROUP_NAME, QUOTAGROUP_NUMBER;
1.1 Flex磁碟組管理
丨1.1.1 建立一個Flex磁碟組
首先我們建立一個Flex Diskgroup
/*create a flex diskgroup*/ CREATE DISKGROUP flexc01 FLEX REDUNDANCY failgroup flexc01 disk '/dev/qdata/mpath-1s01.3261.01.dfb1', '/dev/qdata/mpath-1s01.3261.01.dfb2' failgroup flexc02 disk '/dev/qdata/mpath-1s02.3261.01.dfb1', '/dev/qdata/mpath-1s02.3261.01.dfb2' failgroup flexc03 disk '/dev/qdata/mpath-1s03.3261.01.dfb1', '/dev/qdata/mpath-1s03.3261.01.dfb2' ATTRIBUTE 'compatible.asm'='12.2.0.1', 'compatible.rdbms'='12.2.0.1', 'compatible.advm'='12.2.0.1', 'au_size'='1M'; alter diskgroup flexc01 set attribute 'compatible.asm' = '12.2.0.1'; alter diskgroup flexc01 set attribute 'compatible.rdbms' = '12.2.0.1'; alter diskgroup flexc01 set attribute 'disk_repair_time' = '36h';
建立完磁碟組之後預設,有一個預設的名字為GENERIC 的配額組和一個預設名字為DEFAULT_FILEGROUP的檔案組。
Flex磁碟組中required_mirror_free_mb和 useable_file_mb值為0並不是bug,因為Flex冗餘度的磁碟組就應該是這樣。後面我們會使用其他查詢方法來確定你的資料庫的空間使用情況。
丨1.1.2 normal冗餘磁碟組轉換成Flex Diskgroup
我們可以使用Alter Diskgroup 語句來完成Normal Redundancy或High Redundancy冗餘級別的磁碟組向Flex冗餘級別的磁碟組轉換成,當然External冗餘級別是不能和Flex相互轉換的。當轉換磁碟組屬性時,前提是磁碟組至少有三個故障組,並且必須Mount到受限模式(RESTRICTE)。
檢視當前Diskgroup情況:
SQL>ALTER DISKGROUP normaldg dismount; SQL>ALTER DISKGROUP normaldg MOUNT RESTRICTED;
SQL>ALTER DISKGROUP normaldg CONVERT REDUNDANCY TO FLEX;
SQL>ALTER DISKGROUP normaldg dismount; SQL>ALTER DISKGROUP normaldg mount;
至此一個Normal冗餘級別的磁碟組向Flex磁碟組轉換完成。
1.2配額組與檔案組之間管理
丨1.2.1 建立一個配額組
alter diskgroup flexc01 add quotagroup qg_cdb set quota = 20g;
丨1.2.2 將檔案組從一個配額組移動到另一個配額組
首先我們將Flexc01磁碟組中的File_test 檔案組移動到Mornaldg磁碟組中的qua_normal01 quotagroup中。
看來跨磁碟組是不行的,(後面也證明了,Move Filegroup並不是物理移動,僅僅是更新下後設資料的資訊而跨磁碟組肯定要物理移動)。
下面我們嘗試將ORCL_PDB$SEED file group移動到QG_CDB中。
alter diskgroup FLEXC01 move filegroup ORCL_PDB$SEED to QG_CDB;
命令執行成功,看到了ORCL_PDB$SEED已經所屬於QG_CDB了。並且可以看到GENERIC的USED_QUOTA_MB使用量減少,減少的部分正是ORCL_PDB$SEED的大小。
然後我又將ORA_PDB$SEED移動到QUO_TEST中,可以看到奇怪的現象,當前配額限制是10M,居然能將1496M的檔案組移動到其中,難道這不是硬限制或者是12.2.0.1中的Bug,到這裡從官方文件中查詢了如下一句話,A file group can be moved from one quota group to another, regardless whether or not the target quota group has enough space for the file group.
同樣我們可以用asmcmd命令完成move操作:
ASMCMD> mvfg -G flexc01 --filegroup ORCL_PDB$SEED QG_CDB;
丨1.2.3 修改檔案組屬性
更改到配額組
ALTER DISKGROUP flexc01 MODIFY FILEGROUP CDB1PDB SET 'quota_group' = 'QUO_TEST';
修改檔案組中資料檔案冗餘級別
select f.name as filegroup,f.CLIENT_NAME,p.file_type,p.name,p.value from v$asm_filegroup f , v$asm_filegroup_property p where p.GROUP_NUMBER = f.GROUP_NUMBER and p.FILEGROUP_NUMBER = f.FILEGROUP_NUMBER and f.name = 'CDB1PDB' and p.name='REDUNDANCY';
alter diskgroup flexc01 modify filegroup CDB1PDB set 'datafile.redundancy'='high';
1.3資料庫與檔案組之間的管理
丨1.3.1 將資料庫新增到另一個檔案組
我建立的PDB名字CDB1PDB,現在將其新增到FILE_TEST中。
ALTER DISKGROUP flexc01 ADD FILEGROUP FILE_CDB1PDB DATABASE CDB1PDB SET 'quota_group' = 'QUO_TEST';
丨1.3.2 刪除一個檔案組
alter diskgroup flexc01 drop filegroup CDB1PDB cascade;
因為配額空間不足,或許現在還不太友好。
當然,檔案組並沒有變。下面我們刪除另一個檔案組。
alter diskgroup flexc01 drop filegroup FILE_CDB1PDB cascade;
OK,被刪除的檔案組不在了
我們也可以用ASMcmd命令管理Flex Diskgroup,命令如下:
ASMCMD> help chqg chfg lsqg lsfg mkqg mkfg rmqg rmfg mvfg;
可以看到並不能mv一個qg。
相關檢視:
V$ASM_QUOTAGROUP V$ASM_FILEGROUP V$ASM_FILEGROUP_PROPERTY V$ASM_FILEGROUP_FILE
1.4 Extended DiskGroups
Oracle擴充套件磁碟組具有Flex磁碟組的所有特性,其專門為擴充套件叢集環境設計使用,其中包含跨越多個物理分離站點的節點。
下面是擴充套件磁碟組的一些屬性:
1、其冗餘級別是EXTENDED REDUNDANCY,且每個磁碟組中的檔案組都有他自己的屬性。
2、一個擴充套件的磁碟組可以容忍整個站點的丟失,以及另一個站點中最多兩個故障組的丟失(high)。這就意味著extended diskgroup不僅容忍故障組級別的資料故障,而且還允許站點級別的故障。
3、所有的資料站點(data sites)建立時,必須有相同數量故障組。配額組是針對於每個磁碟組而不是站點。
配額組限制是所有站點所有副本所需的物理空間。比如有兩個資料站點。一個6M的檔案以normal級別儲存,那麼所需要的配額空間是24M。
4、必須有三個站點、兩個資料站點和一個仲裁站點,以建立一個擴充套件磁碟組。每個資料站點應該有三個故障組,仲裁站點應該有一個故障組。
5、COMPATIBLE.ASM和COMPATIBLE.RDBMS引數必須設定12.2以上。
6、AU最小是4M。
7、和flex diskgroup不同,extended disk不允許其他任何形式的磁碟組向其轉換。
/*CREATE AN EXTENDED DISKGROUP*/ SQL> CREATE DISKGROUP extended_site_data EXTENDED REDUNDANCY SITE HZ FAILGROUP fg1 DISK '/devices/disks/disk01' FAILGROUP fg2 DISK '/devices/disks/disk02' FAILGROUP fg3 DISK '/devices/disks/disk03' SITE BJ FAILGROUP fg4 DISK '/devices/disks/disk04' FAILGROUP fg5 DISK '/devices/disks/disk05' FAILGROUP fg6 DISK '/devices/disks/disk06' SITE VT QUORUM FAILGROUP fg7 DISK '/devices/disks/disk07';
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/196700/viewspace-2154401/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 12c系列(四)|資源隔離之IO、記憶體、CPUOracle記憶體
- 【oracle 12c asm專題】flex diskgroup相關概念OracleASMFlex
- 由淺入深 docker 系列: (5) 資源隔離Docker
- 資源隔離技術之記憶體隔離記憶體
- Docker實踐(5)—資源隔離Docker
- 8.1 Oracle資料庫識別不了儲存Diskgroup ORA-01078,需要MountOracle資料庫
- redis限制請求頻率及資源隔離Redis
- 儲存系列1-openfiler開源儲存管理平臺實踐
- ORACLE的隔離級別Oracle
- ORACLE資料庫事務隔離級別Oracle資料庫
- MySQL入門系列:儲存程式(三)之儲存過程簡介MySql儲存過程
- 資料庫隔離資料庫
- 基於hadoop_yarn的資源隔離配置HadoopYarn
- 白話 Linux 容器資源的隔離限制原理Linux
- 【Web總結】資源儲存Web
- Oracle資料庫事務隔離級別概述Oracle資料庫
- oracle隔離級別深究追根Oracle
- 資料庫系列:事務的4種隔離級別資料庫
- 億級流量架構之資源隔離思路與方法架構
- oracle底層字典表obj$及source$與儲存過程procedure系列三OracleOBJ儲存過程
- 混部之殤-論雲原生資源隔離技術之CPU隔離(一)
- Oracle基本資料型別儲存格式淺析(三)——日期型別(三)Oracle資料型別
- 離線儲存manifest
- 四、InnoDB儲存引擎如何利用鎖實現四種事務隔離級別儲存引擎
- Oracle-事務隔離級別Oracle
- Oracle的隔離級別(Isolation Level)Oracle
- 容器化RDS—— 計算儲存分離 or 本地儲存
- Oracle資料儲存結構Oracle
- pins-模組內的程式碼及資源隔離方案
- 微服務的接入層設計與動靜資源隔離微服務
- 在Linux中,如何進行系統資源的隔離?Linux
- 面試被吊打系列 - 事務隔離級別面試
- 資料儲存的三種方式
- 爬蟲系列:使用 MySQL 儲存資料爬蟲MySql
- Web應用中的離線資料儲存Web
- 資料庫事務隔離資料庫
- 資料庫隔離級別資料庫
- MySQL資料庫詳解(三)MySQL的事務隔離剖析MySql資料庫