ASM (Automated Storage Management)

ASM failure group
Extent mirror, not Disk mirror
写入无序,读取有序

提供了3种冗余方法。
external redundancy表示Oracle不帮你管理镜像,功能由外部存储系统实现,比如通过RAID技术。 normal redundancy(默认方式)表示Oracle提供2路镜像来保护数据。 high redundancy表示Oracle提供3路镜像来保护数据。

什么是 ASM failure group? Oracle通过failure group来提供数据的高可用性。ASM使用的镜像算法并不是镜像整个disk,而是作extent级的镜像。所以很明显如果为各个failure group使用不同容量的disk是不明智的,因为这样在Oracle分配下一个extent的时候可能就会出现问题。在normal redundancy模式下,ASM环境中每分配一个extent都会有一个primary copy和一个second copy,ASM的算法保证了second copy和primary copy一定是在不同的failure group中,这就是failure group的意义。通过这个算法,ASM保证了即使一个failure group中的所有disk都损坏了,数据也是毫发无伤的。
Oracle在分配extent的时候,所有failure group中的这个将拥有相同数据的extent称为一个extent set,当Oracle将数据写入文件的时候,primary copy可能在任何一个failure group中,而second copy则在另外的failure group中,当Oracle读取数据的时候,除非是primary copy不可用,否则将优先从primary copy中读取数据,通过这种写入无序,读取有序的算法,Oracle保证了数据读取尽量分布在多个disk中。
因为公用一个硬件模块的磁盘很可能会同时损坏或者失效,所以通常我们在设计failure group时,应该把一个大的盘阵中在一个tray中的磁盘放在一个failure group中,这样我们就可以拿走一个tray,失效这个failure group,然后换上新的tray和磁盘,这跟RAID的思想是一样的。
ASM的冗余方式一经设定就无法更改,如果我们想把normal redundancy改为high redundancy就只能是创建一个新的failure group,然后把旧failure group中的文件通过RMAN或者DBMS_FILE_TRANSFER的方法移动到新failure group中去。

如果在ASM环境中没有创建failure groups情况会怎样? 即使没有显式指定,failure groups也是始终会创建的。在这种情况下,每个disk都属于一个failure group,在创建磁盘组的时候,failure group也会默认创建,名称就是disk的名字。

如果failure group出现故障怎样恢复? - 如何使用kfed实用程序来查看ASM Disk header
我们测试的数据库是Oracle10.2.0.2,首先需要编译生成kfed程序,在其它版本的Oracle中生成kfed的方法会略有不同。 cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk ikfed 此时$ORACLE_HOME/bin目录中将会产生kfed程序。
使用kfed的语法是:kfed read *devicename* text=*filename* 假设我们要读取/dev/raw/raw1的文件头,那么使用下面的语句 kfed read /dev/raw/raw1 text=raw1.out 这样raw1的文件头信息将会被dump到raw1.out文件中,大家有兴趣可以去看一下文件内容,基本上通过名字和值还是能猜测出都是些什么内容的, 包括了这个ASM Disk创建时间是什么,每个block多大,Disk名字是什么,属于哪个Disk Group,Header Status是怎么样的。虽然大部分内容都可以从ASM实例的数据字典中获得,但是在我们碰到ASM磁盘故障的时候,kfed提供的信息往往更容易让我们 判断问题点。
kfed read /ocfs02/asm/data02 > fix.txt
kfed merge /ocfs02/asm/data03 text=fix.txt

- 如何清理ASM Disk
有时候一个ASM Disk由于故障,导致我们删也删不掉,加也加不进去,通常现象是磁盘的header status状态不正确但是disk header中仍然保留了部分磁盘组的信息。此时我们就需要clear这个磁盘,然后再将它重新加入磁盘组中。
dd if= f= bs=4096 count=1 dd if=/dev/zero f= bs=4096 count=1
注意:上述语句请谨慎操作,可能会出现问题。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8797129/viewspace-692005/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8797129/viewspace-692005/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值