1、ASM的定义
Oracle ASM is a high-performance, ease-of-management storage solution for Oracle Database files. Oracle ASM is a volume manager and provides a file system designed exclusively for use by the database.
2、ASM的优势
Simplifies storage-related tasks such as creating and laying out databases and managing disk space
Distributes data across physical disks to eliminate hot spots and to provide uniform performance across the disksA
Rebalances data automatically after storage configuration changes
3、ASM的组件
ASM所包含的组件及它们的关系如图:
ASM_Components
ASM磁盘:可以是物理磁盘、分区、逻辑单元号(LUN),或者是逻辑卷或网络附加文件;
ASM磁盘组:一组ASM磁盘的集合,被作为一个逻辑卷来管理;
ASM文件:它可以是数据库中的数据文件、控制文件、联机重做日志文件和其他类型文件(参数文件、rman备份文件、数据泵dmp文件、闪回恢复区、闪回日志等)。
ASM扩展区(ASM extent):组成ASM文件的单元;
ASM分配单元(ASM Unit):组成ASM扩展区的单元,ASM管理的最小的连续磁盘空间。
4、ASM实例
ASM实例管理磁盘组的元数据,并提供对数据库实例的文件布局信息。
注意:数据库实例直接与ASM磁盘进行I/O,而不需要通过ASM实例。
ASM实例与数据库实例关系如图:
ASMIN_DATABASEIN
5、创建ASM
可以使用ASMLib或者udev来绑定ASM磁盘;
使用udev绑定ASM磁盘的过程:
在安装OGI和Oracle之前,使用root用户执行下面脚本(此例中使用sdb~sdfg6块磁盘作为ASM磁盘):
for i in b c d e f g;
do
echo "KERNEL==\"sd*\", BUS==\"scsi\", PROGRAM==\"/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name\", RESULT==\"`/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/sd$i`\", NAME=\"asm-disk$i\", OWNER=\"grid\", GROUP=\"asmadmin\", MODE=\"0660\"" >> /etc/udev/rules.d/99-oracle-asmdevices.rules
done
然后重启udev
/sbin/start_udev
查看ASM磁盘是否绑定成功
[root@node1 ~]# cd /dev
[root@node1 dev]# ls -l |grep asm
brw-rw---- 1 grid asmadmin 8, 16 11月 20 09:41 asm-diskb
brw-rw---- 1 grid asmadmin 8, 32 11月 20 09:41 asm-diskc
brw-rw---- 1 grid asmadmin 8, 48 11月 20 09:41 asm-diskd
brw-rw---- 1 grid asmadmin 8, 64 11月 17 15:30 asm-diske
brw-rw---- 1 grid asmadmin 8, 80 11月 17 15:30 asm-diskf
brw-rw---- 1 grid asmadmin 8, 80 11月 17 15:30 asm-diskg
然后就可以创建ASM磁盘组了。
6、ASM的条带、镜像、冗余级别及故障组
ASM条带:ASM总是跨越磁盘组的所有磁盘条带化文件(提高写入速度);
ASM镜像:ASM在ASM Extent级别进行镜像,处于安全考虑,镜像将不会放到同一个故障组;
ASM镜像级别:
HIGH REDUNDANCY:另外保存二个拷贝副本;
EXTERNAL REDUNDANCY:ASM本身不提供保护,一般由外部RAID进行保护;
7、ASMCMD实用程序
lsct 列出ASM与Oracle实例相关的信息
ASMCMD> lsct
DB_Name Status Software_Version Compatible_version Instance_Name Disk_Group
+ASM CONNECTED 11.2.0.1.0 11.2.0.1.0 +ASM1 ASM_DG
orarac CONNECTED 11.2.0.1.0 11.2.0.0.0 orarac1 ASM_DG
lsdg 列出磁盘组
ASMCMD> lsdg
State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name
MOUNTED NORMAL N 512 4096 1048576 15360 6067 3101 1483 0 N ASM_DG/
在这里可以看到ASM磁盘组的可用空间
lsdsk 列出磁盘
ASMCMD> lsdsk
Path
/dev/asm-diskb
/dev/asm-diskc
/dev/asm-diskd
查看ASM磁盘中的数据文件
ASMCMD> cd +ASM_DG/orarac/datafile
ASMCMD> ls -l
Type Redund Striped Time Sys Name
DATAFILE MIRROR COARSE NOV 20 04:00:00 Y SYSAUX.263.863369285
DATAFILE MIRROR COARSE NOV 17 15:00:00 Y SYSTEM.262.863369279
DATAFILE MIRROR COARSE NOV 20 08:00:00 Y TEST_TS.273.864116555
DATAFILE MIRROR COARSE NOV 17 15:00:00 Y UNDOTBS1.264.863369291
DATAFILE MIRROR COARSE NOV 17 15:00:00 Y UNDOTBS2.266.863369299
DATAFILE MIRROR COARSE NOV 17 15:00:00 Y USERS.267.863369301
N test_ts01.dbf => +ASM_DG/ORARAC/DATAFILE/TEST_TS.273.864116555
其中最后一个数据文件是手工创建的,可以看出手动输入的文件名只是一个连接。
关于ASM元数据的备份:
md_backup命令与md_restore,它们仅备份ASM磁盘组的元数据,并且可以重新创建ASM磁盘组。它们不备份任何ASM文件。备份ASM元数据在灾难恢复时是必要的。
它们的用法如下:
ASMCMD> md_backup -h
Unknown option: h
usage: md_backup <backup_file>
[-G '<diskgroup_name>,<diskgroup_name>,...']
help: help md_backup
ASMCMD> md_restore -h
Unknown option: h
usage: md_restore <backup_file> [--silent]
[--full|--nodg|--newdg] [-S <sql_script_file>]
[-G '<diskgroup_name>,<diskgroup_name>,...']
[-o '<old_diskgroup_name>:<new_diskgroup_name>,...']
help: help md_restore
8、使用sqlplus管理ASM
连接ASM实例,这里使用grid用户
[grid@node1 ~]$ export ORACLE_SID=+ASM1
[grid@node1 ~]$ sqlplus "/as sysasm"
SQL*Plus: Release 11.2.0.1.0 Production on 星期四 11月 20 10:32:56 2014
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options
SQL>
添加磁盘组
首先查询可用的且未分配给ASM的磁盘
SQL> col path format a20
SQL> col header_status format a20
SQL> select path,header_status from v$asm_disk;
PATH HEADER_STATUS
-------------------- --------------------
/dev/random UNKNOWN
/dev/asm-diske CANDIDATE
/dev/asm-diskg CANDIDATE
/dev/asm-diskf CANDIDATE
/dev/asm-diskb MEMBER
/dev/asm-diskc MEMBER
/dev/asm-diskd MEMBER
7 rows selected.
可以看出,asm_diske、f、g三个磁盘可以用来创建新的磁盘组(HEADER_STATUS列值为MEMBER表示已经使用的,为CANDIDATE表示为可以使用的)。
SQL> create diskgroup ASM_DG1 normal redundancy
2 failgroup diske disk '/dev/asm-diske'
3 failgroup diskf disk '/dev/asm-diskf';
Diskgroup created.
为磁盘组添加磁盘
SQL> alter diskgroup ASM_DG1 add disk '/dev/asm-diskg';
Diskgroup altered.
查看结果
SQL> col disk_name format a15
SQL> select b.name group_name, a.path disk_name, a.header_status from v$asm_disk a ,v$asm_diskgroup b where a.group_number=b.group_number order by 1;
GROUP_NAME DISK_NAME HEADER_STATUS
---------- --------------- --------------------
ASM_DG /dev/asm-diskb MEMBER
ASM_DG /dev/asm-diskc MEMBER
ASM_DG /dev/asm-diskd MEMBER
ASM_DG1 /dev/asm-diskg MEMBER
ASM_DG1 /dev/asm-diskf MEMBER
ASM_DG1 /dev/asm-diske MEMBER
6 rows selected.
在磁盘组中增加数据文件
SQL> create tablespace new_tbs datafile '+ASM_DG1' size 2G
2 autoextend off;
Tablespace created.
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
+ASM_DG/orarac/datafile/system.262.863369279
+ASM_DG/orarac/datafile/sysaux.263.863369285
+ASM_DG/orarac/datafile/undotbs1.264.863369291
+ASM_DG/orarac/datafile/undotbs2.266.863369299
+ASM_DG/orarac/datafile/users.267.863369301
+ASM_DG/orarac/datafile/test_ts01.dbf
+ASM_DG1/orarac/datafile/new_tbs.256.864139497
7 rows selected.
如果create tablespace语句中的datafile选项直接输入文件名,则该文件名仅仅为一个到实际数据文件的连接,如果datafile只指定磁盘组,则由oracle实际创建数据文件,推荐使用后者。
9、将操作系统中的数据库文件迁移到ASM
迁移过程大致如下:
迁移控制文件
SQL> alter system set controlfiles='+ASM_DG','+ASM_DG1' scope=spfile;
SQL> shutdown immediate;
SQL> startup nomount;
RMAN> restore controlfile from '/u01/app/oracle/oradata/orcl/control01.ctl';
迁移数据文件
SQL> shutdown immediate;
SQL> startup mount;
RMAN> backup as copy database format '+ASM_DG1';
RMAN> switch database to copy;
SQL> alter database open;
迁移redolog
SQL> alter database add logfile member '+ASM_DG1','+ASM_DG2' to group 1;
SQL> alter database drop logfile member '/u01/app/oracle/oradata/orcl/redo01a.log','/u01/app/oracle/oradata/orcl/redo01b.log';
迁移临时表空间临时文件
SQL> create temporary tablespace tempasm tempfile '+ASM_DG1' size 1g;
SQL> alter database default temporary tablespace tempasm;
SQL> drop tablespace temp including contents and datafiles;
10、ASM实例的参数
instance_type 对于ASM实例,其值必定为ASM
instance_name 前缀为+,默认值是ORACLE_SID环境变量
asm_power_limit 控制用于在平衡操作的ASMB进程的数量,默认值为最小数量1
asm_diskstring 表示分配给ASM的磁盘的路径列表
asm_diskgroups 启动时要加载的磁盘组,默认为NULL
查看asm_diskgroups参数:
SQL> col type format a10
SQL> col string format a20
SQL> show parameter asm_diskgroups
NAME TYPE VALUE
------------------------------------ ---------- ------------------------------
asm_diskgroups string ASM_DG1