EXADATA维护系列之ASM管理与维护1.ASM的概况ASM (Automatic Storage Management)是oracle 10g推出来的新功冃已可以直接倉理OS 层的磁盘,比如对盘进行条带和镜像,提供一个高可用的存储架构!使用ASM时,强烈建 议打开OS层的ASYNC I/O,提高I/O的性能!比如,在EXADATA上,就完全采用ASM的技术对storage servers ±的磁盘进行条带 话和镜像处理,为上层的database servers提共高可用的shared存储空间ASM实例与ORACLE实例羞不多,都是由sga和一堆后台进程组成,从功能上来看, 区别在于oracle实例管理的是数据库,而asm实例只是管理asm盘阵2. connect/startup/shutdown ASM 实例(llg 环境)⑴连接asm instance并打开export ORACLE_SID=+ASM1 $GRIDJIOME/bin/sqlplus /nolog conn / as sysasm startup mount (2)关闭 asm in stanceshutdown immediate或者使用srvctl命令来管理asm instancesrvctl start asmsrvctl stop asm3. ASM instance里相关的init参数ASM_POWER_LIMIT :指定磁盘rebalance的程度,有0-11个级别,默认值为1,指定的 级别越高,贝'Jrebalance的操作就会越快被完成(当然这也意味着这个时间段内将占用更多 的资源),指定级别较低的话,虽然rebalance操作会耗时更久,但对当前系统的10及负载 影响会更少,这中间的度需要DBA根据实际情况衡量。
另外,这个参数指定的只是一个默认 值,在操作过程中,即可以随便动态修改,也可以在语句级命令行时指定power,覆盖该默 认值ASM_DISKSTRING :设置ASM启动时检查的磁盘,该选项可以同时指定多个值,并但支 持通配符比如说,只检查/dev/dsk/下的设备,可以设置该参数如下:/dev/dsk/*,默认 情况下该参数为空,为空的话,表示ASM将查找系统中所有ASM拥有读写权限的设备ASM DISKGROUPS :指定实例启动或alter diskgroup all mount语句时要加载的磁盘 组,如果为空的话,那么实际就仅启动到N0M0UNT状态了如果是使用SPFILE的话,该参数 一般不需要手动修改,ASM能够自动更新该初始化参数中的值4. 管理 asm disk group(1) 创建外部冗余的disk group (一份数据)create diskgroup dgl external redundancy disk'/dev/raw/rawT ,' /dev/raw/raw2,;(2) 创建正常冗余的disk group (两分数据)CREATE DISKGROUP dg2 NORMAL REDUNDANCYFAILOVERGROUP controlOl DISK'/dev/raw/raw3,,'/dev/raw/raw4,,'/dev/raw/raw5,FAILOVERGROUP control02 DISK'/dcv/raw/raw6,,'/dev/raw/raw7,,J/dev/raw/raw8,;(3管理disk group里的磁盘add磁盘:alter diskgroup dgl add disk J/dev/raw/raw9, rebalance power 1;--若某盘之前被offline 了,则要加force alter diskgroup dgl add disk J/dcv/raw/rawlO, force;offline 磁盘:alter diskgroup dgl offline disk ? /dev/raw/raw9, drop after 0 h; --此处的 drop 0 h控制磁盘立马被删除(默认是offline后3. 6个小时后被drop)drop磁盘:alter diskgroup dgl drop disk J/dev/raw/rawlO,;5•与ASM相关的▼$视图说明v$视图名视图的基表描述V$ASM_DISKGROUPXSKFGRP查看 disks 和 disk groupsV$ASM_DISKGROUP_STATX$KFGRP_STAT查看disk groups状态V$ASM_DISKX$KFDSKX$KFKID查看disks的使用状况V$ASM_FILEX$KFFIL查看asm diskgroups里的文件V$ASM_ALIASX$KFALS查看别名V$ASM_CLIENTX$KFTMTA查看哪些instance连接到asmV$ASM_DISK_STATX$KFDSK_STATXSKFKID查看disks的状态V$OPERATIONX$KFGMG查看是否正在执行rebalancing操作N/A (后面会详细举例说明)X$KFFXP查看文件在asm里的extent mapping查看的一些查询--查看disk group相关信息select group_number, name, state, total mb, free mb from v$asm_diskgroup;—查看某disk group中disks的相关信息(比如1, 2号)select header_status, name, failgroup, path, totaljnb, free_mb from v$asm_disk where GROUP_NUMBER in(l,2);—X$KFFXP的使用举例1.查看spfile放在哪个asm diskgroup的哪个文件里select GROUP_NUMBER,FILE_NUMBERZ BYTES from v$asm_file where type=fPARAMETERFILE 1;GROUP_NUMBER FILE_NUMBER BYTES1 2711 279460846082 •查看spfile在文件中具体丄ocationselect DISK_KFFXP, AU_KFFXP,PXN_KFFXP,XNUM_KFFXP,LXN_KFFXP from x$kffxp where GROUP_KFFXP=1 and NUMBER_KFFXP=271;DISK_KFFXP AU_KFFXP PXN_KFFXP XNUM_KFFXP LXN_KFFXP295913701475说明:DISK_KFFXP是盘号 AU_KFFXP是起始位置 XNUM_KFFXP镜像的两个extents具有相同的值LXN_KFFXP 0/1 primary/mirro, 2 file header allocation unit3 •根据disk number找到disk的路径和名字 select failgroup,disk_number,path from v$asm_disk where GROUP_NUMBER=1 and DISK_NUMBER in (29,59);FAILGROUP DISK_NUMBERPATHSD01CEL02 59o/192 ・168 ・10 ・ 4/DATA_SD01_CD_03_sd01cel02SD01CEL04 29o/192 ・168 ・10 ・ 6/DATA_SD01_CD_O7_sdO1ce104--查看某datafile在asm上的分布select DISK_KFFXP, AU_KFFXP,PXN_KFFXP,XNUM_KFFXP,LXN_KFFXP from x$kffxp where GROUP_KFFXP=1 and NUMBER_KFFXP=&file_id;6 .ASM metadata的备份与恢复(即asm disks header的备份与恢复)ASM具有高度的封装性,其中较为脆弱的就是asm disk header,如果disk header 逻辑损坏了,艮卩corrupt 了 ,则整个disk group将不能够mount,依赖于asm instance 的database也将不能够startup !而且,在中增册Ijnode后asm的disk header也比 较容易岀现问题! 一般的disk header故障,可以重建diskgroup,然后使用工man进行 database恢复!(1) 10g环境备份:bs二4096 count二1 of=dd_rawlheader--每块盘都要备份dd if-/dev/raw/rawllOg环境恢复:dcl if=clcl rawlheaderbs=4096 count=l of=/dev/raw/rawl(2)llg环境备份:进入asmcmdASMCMD > md backup /oracle/full_backup20120318 --备份所有disk groupASMCMD > md backup /oracle/dgl_backup20120318 -G DG1 --只备份dgl说明:备份以文本格式记录了磁盘组的参数信息,可以使用more命令进行查看--模扌臥disk group header损坏 dd if=/dev/zero i-/dev/raw/rawl bs二4096 count二1SQL> alter diskgroup dgl dismount;Diskgroup altered.SQL> alter diskgroup dgl mount;alter diskgroup dgl mount*ERROR at line 1:ORA-15032: not all alterations performedORA-15017: diskgroup "DGl" cannot be mountedORA-15063: ASM discovered an insufficient number of disks for diskgroup "DG1"llg环境恢复: 先在所有节点上将disk group dgl进行offline srvctl stop diskgroup - g dgl 再如下执行恢复ASMCMD > md restore --full -G DG1 /oracle/dgl backup20120318 --恢复DG1 盘头最后online disk group dgl srvctl start diskgroup -g dglASMCMD > md_restore -S create_dgl. sql /oracle/dgl_backup20120318 --不执 行恢复,只生成创建DATA diskgroup的脚本说明:disk group的metadata可以恢复,但是存放在disk group中应用数据可能会 全丢失,对于ASM磁盘头损坏导致的数据不可访问,用md_restore恢复disk group的metadata之后,必须使用RMAN,恢复数据库!(3) kfod 与 kfed 工具 一读取某个disk的header kfed read /dev/。