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实例还有一些与数据库实例中的进程相同的后台进程,例如LGWR、SMON、PMON、DBWR 、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 griduid=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 sysasmSQL> show userUSER 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 5218SQL> 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 200SQL> col name format a20SQL> col compatibility format a30SQL> col DATABASE_COMPATIBILITY format a30SQL> 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.0SQL> col value format a30SQL> select name,value from v$asm_attribute where group_number=2 and name like 'compatible.%';NAME VALUE-------------------- ------------------------------compatible.asm 11.2.0.0.0compatible.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 a20SQL> col value for a20SQL> 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.6hSQL> 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 2SQL> select group_number,name,state from v$asm_disk where group_number=2;GROUP_NUMBER NAME STATE------------ ------------------------------ ---------------- 2 DATADG02 NORMAL 2 DATADG01 NORMALSQL> 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 删除一个用户