在Oracle Database 11gR2中,以ASM技术为基础,Oracle推出了强劲的ACFS文件系统,进一步推进了自动存储管理技术。
在11gR2中,ASM技术仍旧着眼于支持数据库运行和备份的核心文件等,包括数据文件、控制文件、归档日志、spfile、RMAN备份文件、Change Tracking文件、数据泵Dump文件以及OCR文件等;而ACFS和Oracle ADVM(ASM Dynamic Volume Manager)则进一步延展了ASM的支持范围,可以存储Oracle软件、告警日志、跟踪文件、BFILEs大对象、还有影像、图片以及其它应用的普通文件。
在ASMCA中,可以通过ASM集群文件系统(ASM Cluster File Systems)选项页来查看ACFS相关设置,下图是单节点ASM显示的界面信息,提示显示“ASM集群文件系统(ACFS)可用于存储文件,如可执行文件、Oracle诊断文件、应用程序配置文件等。要使用ACFS,必须先创建ASM卷”:
总结一下,创建ACFS文件系统需要以下几个前提条件:
1. Oracle 11gR2数据库
对于11.2.0.1数据库,操作系统只支持Linux和Windows
对于11.2.0.2数据库,增加支持的操作系统有AIX和Solaris
2. 需要安装Grid Infrastructure
安装GI的单机版即可,也就是Oracle Restart环境,但是ACFS在Oracle Restart环境中跟RAC环境相比会有些功能上的不足,比如Oracle ACFS drivers无法自动加载,创建完毕的ACFS文件系统也无法自动mount。
3. 预先创建ASM实例及ASM磁盘组并创建ASM卷
在以下例子中ASM实例名为+ASM,磁盘组为ORADG.
如果要在ASM磁盘组上创建ACFS Volume,必须要求ASM磁盘组的属性COMPATIBLE.ASM在11.2以上。否则创建卷组的时候会出现以下报错。
SQL> alter diskgroup ORADG add volume ACFSVOL size 1G; alter diskgroup oradg add volume acfsvol size 1G * ERROR at line 1: ORA-15032: not all alterations performed ORA-15221: ASM operation requires compatible.asm of 11.2.0.0.0 or higher
如果ASM磁盘组是使用asmca图形化工具创建的,那么compatible.asm默认设置就已经为11.2,但如果是使用CREATE DISKGROUP这个SQL命令创建的,那么默认设置则为10.1,需要手动修改。
SQL> alter diskgroup oradg set attribute 'COMPATIBLE.ASM'='11.2';
如果要创建ACFS Volume,还必须要求ASM磁盘组的COMPATIBLE.ADVM属性也在11.2以上,此属性默认为空。而修改COMPATIBLE.ADVM属性,则要求加载ASM volume driver,否则将会出现以下报错。
SQL> alter diskgroup oradg set attribute 'compatible.advm'='11.2'; alter diskgroup oradg set attribute 'compatible.advm'='11.2' * ERROR at line 1: ORA-15032: not all alterations performed ORA-15242: could not set attribute compatible.advm ORA-15238: 11.2 is not a valid value for attribute compatible.advm ORA-15477: cannot communicate with the volume driver
该错误提示ASM Driver未加载:
SQL> host oerr ora 15477 15477, 00000, "cannot communicate with the volume driver" // *Cause: An attempt was made to communicate with the volume driver. // *Action: Check that the ASM volume driver is loaded. If so, check the alert // log to identify the reason for failure and take necessary action // to prevent such failures in the future.
可以使用root用户手工加载ASM volume driver:
# /app/grid/bin/acfsload start –s
修改ASM磁盘组的COMPATIBLE.ADVM属性,并创建ACFS Volume。
SQL> alter diskgroup oradg set attribute 'compatible.advm'='11.2'; Diskgroup altered. SQL> alter diskgroup ORADG add volume ACFSVOL size 1G; Diskgroup altered. SQL> select VOLUME_DEVICE from V$ASM_VOLUME where VOLUME_NAME='ACFSVOL'; VOLUME_DEVICE ------------------------------------------------------------------------- /dev/asm/acfsvol-351
使用mkfs命令创建文件系统,使用acfsutil命令注册文件系统,然后使用mount.acfs命令挂载文件系统,以下命令需要用root用户执行。
# mkdir -p /app/oracle/acfsmounts/oradg_acfsvol # /sbin/mkfs -t acfs -n ACFSVOL1 /dev/asm/acfsvol-351 mkfs.acfs: version = 11.2.0.1.0.0 mkfs.acfs: on-disk version = 39.0 mkfs.acfs: volume = /dev/asm/acfsvol-351 mkfs.acfs: volume size = 1073741824 mkfs.acfs: Format complete. # /sbin/acfsutil registry -a -f /dev/asm/acfsvol-351 /app/oracle/acfsmounts/oradg_acfsvol acfsutil registry: mount point /app/oracle/acfsmounts/oradg_acfsvol successfully added to Oracle Registry # mount.acfs -o all #df -k | grep acfs /dev/asm/acfsvol-351 1048576 39192 1009384 4% /app/oracle/acfsmounts/oradg_acfsvol # chown oracle:dba /app/oracle/acfsmounts/oradg_acfsvol
至此ACFS文件系统创建成功,可以用oracle用户在该文件系统下创建测试文件。
$ dd if=/dev/zero of=/app/oracle/acfsmounts/oradg_acfsvol/testfile bs=8192 count=100 100+0 records in 100+0 records out 819200 bytes (819 kB) copied, 0.0270009 seconds, 30.3 MB/s $ ls -l /app/oracle/acfsmounts/oradg_acfsvol/testfile -rw-r--r-- 1 oracle dba 819200 Aug 12 19:18 /app/oracle/acfsmounts/oradg_acfsvol/testfile
Oracle提供了acfsutil实用程序来与ACFS文件系统交互,查看ACFS文件系统信息。
# /sbin/acfsutil info fs /app/oracle/acfsmounts/oradg_acfsvol ACFS Version: 11.2.0.1.0.0 flags: MountPoint,Available mount time: Thu Aug 12 19:06:33 2010 volumes: 1 total size: 1073741824 total free: 968667136 primary volume: /dev/asm/acfsvol-351 label: ACFSVOL1 flags: Primary,Available,ADVM on-disk version: 39.0 allocation unit: 4096 major, minor: 252, 179713 size: 1073741824 free: 968667136 ADVM diskgroup ORADG ADVM resize increment: 268435456 ADVM redundancy: unprotected ADVM stripe columns: 4 ADVM stripe width: 131072 number of snapshots: 0 snapshot space usage: 0
在ASM卷被打开的时候,无法直接shutdown ASM实例,会报ORA-15487错误。
SQL> shutdown immediate ORA-15487: cannot shutdown the ASM instance with an open ASM volume
可以使用umount命令卸载ACFS系统。
# /bin/umount -t acfs –a
如果挂载文件系统时报错,那么可能是因为ACFS Volume没有激活,Volume的状态可以从V$ASM_VOLUME.STATE字段获得,显示为“ENABLED”才表示已激活。
# mount.acfs /dev/asm/acfsvol-351 /app/oracle/acfsmounts/oradg_acfsvol mount.acfs: CLSU-00100: Operating System function: open64 (/dev/asm/acfsvol-351) failed with error data: 2 mount.acfs: CLSU-00101: Operating System error message: No such file or directory mount.acfs: CLSU-00103: error location: OOF_1 mount.acfs: ACFS-02017: Failed to open volume /dev/asm/acfsvol-351. Verify the volume exists.
如果Volume状态显示为DISABLE,可以使用如下命令,激活Volume。
SQL>alter diskgroup ORADG enable volume 'ACFSVOL';
由于ACFS基于ASM创建,所以只要底层卷组具有足够的空间,则可以动态的对文件系统进行扩展,如下ACFSG卷初始分配的空间为4G:
[grid@enmou1 ~]$ asmcmd volinfo -G ACFSG -a Diskgroup Name: ACFSG Volume Name: ACFSVOL1 Volume Device: /dev/asm/acfsvol1-171 State: ENABLED Size (MB): 4096 Resize Unit (MB): 256 Redundancy: UNPROT Stripe Columns: 4 Stripe Width (K): 128 Usage: ACFS Mountpath: /u01/app/acfs/vol1
但是相应的磁盘组上还有3663M空间可用:
[grid@enmou1 ~]$ asmcmd lsdg State Type Rebal Sector Block AU Total_MB Free_MB Name MOUNTED EXTERN N 512 4096 1048576 7814 3663 ACFSG/ MOUNTED EXTERN N 512 4096 1048576 1954 1895 CRSDG/
在root用户下可以使用acfsutil动态调整其大小:
[root@enmou1 ~]# acfsutil size +2048M /u01/app/acfs/vol1 acfsutil size: new file system size: 6442450944 (6144MB) [grid@enmou1 ~]$ asmcmd lsdg State Type Rebal Sector Block AU Total_MB Free_MB Name MOUNTED EXTERN N 512 4096 1048576 7814 1609 ACFSG/ MOUNTED EXTERN N 512 4096 1048576 1954 1895 CRSDG/
使用ASMCA来创建ASM volume、ACFS文件系统则更为直观和简便,以下运行asmca创建一个名为ACFSG的外部冗余磁盘组:
然后在此磁盘组上创建一个卷acfsvol1:
在此卷组之上,就可以创建ACFS文件系统了,这里可以选择挂载点,用于数据库主目录或一般用途(这里的“显示命令”功能可以帮助我们查看具体的操作命令细节):
创建完成之后,可以在root下执行/sbin/mount.acfs -o all挂载文件系统,本例创建的系统如下,其挂载点在/u01/app/db目录下:
在命令行可以看到挂载的文件系统:
[root@enmou1 setupFiles]# df -m /u01/app/db Filesystem 1M-blocks Used Available Use% Mounted on /dev/asm/acfsvol1-171 6144 4571 1574 75% /u01/app/db
ACFS卷信息可以通过查询V$ASM_ACFSVOLUMES视图获得:
SQL> select * from V$ASM_ACFSVOLUMES; FS_NAME VOL_DEVICE VOL_L PRIMA TOTAL_MB FREE_MB --------------- ------------------------------ ----- ----- ---------- ---------- /u01/app/db /dev/asm/acfsvol1-171 TRUE 6144 1487.85156
此后可以将数据库软件安装部署在此目录下,使用集群文件系统部署数据库软件的好处是,可以在多节点同事挂载,在多节点的机群众,只需要安装一份数据库软件:
ACFS还支持快照功能,可以对文件系统上的文件进行快照备份,以下命令对Oracle软件目录进行了快照镜像:
[oracle@enmou1 db]$ /sbin/acfsutil snap create backup /u01/app/db acfsutil snap create: Snapshot operation is complete.
文件创建于.ACFS目录下:
[oracle@enmou1 db]$ ls -al total 108 drwxr-xr-x 9 oracle dba 4096 Mar 17 17:15 . drwxr-xr-x 6 grid oinstall 4096 Mar 17 15:08 .. drwxr-xr-x 75 oracle oinstall 8192 Mar 17 17:23 11.2.0 drwxr-xr-x 5 oracle dba 4096 Mar 17 14:30 .ACFS drwxr-x--- 3 oracle oinstall 4096 Mar 17 17:15 admin drwxr-x--- 5 oracle oinstall 4096 Mar 17 17:20 cfgtoollogs drwxr-xr-x 2 oracle oinstall 4096 Mar 17 15:45 checkpoints drwxrwxr-x 11 oracle oinstall 4096 Mar 17 15:35 diag drwx------ 2 root root 65536 Mar 17 14:30 lost+found
该快照本质上是对当前文件进行了拷贝备份,在发生文件丢失或者损坏时,可以执行恢复
[oracle@enmou1 db]$ tree -d -L 3 .ACFS .ACFS |-- repl | |-- logs | |-- processed | |-- ready | `-- staging `-- snaps `-- backup |-- 11.2.0 |-- admin |-- cfgtoollogs |-- checkpoints `-- dia