暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

ASM磁盘组

eygle 2019-09-19
2736

ASM可以被看成是建立在裸设备或块设备之上、为Oracle数据文件创建的“特别文件系统”,这个文件系统由Oracle的内核来管理和维护,不再需要传统的卷管理软件以及文件系统。建立在ASM之上的文件在操作系统中也不可见,Oracle通过自身来进行存储管理。ASM技术的出现,使得Oracle RAC的部署成本和维护成本大大降低,促进了Oracle集群技术的迅速普及。


从这个意义上说,ASM其实是Oracle的磁盘管理器,在同一台主机上,ASM实例可以为多个数据库实例提供磁盘组。在ASM选择磁盘的过程中,可以选择系统中划分好的裸设备来创建磁盘组(Disk Group)供数据库使用。


ASMLib管理磁盘


在Linux平台上,Oracle提供了ASMLib支持库进行磁盘划分和管理,在OEL6(Oracle Enterprise Linux)之前,安装文件可以从以下页面获得:


http://www.oracle.com/technetwork/topics/linux/asmlib/index-101839.html


在OEL6之后则需要通过ULN(Unbreakable Linux Network)下载,ASMLib简化磁盘管理,但是不是必需的。


针对不同的内核版本,Oracle提供了不同的asmlib发布版本,安装前需要针对你的Linux发布找到相应的ASMLib版本,以下示例使用的是Rehat AS4,内部版本为2.6.9-11:


[root@danaly ~]# cat /etc/redhat-release
Red Hat Enterprise Linux AS release 4 (Nahant)
[root@danaly ~]# uname -r
2.6.9-11.ELsmp


下载相应的RPM包后执行安装:


[root@danaly os]# ls -l
-rw-r--r--  1 oracle dba    77514 Sep  1 10:46 oracleasm-2.6.9-11.EL-2.0.0-1.i686.rpm
-rw-r--r--  1 oracle dba    75384 Sep  1 10:46 oracleasm-2.6.9-11.ELhugemem-2.0.0-1.i686.rpm
-rw-r--r--  1 oracle dba    78232 Sep  1 10:46 oracleasm-2.6.9-11.ELsmp-2.0.0-1.i686.rpm
-rw-r--r--  1 oracle dba    12785 Sep  1 10:46 oracleasmlib-2.0.0-1.i386.rpm
-rw-r--r--  1 oracle dba    21345 Sep  1 10:46 oracleasm-support-2.0.0-1.i386.rpm
[root@danaly os]# rpm -Uvh oracleasm*
Preparing...                ########################################### [100%]
   1:oracleasm-support      ########################################### [ 20%]
   2:oracleasm-2.6.9-11.ELsm########################################### [ 40%]
   3:oracleasm-2.6.9-11.EL  ########################################### [ 60%]
   4:oracleasm-2.6.9-11.ELhu########################################### [ 80%]
   5:oracleasmlib           ########################################### [100%]


安装之后需要做以下简单配置,运行oracleasm configure即可,以下指定缺省用户为Oracle,设置DBA组,开机加载:


[root@danaly os]# /etc/init.d/oracleasm configure
Configuring the Oracle ASM library driver.
 
This will configure the on-boot properties of the Oracle ASM library
driver.  The following questions will determine whether the driver is
loaded on boot and what permissions it will have.  The current values
will be shown in brackets ('[]').  Hitting  without typing an
answer will keep that current value.  Ctrl-C will abort.
 
Default user to own the driver interface []: oracle
Default group to own the driver interface []: dba
Start Oracle ASM library driver on boot (y/n) [n]: y
Fix permissions of Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: [  OK  ]
Creating /dev/oracleasm mount point: [  OK  ]
Loading module "oracleasm": [  OK  ]
Mounting ASMlib driver filesystem: [  OK  ]
Scanning system for ASM disks: [  OK  ]


最后启用ASM,就完成了ASMLib需要的常规配置:


[root@danaly cciss]# /etc/init.d/oracleasm enable
Writing Oracle ASM library driver configuration: [  OK  ]
Loading module "oracleasm": [  OK  ]
Mounting ASMlib driver filesystem: [  OK  ]
Scanning system for ASM disks: [  OK  ]


如果已经划分好了磁盘设备,就可以创建ASM磁盘分区,以下通过现有的四个磁盘分区创建了四个卷组:


[root@danaly cciss]# /etc/init.d/oracleasm createdisk VOL1 /dev/cciss/c0d1p1
Marking disk "/dev/cciss/c0d1p1" as an ASM disk: [  OK  ]
[root@danaly cciss]# /etc/init.d/oracleasm createdisk VOL2 /dev/cciss/c0d1p2
Marking disk "/dev/cciss/c0d1p2" as an ASM disk: [  OK  ]
[root@danaly cciss]# /etc/init.d/oracleasm createdisk VOL3 /dev/cciss/c0d1p3
Marking disk "/dev/cciss/c0d1p3" as an ASM disk: [  OK  ]
[root@danaly cciss]# /etc/init.d/oracleasm createdisk VOL4 /dev/cciss/c0d1p4
Marking disk "/dev/cciss/c0d1p4" as an ASM disk: [  OK  ]
[root@danaly ~]# /etc/init.d/oracleasm listdisks
VOL1
VOL2
VOL3
VOL4


到这里ASM的工作就完成了,这里的磁盘可以被Oracle所使用,使用oracleasm-discover来探测ASM硬盘:


[root@danaly ~]# oracleasm-discover 
Using ASMLib from /opt/oracle/extapi/32/asm/orcl/1/libasm.so
[ASM Library - Generic Linux, version 2.0.0 (KABI_V2)]
Discovered disk: ORCL:VOL1 [39070048 blocks (20003864576 bytes), maxio 128]
Discovered disk: ORCL:VOL2 [39070080 blocks (20003880960 bytes), maxio 128]
Discovered disk: ORCL:VOL3 [39070080 blocks (20003880960 bytes), maxio 128]
Discovered disk: ORCL:VOL4 [25043040 blocks (12822036480 bytes), maxio 128]


ASMLib创建的卷设备,会在Dev下创建独立管理的伪设备:


[root@danaly ~]# ls -l /dev/oracleasm/disks/
total 0
brw-rw----  1 oracle dba 104, 17 Sep  3 10:40 VOL1
brw-rw----  1 oracle dba 104, 18 Sep  3 10:40 VOL2
brw-rw----  1 oracle dba 104, 19 Sep  3 10:40 VOL3
brw-rw----  1 oracle dba 104, 20 Sep  3 10:40 VOL4


以下是安装了ASMLib之后,通过oracleasm最常见的管理用法:


[root@danaly ~]# /etc/init.d/oracleasm
Usage: /etc/init.d/oracleasm
{start|stop|restart|enable|disable|configure|createdisk|deletedisk|querydisk|listdisks|scandisks|status}


ASM可以管理独立的磁盘,也可以通过磁盘分区来创建ASM设备,以下示例在Linux创建三个新的磁盘分区用于ASM管理:


[root@danaly etc]# fdisk /dev/cciss/c0d0
Command (m for help): n
First cylinder (4602-8854, default 4602):
Using default value 4602
Last cylinder or +size or +sizeM or +sizeK (4602-8854, default 8854): +20000M   
 
Command (m for help): n
First cylinder (7035-8854, default 7035):
Using default value 7035
Last cylinder or +size or +sizeM or +sizeK (7035-8854, default 8854): +3000M
 
Command (m for help): n
First cylinder (7401-8854, default 7401):
Using default value 7401
Last cylinder or +size or +sizeM or +sizeK (7401-8854, default 8854): +3000M


新的分区表信息:


Command (m for help): p
 
Disk /dev/cciss/c0d0: 72.8 GB, 72833679360 bytes
255 heads, 63 sectors/track, 8854 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
 
           Device Boot      Start         End      Blocks   Id  System
/dev/cciss/c0d0p1   *           1          33      265041   83  Linux
/dev/cciss/c0d0p2              34         555     4192965   82  Linux swap
/dev/cciss/c0d0p3             556         686     1052257+  83  Linux
/dev/cciss/c0d0p4             687        8854    65609460    5  Extended
/dev/cciss/c0d0p5             687        1730     8385898+  83  Linux
/dev/cciss/c0d0p6            1731        2774     8385898+  83  Linux
/dev/cciss/c0d0p7            2775        3818     8385898+  83  Linux
/dev/cciss/c0d0p8            3819        4601     6289416   83  Linux
/dev/cciss/c0d0p9            4602        7034    19543041   83  Linux
/dev/cciss/c0d0p10           7035        7400     2939863+  83  Linux
/dev/cciss/c0d0p11           7401        7766     2939863+  83  Linux
 
Command (m for help): w
The partition table has been altered!
 
Calling ioctl() to re-read partition table.
 
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.


通过如下命令创建ASM磁盘:


[root@danaly data1]# /etc/init.d/oracleasm createdisk VOL5 /dev/cciss/c0d0p10
Marking disk "/dev/cciss/c0d0p10" as an ASM disk: [  OK  ]
[root@danaly data1]# /etc/init.d/oracleasm createdisk VOL6 /dev/cciss/c0d0p11
Marking disk "/dev/cciss/c0d0p11" as an ASM disk: [  OK  ]
[root@danaly data1]# /etc/init.d/oracleasm listdisks
VOL1
VOL2
VOL3
VOL4
VOL5
VOL6


启动ASM实例,可以识别并使用这些磁盘,创建磁盘组:


[oracle@danaly ~]$ export ORACLE_SID=+ASM
[oracle@danaly ~]$ sqlplus "/ as sysdba"
 
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Sep 3 00:28:09 2006
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to an idle instance.
SQL> startup
ASM instance started
ASM diskgroups mounted
 
SQL> select group_number,disk_number,mode_status from v$asm_disk;
GROUP_NUMBER DISK_NUMBER MODE_STATUS
------------ ----------- --------------
           0           4 ONLINE
           0           5 ONLINE
           1           0 ONLINE
           1           1 ONLINE
           1           2 ONLINE
           1           3 ONLINE
SQL> select group_number,disk_number,mode_status,name from v$asm_disk;
GROUP_NUMBER DISK_NUMBER MODE_STATUS    NAME
------------ ----------- -------------- ---------------------------------
           0           4 ONLINE
           0           5 ONLINE
           1           0 ONLINE         VOL1
           1           1 ONLINE         VOL2
           1           2 ONLINE         VOL3
           1           3 ONLINE         VOL4
SQL> create diskgroup orag2 external redundancy disk 'ORCL:VOL5';
Diskgroup created.
 
SQL> select group_number,disk_number,mode_status,name from v$asm_disk;
GROUP_NUMBER DISK_NUMBER MODE_STATUS    NAME
------------ ----------- -------------- -------------------------------------
           0           5 ONLINE
           1           0 ONLINE         VOL1
           1           1 ONLINE         VOL2
           1           2 ONLINE         VOL3
           1           3 ONLINE         VOL4
           2           0 ONLINE         VOL5


在新的磁盘组上创建表空间:


SQL> create tablespace eygle datafile '+ORAG2' ;
Tablespace created.
 
SQL> select name from v$datafile;
NAME
---------------------------------------------------------------------------------
+ORADG/danaly/datafile/system.264.600016955
+ORADG/danaly/datafile/undotbs1.265.600016969
+ORADG/danaly/datafile/sysaux.266.600016977
+ORADG/danaly/datafile/users.268.600016987
+ORAG2/danaly/datafile/eygle.256.600137647


向现有磁盘组增加磁盘


SQL> alter diskgroup orag2 add disk 'ORCL:VOL6';
 
Diskgroup altered.


当然这些工作也可以通过DBCA(Oracle 11g中使用asmca)来进行管理。下图显示的是磁盘组及磁盘信息:


企业微信截图_15688641246541.png

图6-7  创建或编辑磁盘组


在创建磁盘组时冗余选项(Redundancy)有以下3个可选值。


· High:高度冗余,Oracle可以通过ASM实现3路镜像,需要3个Failure Groups。

· Normal:正常冗余,通过ASM实现2路镜像,需要两个Failure Groups。

· External:外部冗余,也就是通过ASM之外的技术实现冗余,Oracle不做镜像处理。


当在整个数据库环境中只存在一个物理存储机柜的时候,通常建议通过外部手段实现磁盘冗余(通过存储划分Raid5、Raid10等),在这里即可选择External。


在使用外部冗余模式下,一个文件会以AU (Allocation Unit)为单位在多个磁盘上均衡分布,下图显示一个4M的文件,在外部冗余磁盘组中4个磁盘上的均衡分布:


企业微信截图_15688642002589.png


当然,并非所有文件都能恰好均衡在所有ASM磁盘上,但是当有大量文件存储后,ASM磁盘存储总是接近均衡的。


回顾一下之前ASM的参数文件,其中有这样两个重要参数:


*.asm_diskgroups='ORADG'
*.asm_diskstring='ORCL:VOL*'


其中asm_diskstring参数用于定义实例启动时搜索可用的ASM磁盘的路径,由于前面创建ASM磁盘的名称是以VOL开头,所以此处使用*通配符,前面的“ORCL:”在Linux下不可以省略,否则ASM实例将无法检查到磁盘。


asm_diskstring参数还可以指定一个或多个值,多个值将允许ASM从不同路径来搜索和加载硬盘,以下是一个多路径的参数设置,其中asm_diskgroups参数用于定义ASM实例启动时自动Mount的磁盘组,示例的磁盘卷由Veritas的Volume Manger创建:


SQL> select name,type,value from v$parameter
  2  where name='asm_diskstring';
NAME                  TYPE VALUE
-------------------- ----- ---------------------------------------
asm_diskstring           2 /dev/vx/rdsk/smsbsdatadg/smsbsdatavol,
                           /dev/vx/rdsk/smsbsflshdg/smsbsflshvol


创建好的磁盘组(Disk Group)在创建数据库时就可以被选择作为文件存储地,如图6-8所示。


企业微信截图_15688642587946.png

图6-8 选择磁盘组作为文件存储地


创建了ASM实例以及磁盘组之后,就可以登录ASM并检查磁盘组信息了:


[oracle@danaly ~]$ export ORACLE_SID=+ASM
[oracle@danaly ~]$ sqlplus "/ as sysdba"
SQL> select instance_name from v$instance;  
INSTANCE_NAME
--------------------------------
+ASM
SQL> select name,TOTAL_MB,FREE_MB from v$asm_diskgroup;
NAME                   TOTAL_MB    FREE_MB
-------------------- ---------- ----------
ORADG                    69459      24844


在ASM之前,裸设备是不能用来存储归档日志等变化文件的,但是ASM则可以存储这些文件,ASM文件使用OMF方式管理,Oracle可以自动进行文件的创建及删除等管理工作,而无需DBA直接介入。在ASM模式下,可以使用默认的Oracle闪回区来作为默认的归档等文件的存储地点。以下就是这样一个数据库实例,其建立两个磁盘组,一个用于数据文件的存储,另外一个则用于闪回区:


SQL> show parameter asm_diskgroups
NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
asm_diskgroups                       string                 DATADG, FLSHDG


 ASM存储Voting和OCR


在Oracle 11gR2以前,RAC中的OCR Disk和Voting Disk必须放置在裸设备或者第三方集群文件系统中。而在Oracle 11gR2中,这二者也一同被纳入了ASM的管理范畴,在安装Grid Infrastructure(缩写为GI)时只需选择ASM存储然后创建相应的ASM磁盘组即可,从而进一步地简化了存储管理的复杂度,如图6-9所示:


企业微信截图_1568864370184.png

图6-9:OCR和Voting Disk的ASM存储


图6-10是Oracle 11.2.0.2版本GI安装时,指定一个Disk,创建CRSDG磁盘组,用于存储OCR等:


企业微信截图_15688644024979.png

图6-10:GI安装过程中创建CRS磁盘组

 

可以用以下命令查看OCR和VOTING Disk的信息:


[oracle@xsh-db1]$ocrcheck
Status of Oracle Cluster Registry is as follows :
Version                  :          3
Total space (kbytes)     :     262120
Used space (kbytes)      :       2252
Available space (kbytes) :     259868
         ID                       :  163721714
         Device/File Name         :       +CRS
                                    Device/File integrity check succeeded
                                    Device/File not configured
                                    Device/File not configured
                                    Device/File not configured
                                    Device/File not configured
         Cluster registry integrity check succeeded
         Logical corruption check succeeded
[oracle@xsh-db1]$crsctl query css votedisk
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   653c16db3bec4ff7bf5d17888c7f64de (/dev/rhdisk2) [CRS]
Located 1 voting disk(s).

 

在ASM的实例管理和磁盘组创建中,Oracle提供了独立的asmca工具,如图6-10,启动ASM配置助手可以进行独立的ASM维护:


企业微信截图_15688644563263.png

图6-10:查看磁盘组信息


图6-11是在Oracle 11.2.0.2中创建独立的ASM磁盘组示意:


企业微信截图_15688647737197.png

图6-11:创建外部冗余的磁盘组


Disk Groups选项页查看和管理所有的磁盘组,如图6-12所示:


企业微信截图_15688648022936.png

图6-12:查看所有磁盘组信息

强制删除磁盘组


虽然我们很少遇到需要删除磁盘组的情况,但是在某些故障情况下,如果某个磁盘不可用,磁盘组无法加载时,删除磁盘组就变得复杂,在Oracle 10g中通常需要用dd命令清理磁盘信息,在Oracle 11g中增加了一个强制选项,当制定Force参数时,可以在ASM磁盘组不可挂载的情况下,强制删除某个磁盘组:


[grid@enmou1 ~]$ sqlplus / as sysasm
SQL*Plus: Release 11.2.0.2.0 Production on Tue Mar 22 15:37:39 2011
Copyright (c) 1982, 2010, Oracle.  All rights reserved.
 
SQL>  drop diskgroup oradg force including contents;
 
Diskgroup dropped.


如果磁盘已经正常Mount,数据库不允许使用force选项:


SQL> drop diskgroup oradg force including contents;
drop diskgroup oradg force including contents
*
ERROR at line 1:
ORA-15039: diskgroup not dropped
ORA-15230: diskgroup 'ORADG' does not require the FORCE option


ASM常用的视图有V$ASM_DISK、V$ASM_DISKGROUP、V$ASM_FILE、V$ASM_TEMPLATE、V$ASM_OPERATION和V$ASM_CLIENT等,我们可以通过这些视图得到ASM的很多相关信息。

最后修改时间:2019-09-19 11:48:10
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论