热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Oracle12cASM专题|FlexDiskgroup相关概念

该部分讲述了配额组和文件组的相关概念与操作。理解这些概念对于理解FlexDiskgr

原文链接 https://martincarstenbach.wordpress.com/2017/07/11/12-2-new-feature-the-flex-asm-disk-group-part-2/

译者  周天鹏 

在上一部分中,我讲了一些基础知识和人们使用ASM Flex Diskgroup一般想达到的目的。这一部分我将介绍一些Flex Diskgroup的相关新概念。

Flex ASM Diskgroup相关新概念

当Flex Diskgroup挂载之后,下一步就是创建一些新的实体(这里的实体指文件组和配额组等)了。首先,需要创建配额组(quota group),顾名思义,配额组可以给组内的实体设定配额(存储空间上限)。你可以选择自己根据自己的需求创建一个配额组,当然也可以不创建,因为Oracle会默认为你创建一个没有存储上限的默认配额组。稍后你将看到,默认配额组将被分配给这个Flex Diskgroup中所有新建的数据库。配额组内部还存在文件组,服务于逻辑上的一组文件(例如属于同一个数据库的一组文件)。看下这篇官方文档(https://docs.oracle.com/database/122/SQLRF/ALTER-DISKGROUP.htm#GUID-22D73AB6-7063-4627-A2ED-18D521ED2557__ADD_FILEGROUP_CLAUSE-5AD3A8CA)就可以知道文件组可以创建给:

* 一个数据库(non-cdb, cdb, pdb)* 一个集群* 一个ASM Volume

记住,Flex Diskgroup的参数compatible.rdbms和compatible.asm必须设置12.2.0.1及以上来排除12c之前版本的数据库。这篇文章中,我打算把所有数据库相关的文件存在文件组中。而且因为我比较喜欢CDB,所以我决定使用这种类型的数据库。

数据库创建

我打算用dbca静默方式在我的Flex Diskgroup上建一个库 。但是在这之前,我需要先连上我的ASM实例创建个配额组,命令如下:

SQL> alter diskgroup flex add quotagroup QG_CDB set quota = 20g;Diskgroup altered.SQL> select QUOTAGROUP_NUMBER,NAME,USED_QUOTA_MB,QUOTA_LIMIT_MB from v$asm_quotagroup;QUOTAGROUP_NUMBER NAME                           USED_QUOTA_MB QUOTA_LIMIT_MB----------------- ------------------------------ ------------- --------------                1 GENERIC                                    0              0                3 QG_CDB                                     0          20480SQL> 

在创建Flex Diskgroup的时候oracle会默认创建一个无存储容量上限的默认配额组。QG_CDB是我创建的配额组。事后回想了以下,我并不认为现在这个阶段需要创建配额组,因为他不会立即被用到。但我当时并不知道……这是后面我用dbca静默创建双节点数据库的命令:

[oracle@rac122pri1 ~]$ dbca -silent -createDatabase -templateName martin_cdb12cr2_001.dbc \> -gdbName CDB -sysPassword secretpwd1 -systemPassword secretpwd2 -storageType ASM \> -diskGroupName FLEX -recoveryGroupName FLEX -sampleSchema true \> -totalMemory 2048 -dbsnmpPassword secretpwd3 -nodeinfo rac122pri1,rac122pri2 \> -createAsContainerDatabase true -databaseConfigType RAC

或许我还需要创建flexreco给我做fast recovery area用, 但这是实验环境,我不想浪费额外的空间。如果你的实验环境空间很充裕,就可以按照你自己的思路做,我的文章并不是指导方针,这只是我对这种新技术的尝鲜。 :-)dbca命令执行完成需要一定的时间。在这期间,我发现数据库好像会自动给cdb的组件创建默认的文件组,并且映射到默认的配额组。查询asm实例我得到如下结果:

SQL> select FILEGROUP_NUMBER, NAME, CLIENT_NAME, USED_QUOTA_MB, QUOTAGROUP_NUMBER from v$asm_filegroup  2  /FILEGROUP_NUMBER NAME                 CLIENT_NAME          USED_QUOTA_MB QUOTAGROUP_NUMBER---------------- -------------------- -------------------- ------------- -----------------               0 DEFAULT_FILEGROUP                                     0                 1               1 CDB_CDB$ROOT         CDB_CDB$ROOT                  6704                 1               2 CDB_PDB$SEED         CDB_PDB$SEED                  1656                 1

就像默认配额组一样,这也是一个默认创建的实体,叫做default filegroup。CDB_CDB$ROOT和CDB_PDB$SEED看来是给新建的数据库用的。如果你之前接触过cdb/pdb你应该很熟悉这些名词。oracle自动给新建的数据库创建默认文件组的功能还是挺不错的,因为这可以省掉我的部分工作。为了验证这一点,再新建一个pdb测试下。我在我的cdb中新建了个pdb叫pdb1。这下可以确定了,create pdb命令完成后,这里有了一个新的文件组:

SQL> select FILEGROUP_NUMBER, NAME, CLIENT_NAME from v$asm_filegroup;FILEGROUP_NUMBER NAME                 CLIENT_NAME---------------- -------------------- --------------------               0 DEFAULT_FILEGROUP               1 CDB_CDB$ROOT         CDB_CDB$ROOT               2 CDB_PDB$SEED         CDB_PDB$SEED               3 PDB1                 PDB1

这个输出结果让我想到了一个问题,这些NAME和CLIENT_NAME看起来无法建立我的CDB和PDB1之间的关系呀。虽然从技术角度看好像没这个必要,但是,我如果有两个PDB(在不同的CDB里)都叫做PDB1怎么办呢?CDB1里的PDB1可能很重要,CDB2里的PDB1可能只是个测试库。一种办法是给这些PDB命名时人工的把CDB名作为前缀或后缀加入名字中(例如,CDB1里的PDB1叫做CDB1_PDB1,CDB2里的PDB1叫CDB2_PDB1)。但是我相信绝大部分人不愿意这么多,因为如果你把CDB1_PDB1拔下来再插入到CDB2中,看起来就很矬了……

插  曲

你是不是也很想知道如果其他CDB中也有一个PDB叫做PDB1,v$asm_filegroup中的信息会是什么样?反正我是很想知道。微调了下我的dbca创建命令,我又创建了一个CDB叫做ORCL。然后我在ORCL里创建了一个叫PDB1的PDB,输出结果如下:

SQL> select filegroup_number, name, client_name, guid from v$asm_filegroup;FILEGROUP_NUMBER NAME                 CLIENT_NAME          GUID---------------- -------------------- -------------------- --------------------------------               0 DEFAULT_FILEGROUP               1 CDB_CDB$ROOT         CDB_CDB$ROOT         4700A987085A3DFAE05387E5E50A8C7B               2 CDB_PDB$SEED         CDB_PDB$SEED         536DF51E8E28221BE0534764A8C0FD81               3 PDB1                 PDB1                 537B677EF8DA0F1AE0534764A8C05729               4 ORCL_CDB$ROOT        ORCL_CDB$ROOT        4700A987085A3DFAE05387E5E50A8C7B               5 ORCL_PDB$SEED        ORCL_PDB$SEED        537E63B952183748E0534764A8C09A7F               6 PDB1_0001            PDB1                 537EB5B87E62586EE0534764A8C055307 rows selected.

很赞,创建pdb的命令并没有报错。新库的CDB$ROOT和PDB$SEED的默认文件组名称本身就不应该有冲突,因为前面有数据库名作为前缀。而且CDB.PDB1和ORCL.PDB1也没有冲突,因为Oracle默认给文件组名后面加了一串数字。但坏消息是,文件组名称变得有点模棱两可了。但是,后来我发现可以用GUID来作为唯一标识符。

SQL> select sys_context('USERENV','CDB_NAME') cdb_name, guid   2  from v$pdbs where guid = '537EB5B87E62586EE0534764A8C05530';CDB_NAME                       GUID------------------------------ --------------------------------ORCL                           537EB5B87E62586EE0534764A8C05530

看起来是时候研究研究GUID了,后面的更新应该很快会讲。

配  额

正如你前面看到的例子,创建配额组并不是必须的。但为了完整性,我需要创建一个。很多文件组和配额组相关的管理命令都可以通过asmcmd实现,如下所示:

ASMCMD> lsqgGroup_Num  Quotagroup_Num  Quotagroup_Name  Incarnation  Used_Quota_MB  Quota_Limit_MB  5          1               GENERIC          1            10016          0               5          3               QG_CDB           1            0              20480           ASMCMD> lsfgFile Group         Disk Group  Quota Group  Used Quota MB  Client Name   Client Type  DEFAULT_FILEGROUP  FLEX        GENERIC      0                                         CDB_CDB$ROOT       FLEX        GENERIC      6704           CDB_CDB$ROOT  DATABASE     CDB_PDB$SEED       FLEX        GENERIC      1656           CDB_PDB$SEED  DATABASE     PDB1               FLEX        GENERIC      1656           PDB1          DATABASE     ASMCMD> help mvfgmvfg        Moves a file group in a disk group to the specified Quota Group.Synopsis        mvfg -G  --filegroup  Description        The options for the mvfg command are described below.        -G diskgroup     - Disk group name.        --filegroup      - File group name.Examples        The following is an example of the mvfg command. The file group        FG1 in the DATA disk group is moved to the Quota Group QG1.        ASMCMD [+] > mvfg -G DATA --filegroup FG1 QG1See Also       mkqg rmqg chqg lsqgASMCMD> 

前两个命令一看就明白了,lsqg就是list quota group的缩写,lsfg也是一样。mvfg虽然要带个参数,但看起来也很直观。现在我需要用mvfg来移动我的文件组到我自定义的配额组中。

ASMCMD> mvfg -G flex --filegroup CDB_CDB$ROOT QG_CDBDiskgroup altered.ASMCMD> mvfg -G flex --filegroup CDB_PDB$SEED QG_CDBDiskgroup altered.ASMCMD> mvfg -G flex --filegroup PDB1 QG_CDBDiskgroup altered.ASMCMD> lsfgFile Group         Disk Group  Quota Group  Used Quota MB  Client Name   Client Type  DEFAULT_FILEGROUP  FLEX        GENERIC      0                                         CDB_CDB$ROOT       FLEX        QG_CDB       6704           CDB_CDB$ROOT  DATABASE     CDB_PDB$SEED       FLEX        QG_CDB       1656           CDB_PDB$SEED  DATABASE     PDB1               FLEX        QG_CDB       1656           PDB1          DATABASE     ASMCMD> lsqgGroup_Num  Quotagroup_Num  Quotagroup_Name  Incarnation  Used_Quota_MB  Quota_Limit_MB  5          1               GENERIC          1            0              0               5          3               QG_CDB           1            10016          20480           ASMCMD> 

命令完成的飞快,所以,这并不是真正的移动数据,仅仅是更新下元数据的信息。mvfg的命令会被翻译成sql,ASM实例的警告日志中可以看到如下信息:

2017-07-04 11:01:53.492000 +01:00SQL> * ASMCMD */ALTER DISKGROUP FLEX MOVE FILEGROUP CDB_CDB$ROOT TO QG_CDBSUCCESS: * ASMCMD */ALTER DISKGROUP FLEX MOVE FILEGROUP CDB_CDB$ROOT TO QG_CDB2017-07-04 11:02:08.645000 +01:00SQL> * ASMCMD */ALTER DISKGROUP FLEX MOVE FILEGROUP CDB_PDB$SEED TO QG_CDBSUCCESS: * ASMCMD */ALTER DISKGROUP FLEX MOVE FILEGROUP CDB_PDB$SEED TO QG_CDBSQL> * ASMCMD */ALTER DISKGROUP FLEX MOVE FILEGROUP PDB1 TO QG_CDBSUCCESS: * ASMCMD */ALTER DISKGROUP FLEX MOVE FILEGROUP PDB1 TO QG_CDB

小  结

该部分讲述了配额组和文件组的相关概念与操作。理解这些概念对于理解Flex Diskgroup是很有必要的。下一部分我会研究下 改变文件组的属性会有什么影响 和 配额组的存储空间配额是不是强制的,还是超一点也没关系。

最后译者附一张官方文档中的图有助于大家更好的理解文件组和配额组:


相关链接

沃趣熊中哲:我已看过了大海,我不能假装没有见过

【Oracle 12c ASM专题】——我的第一个Flex Diskgroup

MySQL中server_id一致带来的问题

【Oracle 12c Flex Cluster专题】—节点角色转换

MySQL5.7并行复制中并行的真正含义

MySQL中的统计信息相关参数介绍

Performance Schema使用简介(一)

关于沃趣

杭州沃趣科技股份有限公司创建于2012年股票代码:839849,是一家专注为企业用户提供基于高性能、高可用、可扩展的开放数据库云平台解决方案的国产厂商。公司创始团队为原阿里巴巴数据库及运维团队核心骨干,凭借丰富的运维经验,为行业客户提供数据库云产品及软硬件一体化解决方案。

公司产品已广泛应用于证券、保险、医疗、广电传媒、银行、电信、能源电力、快递物流、公共事业、大型企业等,为这些行业用户持续提供行业解决方案及服务支持。

公司先后获得国家级高新技术企业、杭州市高新技术企业、杭州高新区瞪羚企业等称号,并设有杭州市安全可控数据库技术研发中心。公司总部位于杭州,同时在北京、上海、广州、南京、兰州建立了分支机构,拥有辐射全国的销售和服务体系。

我们始终坚信,数据是驱动企业创新的源动力!坚持围绕企业数据库做好一件事

                        ——让高性能触手可及!



推荐阅读
  • 深入解析轻量级数据库 SQL Server Express LocalDB
    本文详细介绍了 SQL Server Express LocalDB,这是一种轻量级的本地 T-SQL 数据库解决方案,特别适合开发环境使用。文章还探讨了 LocalDB 与其他轻量级数据库的对比,并提供了安装和连接 LocalDB 的步骤。 ... [详细]
  • SQLite是一种轻量级的关系型数据库管理系统,尽管体积小巧,却能支持高达2TB的数据库容量,每个数据库以单个文件形式存储。本文将详细介绍SQLite在Android开发中的应用,包括其数据存储机制、事务处理方式及数据类型的动态特性。 ... [详细]
  • 本文详细介绍如何在Spring Boot项目中集成和使用JPA,涵盖JPA的基本概念、Spring Data JPA的功能以及具体的操作步骤,帮助开发者快速掌握这一强大的持久化技术。 ... [详细]
  • 本文介绍了多种Eclipse插件,包括XML Schema Infoset Model (XSD)、Graphical Editing Framework (GEF)、Eclipse Modeling Framework (EMF)等,涵盖了从Web开发到图形界面编辑的多个方面。 ... [详细]
  • VS Code 中 .vscode 文件夹配置详解
    本文介绍了 VS Code 中 .vscode 文件夹下的配置文件及其作用,包括常用的预定义变量和三个关键配置文件:launch.json、tasks.json 和 c_cpp_properties.json。 ... [详细]
  • 设计模式系列-原型模式
    一、上篇回顾上篇创建者模式中,我们主要讲述了创建者的几类实现方案,和创建者模式的应用的场景和特点,创建者模式适合创建复杂的对象,并且这些对象的每个组成部分的详细创建步骤可以是动态的变化的,但 ... [详细]
  • MVC框架下使用DataGrid实现时间筛选与枚举填充
    本文介绍如何在ASP.NET MVC项目中利用DataGrid组件增强搜索功能,具体包括使用jQuery UI的DatePicker插件添加时间筛选条件,并通过枚举数据填充下拉列表。 ... [详细]
  • 本文档提供了详细的MySQL安装步骤,包括解压安装文件、选择安装类型、配置MySQL服务以及设置管理员密码等关键环节,帮助用户顺利完成MySQL的安装。 ... [详细]
  • 本文探讨了HTA(HTML Application)环境中HTML5 IndexedDB的可用性问题,并提供了一种替代方案,即通过使用COM ActiveX对象来实现数据存储功能。 ... [详细]
  • Navicat Premium中MySQL用户管理:创建新用户及高级设置
    本文作为Navicat Premium用户管理系列的第二部分,主要介绍如何创建新的MySQL用户,包括设置基本账户信息、密码策略、账户限制以及SSL配置等。 ... [详细]
  • 本文详细介绍了在 Windows 7 上安装和配置 PHP 5.4 的 Memcached 分布式缓存系统的方法,旨在减少数据库的频繁访问,提高应用程序的响应速度。 ... [详细]
  • 本文详细介绍了Oracle RMAN中的增量备份机制,重点解析了差异增量和累积增量备份的概念及其在不同Oracle版本中的实现。通过对比两种备份方式的特点,帮助读者选择合适的备份策略。 ... [详细]
  • 构建Python自助式数据查询系统
    在现代数据密集型环境中,业务团队频繁需要从数据库中提取特定信息。为了提高效率并减少IT部门的工作负担,本文探讨了一种利用Python语言实现的自助数据查询工具的设计与实现。 ... [详细]
  • SpringBoot底层注解用法及原理
    2.1、组件添加1、Configuration基本使用Full模式与Lite模式示例最佳实战配置类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断配置类组 ... [详细]
  • 本文介绍了如何通过创建自定义 XML 文件来修改 Android 中 Spinner 的项样式,包括颜色和大小的调整。 ... [详细]
author-avatar
手机用户2502890621
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有