扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
在oracle中提供了一个程序kfed用来查看ASM磁盘头部信息。此程序位于$ORACLE_HOME/bin目录下,如果没有可以按照以下方法生成kfed程序:
成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都做网站、成都网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的上栗网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
进入$ORACLE_HOME/rdbms/lib下,执行make -f ins_rdbms.mk ikfed命令,执行完成后会在$ORACLE_HOME/bin目录中将会产生kfed程序。
kfed的语法是:kfed read *devicename* text=*filename*
read指读取。
*devicename*指要读取的磁盘名称。
test指输出的格式为文本格式。
*filename*指输出的文件命。
text选项是可选的,使用了此选项则输出结果输出到指定文件,如果不加默认的输出是指屏幕输出。
示例如下:
查看下asm磁盘组中的磁盘:
image
(图1)
查看已有的磁盘组、块大小以及类型:
image
(图2)
读取磁盘vol01的头部信息:
[oracle@oradb bin]$ kfed read /dev/oracleasm/disks/VOL01
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD
kfbh.datfmt: 1 ; 0x003: 0x01
kfbh.block.blk: 0 ; 0x004: T=0 NUMB=0x0
kfbh.block.obj: 2147483648 ; 0x008: TYPE=0x8 NUMB=0x0
kfbh.check: 3091711072 ; 0x00c: 0xb847c460
kfbh.fcn.base: 0 ; 0x010: 0x00000000
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x01c: 0x00000000
kfdhdb.driver.provstr: ORCLDISKVOL01 ; 0x000: length=13
kfdhdb.driver.reserved[0]: 810307414 ; 0x008: 0x304c4f56
kfdhdb.driver.reserved[1]: 49 ; 0x00c: 0x00000031
kfdhdb.driver.reserved[2]: 0 ; 0x010: 0x00000000
kfdhdb.driver.reserved[3]: 0 ; 0x014: 0x00000000
kfdhdb.driver.reserved[4]: 0 ; 0x018: 0x00000000
kfdhdb.driver.reserved[5]: 0 ; 0x01c: 0x00000000
kfdhdb.compat: 168820736 ; 0x020: 0x0a100000
kfdhdb.dsknum: 0 ; 0x024: 0x0000 //这里是磁盘号,和图1中的输出一致。
kfdhdb.grptyp: 3 ; 0x026: KFDGTP_HIGH //这里是磁盘类型,和图2输出一致。
kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER
kfdhdb.dskname: VOL01 ; 0x028: length=5 //磁盘名称,如图1所示。
kfdhdb.grpname: DATA ; 0x048: length=4 //磁盘所属的磁盘组,如图2所示。
kfdhdb.fgname: VOL01 ; 0x068: length=5
kfdhdb.capname: ; 0x088: length=0
kfdhdb.crestmp.hi: 32942006 ; 0x0a8: HOUR=0x16 DAYS=0x1d MNTH=0x9 YEAR=0x7da
kfdhdb.crestmp.lo: 449689600 ; 0x0ac: USEC=0x0 MSEC=0x36e SECS=0x2c MINS=0x6
kfdhdb.mntstmp.hi: 32942646 ; 0x0b0: HOUR=0x16 DAYS=0x11 MNTH=0xa YEAR=0x7da
kfdhdb.mntstmp.lo: 1573951488 ; 0x0b4: USEC=0x0 MSEC=0x26 SECS=0x1d MINS=0x17
kfdhdb.secsize: 512 ; 0x0b8: 0x0200
kfdhdb.blksize: 4096 ; 0x0ba: 0x1000 //这里指每个block的大小,和图2的输出一致。
kfdhdb.ausize: 1048576 ; 0x0bc: 0x00100000
kfdhdb.mfact: 113792 ; 0x0c0: 0x0001bc80
kfdhdb.dsksize: 10236 ; 0x0c4: 0x000027fc //这里是磁盘的大小,和图1的输出一致。
kfdhdb.pmcnt: 2 ; 0x0c8: 0x00000002
kfdhdb.fstlocn: 1 ; 0x0cc: 0x00000001
kfdhdb.altlocn: 2 ; 0x0d0: 0x00000002
kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002
kfdhdb.redomirrors[0]: 0 ; 0x0d8: 0x0000
kfdhdb.redomirrors[1]: 0 ; 0x0da: 0x0000
kfdhdb.redomirrors[2]: 0 ; 0x0dc: 0x0000
kfdhdb.redomirrors[3]: 0 ; 0x0de: 0x0000
kfdhdb.dbcompat: 168820736 ; 0x0e0: 0x0a100000
kfdhdb.grpstmp.hi: 32942006 ; 0x0e4: HOUR=0x16 DAYS=0x1d MNTH=0x9 YEAR=0x7da
kfdhdb.grpstmp.lo: 448217088 ; 0x0e8: USEC=0x0 MSEC=0x1d0 SECS=0x2b MINS=0x6
kfdhdb.ub4spare[0]: 0 ; 0x0ec: 0x00000000
kfdhdb.ub4spare[1]: 0 ; 0x0f0: 0x00000000
kfdhdb.ub4spare[2]: 0 ; 0x0f4: 0x00000000
kfdhdb.ub4spare[3]: 0 ; 0x0f8: 0x00000000
kfdhdb.ub4spare[4]: 0 ; 0x0fc: 0x00000000
kfdhdb.ub4spare[5]: 0 ; 0x100: 0x00000000
kfdhdb.ub4spare[6]: 0 ; 0x104: 0x00000000
kfdhdb.ub4spare[7]: 0 ; 0x108: 0x00000000
kfdhdb.ub4spare[8]: 0 ; 0x10c: 0x00000000
kfdhdb.ub4spare[9]: 0 ; 0x110: 0x00000000
kfdhdb.ub4spare[10]: 0 ; 0x114: 0x00000000
kfdhdb.ub4spare[11]: 0 ; 0x118: 0x00000000
kfdhdb.ub4spare[12]: 0 ; 0x11c: 0x00000000
kfdhdb.ub4spare[13]: 0 ; 0x120: 0x00000000
kfdhdb.ub4spare[14]: 0 ; 0x124: 0x00000000
kfdhdb.ub4spare[15]: 0 ; 0x128: 0x00000000
kfdhdb.ub4spare[16]: 0 ; 0x12c: 0x00000000
kfdhdb.ub4spare[17]: 0 ; 0x130: 0x00000000
kfdhdb.ub4spare[18]: 0 ; 0x134: 0x00000000
kfdhdb.ub4spare[19]: 0 ; 0x138: 0x00000000
kfdhdb.ub4spare[20]: 0 ; 0x13c: 0x00000000
kfdhdb.ub4spare[21]: 0 ; 0x140: 0x00000000
kfdhdb.ub4spare[22]: 0 ; 0x144: 0x00000000
kfdhdb.ub4spare[23]: 0 ; 0x148: 0x00000000
kfdhdb.ub4spare[24]: 0 ; 0x14c: 0x00000000
kfdhdb.ub4spare[25]: 0 ; 0x150: 0x00000000
kfdhdb.ub4spare[26]: 0 ; 0x154: 0x00000000
kfdhdb.ub4spare[27]: 0 ; 0x158: 0x00000000
kfdhdb.ub4spare[28]: 0 ; 0x15c: 0x00000000
kfdhdb.ub4spare[29]: 0 ; 0x160: 0x00000000
kfdhdb.ub4spare[30]: 0 ; 0x164: 0x00000000
kfdhdb.ub4spare[31]: 0 ; 0x168: 0x00000000
kfdhdb.ub4spare[32]: 0 ; 0x16c: 0x00000000
kfdhdb.ub4spare[33]: 0 ; 0x170: 0x00000000
kfdhdb.ub4spare[34]: 0 ; 0x174: 0x00000000
kfdhdb.ub4spare[35]: 0 ; 0x178: 0x00000000
kfdhdb.ub4spare[36]: 0 ; 0x17c: 0x00000000
kfdhdb.ub4spare[37]: 0 ; 0x180: 0x00000000
kfdhdb.ub4spare[38]: 0 ; 0x184: 0x00000000
kfdhdb.ub4spare[39]: 0 ; 0x188: 0x00000000
kfdhdb.ub4spare[40]: 0 ; 0x18c: 0x00000000
kfdhdb.ub4spare[41]: 0 ; 0x190: 0x00000000
kfdhdb.ub4spare[42]: 0 ; 0x194: 0x00000000
kfdhdb.ub4spare[43]: 0 ; 0x198: 0x00000000
kfdhdb.ub4spare[44]: 0 ; 0x19c: 0x00000000
kfdhdb.ub4spare[45]: 0 ; 0x1a0: 0x00000000
kfdhdb.ub4spare[46]: 0 ; 0x1a4: 0x00000000
kfdhdb.ub4spare[47]: 0 ; 0x1a8: 0x00000000
kfdhdb.ub4spare[48]: 0 ; 0x1ac: 0x00000000
kfdhdb.ub4spare[49]: 0 ; 0x1b0: 0x00000000
kfdhdb.ub4spare[50]: 0 ; 0x1b4: 0x00000000
kfdhdb.ub4spare[51]: 0 ; 0x1b8: 0x00000000
kfdhdb.ub4spare[52]: 0 ; 0x1bc: 0x00000000
kfdhdb.ub4spare[53]: 0 ; 0x1c0: 0x00000000
kfdhdb.ub4spare[54]: 0 ; 0x1c4: 0x00000000
kfdhdb.ub4spare[55]: 0 ; 0x1c8: 0x00000000
kfdhdb.ub4spare[56]: 0 ; 0x1cc: 0x00000000
kfdhdb.ub4spare[57]: 0 ; 0x1d0: 0x00000000
kfdhdb.acdb.aba.seq: 0 ; 0x1d4: 0x00000000
kfdhdb.acdb.aba.blk: 0 ; 0x1d8: 0x00000000
kfdhdb.acdb.ents: 0 ; 0x1dc: 0x0000
kfdhdb.acdb.ub2spare: 0 ; 0x1de: 0x0000
[oracle@oradb bin]$
清理ASM磁盘头部信息:
image
虽然大部分内容都可以从ASM实例的数据字典中获得,但是在我们碰到ASM磁盘故障的时候,kfed提供的信息往往更容易让我们判断问题点。
如果一个ASM Disk由于故障,导致删也删不掉,加也加不进去,一般情况是磁盘的header status状态不正确,此时就需要clear这个磁盘,然后再将它重新加入磁盘组中。
1、用v$asm_disk查看asm磁盘组的剩余空间,显示free_mb为0,还以为是10gr2的bug呢,
后来试了下v$asm_diskgroup,发现它与v$asm_disk是有明显区别的。
2、测试环境:10.2.0.1.0 - Production
3、测试结果如下,欢迎补充、指正
---用下面语句可以查看你创建的asm 磁盘组情况,字段allocation_unit_size就是你想知道的au
select group_number,name,sector_size,block_size,allocation_unit_size from v$asm_diskgroup;
在10gR2中,au的默认值是1M,在11gR2中默认值是4M
该值受隐藏参数控制:_asm_ausize
内部空间:磁盘组的大小
空闲:顾名思义 ,就是没有多少可以用
数据库的空间:就是数据库占的用有量
磁盘组操作,grid用户下:
sqlplus /nolog
1
SQL conn / as sysasm
查询现有磁盘组及磁盘信息:
SQL select group_number gno,name,state,type,total_mb,free_mb,required_mirror_free_mb rmfmb,usable_file_mb ufmb from v$asm_diskgroup;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
GNO NAME STATE TYPE TOTAL_MB FREE_MB RMFMB UFMB
---------- ------------------------------ ------------ ---------- ---------- ---------- ----------
1 DG1 MOUNTED NORMAL 4076 575 879 -152
2 DG2 MOUNTED NORMAL 4076 3531 139 1696
SQL
SQL col name format a10
SQL col fgno format a20
SQL select group_number gno,name,failgroup fgno,state,total_mb,free_mb,header_status from v$asm_disk;
GNO NAME FGNO STATE TOTAL_MB FREE_MB HEADER_STATUS
---------- ---------- -------------------- ---------------- ---------- ---------- ------------------------
0 NORMAL 0 0 PROVISIONED
0 NORMAL 0 0 PROVISIONED
1 VOL1 VOL1 NORMAL 1019 141 MEMBER
1 VOL2 VOL2 NORMAL 1019 144 MEMBER
1 VOL3 VOL3 NORMAL 1019 140 MEMBER
1 VOL4 VOL4 NORMAL 1019 150 MEMBER
2 VOL5 VOL5 NORMAL 1019 880 MEMBER
2 VOL6 VOL6 NORMAL 1019 883 MEMBER
2 VOL7 VOL7 NORMAL 1019 885 MEMBER
2 VOL8 VOL8 NORMAL 1019 883 MEMBER
10 rows selected.
--创建磁盘组
SQL create diskgroup dg3 normal redundancy disk 'ORCL:VOL9','ORCL:VOL10';
1
2
3
4
5
6
Diskgroup created.
或:
SQL create diskgroup dg3 normal redundancy disk 'ORCL:VOL9' disk 'ORCL:VOL10';
Diskgroup created.
--添加磁盘
1
2
3
4
SQL alter diskgroup dg1 add disk 'ORCL:VOL9';
Diskgroup altered.
--删除磁盘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
SQL alter diskgroup dg1 drop disk VOL9;
Diskgroup altered.
SQL select group_number gno,name,failgroup fgno,state,total_mb,free_mb,header_status from v$asm_disk;
GNO NAME FGNO STATE TOTAL_MB FREE_MB HEADER_STATUS
---------- ------------------------------ -------------------- ---------------- ---------- ---------- ------------------------
0 NORMAL 0 0 FORMER
1 VOL1 VOL1 NORMAL 1019 284 MEMBER
1 VOL2 VOL2 NORMAL 1019 286 MEMBER
1 VOL3 VOL3 NORMAL 1019 284 MEMBER
1 VOL4 VOL4 NORMAL 1019 287 MEMBER
2 VOL5 VOL5 NORMAL 1019 880 MEMBER
2 VOL6 VOL6 NORMAL 1019 883 MEMBER
2 VOL7 VOL7 NORMAL 1019 885 MEMBER
2 VOL8 VOL8 NORMAL 1019 883 MEMBER
1 VOL9 VOL9 DROPPING 1019 451 MEMBER
10 rows selected.
--取消删除
1
alter diskgroup dg1 undrop disks;
--调整大小
1
ALTER DISKGROUP DG1 RESIZE DISK VOL4 SIZE 1024 M
--unmount和mount磁盘组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SQL alter diskgroup dg3 dismount;
Diskgroup altered.
SQL select group_number gno,name,state,type,total_mb,free_mb,required_mirror_free_mb rmfmb,usable_file_mb ufmb from v$asm_diskgroup;
GNO NAME STATE TYPE TOTAL_MB FREE_MB RMFMB UFMB
---------- ------------------------------ ---------------------- ------------------------------ ---------- ---------- ---------- ----------
1 DG1 MOUNTED NORMAL 4076 575 879 -152
2 DG2 MOUNTED NORMAL 4076 3531 139 1696
0 DG3 DISMOUNTED
SQL alter diskgroup dg3 mount;
Diskgroup altered.
日常我们检查ASM磁盘空间通过如下:
export Oracle_SID=+ASM1
通过检查v$asm_diskgoup视图可以检查磁盘组空间的使用情况,如下:
SQL select group_number,name,total_mb,free_mb from v$asm_diskgroup;
GROUP_NUMBER NAME TOTAL_MB FREE_MB
------------ ------------------------------ ---------- ----------
1 DATA 8032 2626
今天才发现通过asmcmd,也可以实现很多的功能,灰常的好的一个发现:
ASMCMD ls
DATA/
如上我们可以看到ASM实例中的磁盘组情况,比如ASM实例磁盘组的数据库和实例的连接使用情况:
ASMCMD lsct data
DB_Name Status Software_Version Compatible_version Instance_Name
rac CONNECTED 10.2.0.4.0 10.2.0.1.0 rac1
加上-H参数后显示如下:
ASMCMD lsct -H data
rac CONNECTED 10.2.0.4.0 10.2.0.1.0 rac1
可以看到-H参数是的上面的一些列信息显示去除掉了。
而采用lsdg也可以检查ASM实例中磁盘组的空间使用情况:
ASMCMD lsdg data
State Type Rebal Unbal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Name
MOUNTED EXTERN N N 512 4096 1048576 8032 2626 0 2626 0 DATA/
还有如下方法:
ASMCMD du data
Used_MB Mirror_used_MB
5312 5312
ASMCMD ls -s
Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Name
512 4096 1048576 8032 2626 0 2626 0 DATA/
还有如下的其他常用的命令:
ASMCMD ?
commands:
--------
cd
du
find
help
ls
lsct
lsdg
mkalias
mkdir
pwd
rm
rmalias
当然就不进行一一列举了,到了ORACLE 11g,asmcmd中参数选项显然很多了:
ASMCMD ?
commands:
--------
md_backup, md_restore
lsattr, setattr
cd, cp, du, find, help, ls, lsct, lsdg, lsof, mkalias
mkdir, pwd, rm, rmalias
chdg, chkdg, dropdg, iostat, lsdsk, lsod, mkdg, mount
offline, online, rebal, remap, umount
dsget, dsset, lsop, shutdown, spbackup, spcopy, spget
spmove, spset, startup
chtmpl, lstmpl, mktmpl, rmtmpl
chgrp, chmod, chown, groups, grpmod, lsgrp, lspwusr, lsusr
mkgrp, mkusr, orapwusr, passwd, rmgrp, rmusr
volcreate, voldelete, voldisable, volenable, volinfo
volresize, volset, volstat
其他的就不一一列举了。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流