日期:2014-05-16 浏览次数:20680 次
ASM概述
Automatic Storage Management(ASM)是Oracle数据库10g中一个非常出色的新特性,它以平台无关的方式提供了文件系统、逻辑卷管理器以及软件RAID等服务。ASM可以条带化和镜像磁盘,从而实现了在数据库被加载的情况下添加或移除磁盘以及自动平衡 I/O 以删除“热点”。
ASM中的文件既可以由数据库自动创建和命名(通过使用 Oracle 管理文件特性),也可以由 DBA 手动创建和命名。由于操作系统无法访问 ASM 中存储的文件,因此对使用ASM文件的数据库执行备份和恢复操作的唯一途径就是通过RMAN。
ASM 作为单独的Oracle 实例实施,只有它在运行时其他数据库才能访问它。在 Linux上,只有运行OCSSD服务(由Oracle通用安装程序默认安装)才能使用 ASM。ASM对大多数系统,只需64MB内存。
ASM的优点
1. ASM是跨平台的,主流硬件平台都可以使用,管理方式一致。
2. 数据均匀分布在磁盘组里所有的磁盘上,实现了文件级别的条带化,提高了读取和写入的数据的性能。
3. 提供了多重冗余级别 ,保证数据安全。
4. 能支持在线磁盘更换。添加或删除磁盘后,自动重新分布数据,因此也不存在碎片的问题
ASM的SGA组成
ASM实例的SGA包括Buffer Cache, Share Pool, Large Pool等。 需要注意的是Share Pool, 因为Extent Map要放在这部分的内存中,需要更具数据量来估计Extent Map的大小做相应的调整。
Extent Map 的大小可以根据所有文件大小的和来估算,使用下面的语句来计算所有文件和:
Select sum(bytes)/(1024*1024*1024) from v$datafile;
Select sum(bytes)/(1024*1024*1024) from v$logfile a, v$log b where a.Group#=b.Group#;
Select sum(bytes)/(1024*1024*1024) from v$tempfile where status='online';
这3个sum 的总和对应着数据库存放ASM中所有文件大小总和,对于使用External Redundancy 的磁盘组, 每100G 需要1MB 的Extent Map,根据这个比例计算Extent Map 所需要的空间,在加上额外的2MB就可以了。在实际工作中一般不需要考虑ASM SGA的配置,使用Oracle 提供的缺省值就可以了。
ASM的后台进程
ASM 实例比RDBMS 实例多2个进程: RBAL 和 ABRn。
RBAL:这个进程也叫Rebalancer进程, 负责规划ASM 磁盘组的Reblance活动。
ABRn:是RBAL进程的子进程,这个进程在数量上可以有多个, n从1~9,这组进程负责真正完成Reblance活动。
使用ASM 作为存储的RDBMS 实例也会多出2个进程: RBAL 和 ASMB
RBAL:这个进程的主要功能是打开每个磁盘的所有磁盘和数据的Rebalance。
ASMB:这个进程作为ASM 实例和数据库实例之间的信息通道。 这个进程负责与ASM 实例的通信,它先利用Diskgroup Name 从CSS 获得管理该Diskgroup 的ASM实例的连接串,然后建立到ASM的持久连接,两个实例之间通过这条连接定期交换信息,同时也是一种心跳机制。
RDBMS实例要想使用ASM作为存储,RDBMS实例必须在启动时从ASM实例获得Extent Map,以后发生磁盘组的维护操作, ASM实例还要把Extent Map的更新信息通知给RDBMS 实例,这2个实例间的信息交换就是通过ASMB 进程完成的。 这也就为什么: ASM 实例必须要先于数据库实例启动,和数据库实例同步运行,迟于数据库实例关闭。
注意: ASM 实例和数据库实例的关系可以是1:1, 也可以是1:n。如果是1:n,最好为ASM 安装单独的ASM_HOME。
ASM相关概念
ASM磁盘组
ASM存储管理除了ASM实例之外,最大的组成部分就是ASM磁盘组。一个ASM磁盘组由过多个ASM磁盘组成。一个磁盘组内可以存放多个数据文件,一个数据文件仅仅只能位于一个磁盘组内,不能跨磁盘组。多个数据库可以共享相同的或多个磁盘组。
ASM磁盘
ASM磁盘中可以包含多个文件,多个文件也可以打散放在多个磁盘上,因此磁盘和文件是多对多的关系。一个ASM磁盘被分成多个AU(allocation unit),每个AU 大小是1M,一个Oracle数据块一定放在一个AU中,不会跨多个AU,一个AU则由多个物理磁盘块组成,AU是ASM进行扩张和收缩时的最小单位(一个windows 系统默认系统块是4K)
ASM故障组
故障组(FAILGROUP),实际上就是ASM DISK的一个逻辑组合,是磁盘组内磁盘镜像的对应关系表示。如果不指定哪些ASM DISK属于哪个FAILGROUP,那么可以理解每个ASM DISK都是一个FAILGROUP。磁盘组有3种镜像的方式:External redundancy, Normal redundancy, High redundancy.这三种镜像的方式,就是针对故障组来说,如果有2个故障组,就是Normal方式镜像,如果有3个故障组就是High方式镜像.
External Redundancy:不在ASM磁盘中提供镜像功能,如果有硬件冗余,那么可设置此项。
Normal Redundancy:提供双重镜像功能,对于文件里的每个AU都会存在该AU的一个副本。
High Redundancy:提供三重镜像功能,对于文件里的每个AU都会存在该AU的两个副本。
ASM镜像的规则:不会将AU(称为主AU)与他的镜像副本放在同一个故障组里。
ASM镜像针对AU级别进行,比如一个文件有6个AU, 磁盘组定义了两重镜像,假设P1-P6代表主AU, M1-M6代表镜像AU, 那么failuer group1中3个磁盘(假设3个),存放可能分别是(P1,M6),(P2,M5),(P3,M4),而failuer group2中3个磁盘存放可能分别是(M1,P4),(M2,P5),(M3,P6)。
SQL> create diskgroup? test normal redundancy disk 'ORCL:LUN4' name LUN4, 'ORCL:LUN3' name LUN3
?
failgroup? fg1 disk? 'ORCL:LUN1' name LUN1 , 'ORCL:LUN2' name LUN2;??
Diskgroup created.
SQL>??? select group_number,disk_number,name,failgroup,create_date,path from v$asm_disk;
GROUP_NUMBER DISK_NUMBER NAME???????????????? FAILGROUP??????????? CREATE_DATE???? PATH
------------ ----------- -------------------- -------------------- --------------- ------------------------------
?????????? 0?????????? 0?????????????????????????????????????????????????????????? /dev/raw/raw2
?????????? 0?????