暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

Oracle的ASM介绍及管理

DBA小记 2020-10-27
3437

Oracle的ASM介绍及管理


  • Oracle经历过的文件系统历史

操作系统--逻辑卷管理器(LVM)管理文件相对容易,性能较差

裸设备:管理文件相对困难,性能好

OCFS(Oracle Cluster File System)是ORACLE数据库文件系统

ASM(Automatic Storage Management)ASM是ORACLE数据库文件支持的卷管理,ASM磁盘组里面只能存放Oracle数据库文件:数据文件、联机重做日志文件、控制文件、归档日志、RMAN备份集

  • 何时引入

ASM是Oracle 10g R2中为了简化Oracle数据库的管理而推出来的一项新功能,这是Oracle自己提供的卷管理器,主要用于替代操作系统所提供的LVM,它不仅支持单 实例,同时对RAC的支持也是非常好。ASM可以自动管理磁盘组并提供有效的数据冗余功能。使用ASM(自动存储管理)后,数据库管理员不再需要对 ORACLE中成千上万的数据文件进行管理和分类,从而简化了DBA的工作量,可以使得工作效率大大提高。

  • ASM的体系结构与后台进程

每个使用了ASM存储的数据库实例也有两个新的进程

1、RBAL:用来打开磁盘组里的磁盘,然后通过DBWn进程将数据写入到这些打开的磁盘里去

2、ASMB:当数据库实例要向某个磁盘组里写入数据时,ASMB会访问Group Services,从中获取有关ASM实例所管理的磁盘组的信息,并通过RBAL进程打开磁盘组,于是就可以将数据写入磁盘组。

Group Services用来注册ASM实例所管理的磁盘组,以及连接磁盘组的信息。

数据库 I/O不通过ASM实例来传输,而是通过RBAL直接根据ASM文件执行I/O操作。

数据库实例只能与其所在的同一台主机上的ASM实例通信,如果当前主机上存在多个数据库,则这些数据库可以共享同一个ASM实例。

ASM实例与数据库实例进行通信的桥梁是ASMB进程,此进程运行在每个数据库实例上,是两个实例间信息交换的通道。ASMB进程先利用磁盘组名称通过CSS获得管理该磁盘组的ASM实例连接串,然后建立一个到ASM的持久连接,这样两个实例之间就可以通过这条连接定期交换信息,同时这也是一种心跳监控机制。

另外,在ASM实例中还存在另外一个新的进程,即RBAL,此进程负责规划和协调磁盘组的重新平衡活动。除此之外,ASM实例还有一些与数据库实例中的进程相同的后台进程,例如LGWRSMONPMONDBWR CKPT等。

ASM主要的三个后台进程

1、RBAL:负责协调组内不同磁盘组之间的rebalance工作,reblance工作指的是数据在不同的磁盘之间转移

2、ARBn:用来实际完成rebalance工作,可以由多个进程并发完成rebalance的工作

3、GMON:用来监控磁盘组内有关元数据的维护操作

  • ASM优点

1、ASM是跨平台的,主流的硬件平台都能使用、且管理方式一致;

2、内在的支持大文件,支持BIGFILE文件;

3、数据均匀的分布在磁盘组里所有的磁盘上,实现了文件级别的条带化,减少热点,提高了读取和写入数据的性能

4、提供多重冗余级别,保证数据不丢失;

5、支持在线的磁盘更换,添加或删除磁盘以后,自动重分布数据,这个过程叫做rebalance。

  • ASM提供了3种冗余方法

外部冗余(external redundancy):

表示Oracle不帮你管理镜像,功能由外部存储系统实现,比如通过RAID技术;有效磁盘空间是所有磁盘设备空间的大小之和。

外部冗余时ASM不提供冗余,由存储的机制提供冗余。现在的硬件提供了很多种的冗余,比如RAID。好处在于充分利用现有的磁盘,ASM不再划出其余的空间来做冗余,最大的利用磁盘空间。

常规冗余(normal redundancy):

(默认方式)表示Oracle提供2路镜像来保护数据,会损失一部分磁盘空间用于数据冗余。这是在ASM层面上提供冗余,也就是将ASM磁盘里面的数据再备份一份,和共享存储无关。

高冗余(high redundancy):

Oracle提供3路镜像来保护数据,会损失更多磁盘空间用于数据冗余。

现在都使用底层的自身的存储冗余,比如RAID,在ASM面做冗余太浪费了,所以在ASM上面一般使用外部冗余即可。

  • SYSASM权限和OSASM(asmadmin)系统组

为了使管理更加有针对性,Oracle 11gR2将管理权限进行细化,管理ASM的操作系统组叫做OSASM(asmadmin),凡是属于该组的用户都可以以sysasm的身份登录ASM实例。sysasm权限是管理ASM的最高权限,可以执行所有的ASM实例管理操作;另外还保留了sysdba权限,被赋予该权限的ASM用户只能执行普通的管理操作。SYSASM、SYSDBA是ASM实例用户具有的权限,asmadmin是操作系统组。

    [grid@xddb-01 ~]$ id grid
    uid=502(grid) gid=501(oinstall) groups=501(oinstall),502(dba),503(oper),504(asmadmin),505(asmoper),506(asmdba)


      [grid@xddb-01 ~]$ sqlplus  as sysasm 可直接登陆
      可创建管理用户并授权
      SQL> create user check_user identified by check_user;
      SQL> grant sysasm to check_user;
      [grid@xddb-01 ~]$ sqlplus check_user/ check_user as sysasm
      SQL> show user
      USER is "SYS"

      •     管理ASM

      • ASM查看磁盘组状态

        SQL> select group_number,name, state,total_mb,free_mb from v$asm_diskgroup;
        GROUP_NUMBER NAME STATE TOTAL_MB FREE_MB
        ------------ ------------------------------ ----------- ---------- ----------
        2 DATADG MOUNTED 317471 120869
        4 GRIDDG MOUNTED 6144 5218
        SQL> select group_number,name,path,failgroup from v$asm_disk;
        GROUP_NUMBER NAME PATH FAILGROUP
        ------------ ------------------------------ ------------------------------ ------------------------------
        4 GRIDDG_0002 dev/mapper/griddg3 GRIDDG_0002
        2 DATADG_0000 dev/mapper/datadg1 DATADG_0000
        4 GRIDDG_0001 dev/mapper/griddg2 GRIDDG_0001
        4 GRIDDG_0000 dev/mapper/griddg1 GRIDDG_0000


        • 查看磁盘组当前兼容性属性

          SQL> set linesize 200
          SQL> col name format a20
          SQL> col compatibility format a30
          SQL> col DATABASE_COMPATIBILITY format a30
          SQL> select group_number,name,compatibility,database_compatibility from v$asm_diskgroup where name='DATADG';
          GROUP_NUMBER NAME COMPATIBILITY DATABASE_COMPATIBILITY
          ------------ -------------------- ------------------------------ ------------------------------
          2 DATADG 11.2.0.0.0 10.1.0.0.0
          SQL> col value format a30
          SQL> select name,value from v$asm_attribute where group_number=2 and name like 'compatible.%';
          NAME VALUE
          -------------------- ------------------------------
          compatible.asm 11.2.0.0.0
          compatible.rdbms 10.1.0.0.0


          • 修改磁盘组兼容性属性

          SQL> ALTER DISKGROUP data SET ATTRIBUTE 'compatible.rdbms' = '11.1';

          磁盘组的属性只能增大,不能减小,如果增大过程出现错误,那么只能通过重建磁盘组来调整兼容性属性值。

          • 快速镜像重新同步功能。

          在一个故障组短暂的磁盘失败期间,ASM记录改变区间的轨迹,以便在磁盘恢复正常后能够快速的同步改变的区间,而不是将整个磁盘的数据重新覆盖一遍,这能够大幅度的提高数据重新同步的过程。

          该功能要求磁盘组的兼容性属性必须设置为11.1或者更高。

          另外,该功能只对Normal和High冗余级别的磁盘组有用,因为External冗余级别的磁盘脱机会导致写失败。

            SQL> CREATE DISKGROUP DATADG NORMAL REDUNDANCY
            2 FAILGROUP A disk '/dev/mapper/datadg1' name datadg01
            3 FAILGROUP B disk '/dev/mapper/datadg2' name datadg02
            4 ATTRIBUTE 'compatible.rdbms'='11.2','compatible.asm'='11.2','compatible.advm'='11.2';
            SQL> select name,value from v$asm_attribute where name like 'compatible.%' and group_number=(select group_number from v$asm_diskgroup where name='DATADG');


            磁盘默认的可脱机时间为3.6小时,可以通过修改磁盘组的disk_repair_time属性来调整这个值(H或者h表示小时,M或者m表示分钟):

              SQL> col name for a20
              SQL> col value for a20
              SQL> select name,value from v$asm_attribute where name='disk_repair_time' and group_number=(select group_number from v$asm_diskgroup where name='DATADG');
              NAME VALUE
              -------------------- --------------------
              disk_repair_time 3.6h
              SQL> alter diskgroup data set attribute 'disk_repair_time'='4.5h';
              SQL> select name,value from v$asm_attribute where name='disk_repair_time' and group_number=(select group_number from v$asm_diskgroup where name='DATADG');
              NAME VALUE
              -------------------- --------------------
              disk_repair_time 4.5h


              可以使用ALTER DISKGROUP的DROP AFTER子句来覆盖磁盘组的disk_repair_time属性:

                SQL> select name,group_number from v$asm_diskgroup where name='DATA';
                NAME GROUP_NUMBER
                ------------------------------ ------------
                DATADG                                      2
                SQL> select group_number,name,state from v$asm_disk where group_number=2;
                GROUP_NUMBER NAME STATE
                ------------ ------------------------------ ----------------
                2 DATADG02 NORMAL
                           2 DATADG01                         NORMAL
                SQL> alter diskgroup datadg offline disk datadg02;
                SQL> alter diskgroup datadg online disk datadg02;
                SQL> alter diskgroup datadg offline disk datadg02 drop after 20m;
                SQL> alter diskgroup datadg online disk datadg02;


                • AU_SIZE大小设置

                对于磁盘组来说,除了上面讲到了compatible.*和disk_repair_time属性外,还有一个重要的属性au_size。该属性是设置磁盘组的分配单元大小,可配置的范围包括:1、2、4、8、16、32、64MB。ASM文件也是以区间的形式存储在ASM磁盘组中,在10g每个区间直接映射到AU,从11g开始区间能够映射到1个或多个AU。

                当磁盘组兼容性属性设置为11.1或者更高,区间大小将自动增长,在11.1的版本,前20000个区间匹配AU大小,接下来的20000个区间匹配8个AU大小,大于40000的区间匹配64个AU大小,在11.2,这个增长比例从1:8:64变成了1:4:16。

                执行以下的命令使用CREATE DISKGROUP语句的ATTRIBUTE子句控制AU的大小:

                  SQL> CREATE DISKGROUP disk_group_2
                  2 EXTERNAL REDUNDANCY
                  3 DISK '/dev/mapper/datadg3'
                  4 ATTRIBUTE 'compatible.rdbms'='11.1','compatible.asm'='11.1','au_size' = '32M';


                  如果au_size设置较大,需要和compatible.rdbms,compatible.asm两个属性一起设置。

                  可扩展的区间大小和大AU的组合能够增加非常大的数据库的IO性能。

                  AU_SIZE只能在创建磁盘组的时候设置,之后只能查看不能调整。


                  • ASMCMD命令及选项

                  1、直接使用“asmcmd”或“asmcmd -p”(-p选项可以在命令提示符中给出当前的路径信息)便可连接到对应的ASM。

                  [grid@xddb-01 ~]$ asmcmd -p

                  2、ASMCMD [+] > help lsdg

                  help [command]将显示命令的详细帮助信息

                  3、使用cp命令在ASM和本地、远程操作系统文件系统之间直接拷贝数据。下面是该命令的用法:

                  cp [-i][-f][connect_str:]src_file [connect_str:]tgt_file

                  ASMCMD [+datadg/xddb/archivelog/2020_08_10] > cp thread_2_seq_123620.892.1048113419 /tmp/archive_thread_2_seq_123620.892.1048113419

                  4、md_backup命令针对一个或更多磁盘组创建元数据拷贝,下面是该命令的用法:

                  md_backup backup_file [-G diskgroup [,diskgroup,...]]

                  结果文件包含需要重建ASM磁盘的所有元数据。

                  ASMCMD [+datadg/xddb] >  md_backup /tmp/backup.txt -G datadg   

                  5、md_restore命令允许从使用md_backup命令创建的元数据中还原磁盘组,下面是该命令的用法:

                  md_restore backup_file [--silent][--full|--nodg|--newdg -o 'old_diskgroup:new_diskgroup [,...]'][-S sql_script_file] [-G 'diskgroup [,diskgroup...]']

                  ASMCMD [+] > md_restore /tmp/backup.txt --full -G datadg

                  恢复磁盘组元数据信息磁盘组不能处于MOUNT状态,md_restore命令只恢复元数据信息,但磁盘组的数据是无法恢复的。

                  6、remap命令修复磁盘一个范围的物理块,不验证每个块的内容,只有读错误的块能被修复,下面是该命令的用法:

                  remap diskgroup disk block_range

                  ASMCMD [+] > remap datadg datadg01 1000-2000

                  7、全部命令参考

                  • 实例管理命令

                  dsget       返回discovery diskstring

                  dsset       设置discovery diskstring

                  lsct         显示当前oracle ASM的客户端,一般指数据库实例和ASM实例,数据来源于V$ASM_CLIENT视图

                  lsop           显示当前磁盘组或ASM实例的操作,数据来源于V$ASM_OPERATION视图

                  lspwusr     显示ASM密码文件中的用户

                  orapwusr    增加,删除,修改ASM密码文件用户

                  shutdown    关闭ASM实例

                  startup     启动ASM实例

                  spbackup    备份ASM SPFILE,不影响GPnP profile;备份文件不能识别成SPFILE,不能用spcopy拷贝。为了识别备份文件为SPFILE必须用cp命令

                  spcopy      拷贝ASM SPFILE,在同一个磁盘组不能拷贝多份。为了更新GPnP profile,则用-u选项或用spset命令

                  spget       返回ASM SPFILE的位置从GPnP profile

                  spmove      移动ASM SPFILE,自动更新GPnP profile.当SPFILE被ASM实例打开时不能被移动

                  spset       设置ASM SPFILE的位置

                  • 文件管理命令

                  cd        切换目录,可使用通配符

                  cp        在磁盘组之间,磁盘组与操作系统之间拷贝文件。不能在两个远程实例间拷贝。OCR和OCR备份类型的文件不能用cp,要用spbackup,spcopy,spmove

                              如果是远程拷贝,则连接串样式为:user@host[.port_number].SID。port_number默认为1521

                  du        显示已经使用的磁盘空间在指定的目录(包括子目录)

                  find      查找,注意要区分大小写

                  ls        显示ASM目录下的内容

                  lsof      显示本地客户端已打开的文件

                  mkalias   创建一个系统产生的文件的别名。别名和对应的文件必须在同一磁盘组且每个ASM文件只能有一个别名

                  mkdir     创建ASM目录

                  pwd       显示当前目录的路径

                  rm        删除指定的文件或目录,如果是别名,会删除别名和别名对应的文件

                  rmalias   删除指定的别名

                  • 磁盘组管理命令

                  chdg          修改磁盘组(增加磁盘,删除磁盘,调整磁盘大小,重新平衡磁盘组,基于XML配置文件的)

                  chkdg         检查或修复磁盘组

                  dropdg        删除磁盘组

                  iostat        显示磁盘IO统计,信息来源于V$ASM_DISK_IOSTAT视图

                  lsattr        显示磁盘组属性,信息来源于V$ASM_ATTRIBUTE视图

                  lsdg          显示已挂载的磁盘组和他们的信息,与ls -ls输出结果一样,信息来源于V$ASM_DISKGROUP_STAT视图,如果指定了--discovery,则查询V$ASM_DISKGROUP

                  lsdsk         显示ASM磁盘,信息来源于V$ASM_DISK_STAT视图;连接模式查询V$ASM_DISK_STAT and V$ASM_DISK返回信息;非连接模式通过扫描磁盘头来返回信息

                  lsod          显示已打开的设备

                  md_backup     创建已挂载的磁盘组元数据备份

                  md_restore    恢复磁盘组元数据备份

                  mkdg          创建磁盘组,基于XML配置文件创建。注意:mkdg创建的磁盘组只挂载在本地节点

                  mount         挂载磁盘组

                  offline       使磁盘或失效磁盘组离线

                  online        使磁盘或失效磁盘组上线

                  rebal         重新平衡磁盘组

                  remap         重定位数据在磁盘上的物理块的范围内

                  setattr       设置磁盘组属性

                  umount        卸载磁盘组

                  • 模板管理命令

                  chtmpl     修改模板属性

                  lstmpl     显示模板属性

                  mktmpl     增加模板到磁盘组

                  rmtmpl     从磁盘组删除模板

                  • 文件访问管理命令

                  chgrp      修改文件或文件列表的用户组

                  chmod      修改文件或文件列表的权限

                  chown      修改文件或文件列表的拥有者

                  groups     显示用户所属用户组

                  grpmod     增加或删除操作系统用户到/从已存在的用户组

                  lsgrp      显示用户组

                  lsusr      显示磁盘组中的用户

                  mkgrp      创建一个用户组

                  mkusr      添加操作系统用户到磁盘组

                  passwd     修改用户的密码

                  rmgrp      删除一个用户组

                  rmusr      删除一个用户

                  文章转载自DBA小记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                  评论