作者 姚崇
出品 沃趣技术
Flex磁盘组中文件的冗余是灵活的,并允许在数据库级别进行存储管理。你可以以数据库为粒度在磁盘组内做配额限制,并且你可以给不同的文件组定义不同的冗余度( 即不同的数据库、PDB可以有不同的冗余度)。
Flex Diskgroup要求最少需要3个故障组。前提数据库版本是12.2版本时,Flex Diskgroup一般可以容忍两个故障组丢失。但是,如果故障组少于5个,则只允许一个故障组丢失。
下面是关于 Flex Diskgroup、Quota Group、File Group 之间的关系。用到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;首先我们创建一个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冗余度的磁盘组就应该是这样。后面我们会使用其他查询方法来确定你的数据库的空间使用情况。
我们可以使用Alter Diskgroup 语句来完成Normal Redundancy或High Redundancy冗余级别的磁盘组向Flex冗余级别的磁盘组转换成,当然External冗余级别是不能和Flex相互转换的。当转换磁盘组属性时,前提是磁盘组至少有三个故障组,并且必须Mount到受限模式(RESTRICTE)。
SQL>ALTER DISKGROUP normaldg dismount;
SQL>ALTER DISKGROUP normaldg MOUNT RESTRICTED;
SQL>ALTER DISKGROUP normaldg dismount;
SQL>ALTER DISKGROUP normaldg mount;至此一个N ormal冗余级别的磁盘组向Flex磁盘组转换完成 。
1.2配额组与文件组之间管理
丨 1.2.1 创建一个配额组
alter diskgroup flexc01 add quotagroup qg_cdb set quota = 20g;首先我们将Flexc01磁盘组中的File_test 文件组移动到Mornaldg磁盘组中的qua_normal01 quotagroup中。
![]()
下面我们尝试将ORCL_PDB$SEED file group移动到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';
1.3数据库与文件组之间的管理
![]()
丨 1.3.1 将数据库添加到另一个文件组
ALTER DISKGROUP flexc01 ADD FILEGROUP FILE_CDB1PDB DATABASE CDB1PDB SET 'quota_group' = 'QUO_TEST';
![]()
![]()
![]()
我们也可以用ASMcmd命令管理Flex Diskgroup,命令如下:
ASMCMD> help chqg chfg lsqg lsfg mkqg mkfg rmqg rmfg mvfg;相关视图:
V$ASM_QUOTAGROUP V$ASM_FILEGROUP V$ASM_FILEGROUP_PROPERTY V$ASM_FILEGROUP_FILE下 面是扩展磁盘组的一些属性:
![]()
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';
| 作者简介
姚崇·沃趣科技高级数据库技术专家
熟悉Oracle、MySQL数据库内部机制,丰富的Oracle、MySQL故障诊断、性能调优、数据库备份恢复、复制、高可用方案及迁移经验。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29990276/viewspace-2153529/ ,如需转载,请注明出处,否则将追究法律责任。