热门标签 | 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,是一家专注为企业用户提供基于高性能、高可用、可扩展的开放数据库云平台解决方案的国产厂商。公司创始团队为原阿里巴巴数据库及运维团队核心骨干,凭借丰富的运维经验,为行业客户提供数据库云产品及软硬件一体化解决方案。

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

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

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

                        ——让高性能触手可及!



推荐阅读
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
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社区 版权所有