在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