Oracle ASM 简介
Oracle ASM:Automatic Storage Management
是Oracle主推的一种面向Oracle的存储解决方案,将多个裸设备以卷组的方式组织在一起,ASM和RDBMS非常相似,也是由实例和文件组成,也可以通过sqlplus工具来维护。
ASM实例的创建和删除也可以用DBCA这个命令来操作。
ASM实例,唯一的功能就是对磁盘组进行管理;
在DBCA的第一个界面选择配置自动存储管理就可以了。
ASM实例需要CSS进程,如果是非RAC环境,在启动ASM实例之前会提示用脚本
$ORACLE_HOME/bin/localconfigadd启动CSS。
ASM 实例由SGA 和后台进程组成;
ASM 实例的SGA包括Buffer Cache,Share Pool,Large Pool等。
需要注意的是Share Pool,因为Extent Map 要放在这部分的内存中,需要根据数据量来估计Extent Map 的大小做相应的调整。
Extent Map 的大小可以根据所有文件大小的和来估算,使用下面的语句来计算所有文件和:
Select sum(bytes)/(102410241024) from v$datafile;
Select sum(bytes)/(10241024) from v$logfile a,v$log b where a.Group#=b.Group#;
Select sum(bytes)/(10241024*1024) from v$tempfile where status='ONLINE';
这3个sum 的总和对应着数据库存放ASM中所有文件大小总和,
对于使用External Redundancy外部冗余的磁盘组,每100G 需要1MB 的Extent Map,根据这个比例计算Extent Map 所需要的空间,在加上额外的2MB就可以了。
在实际工作中一般不需要考虑ASM SGA的配置,使用Oracle 提供的缺省值就可以了。
ASM 实例的SGA 需要的内存很小,ASM SGA的默认值如下:
SHARED_POOL_SIZE = 48M
LARGE_POOL_SIZE = 12M
SHARED_POOL_RESERVED_SIZE = 24M
SGA_MAX_SIZE = 88M
Instance_type: 对于ASM 实例,这个应该设置成ASM,如果是数据库实例,则是RDBMS.
DB_UNIQUE_NAME: 这个参数使用缺省值+ASM即可;


ASM后台进程
ASM 实例比RDBMS 实例多2个进程: RBAL 和 ABRn。
RBAL:这个进程也叫Rebalancer进程, 负责规划ASM 磁盘组的Reblance活动。
ABRn:是RBAL进程的子进程,这个进程在数量上可以有多个,n从1--9,这组进程负责真正完成Reblance活动。
asm_rbal_+ASM1 数据重新均衡(发生磁盘组损坏,或者新增磁盘,进行数据重新均衡)
abr 协助rbal重组的进程;

asm_lmon_+ASM1 全局队列服务进程
asm_lmd0_+ASM1 全局队列服务的守护进程
asm_lms0_+ASM1 全局高速缓存服务
asm_lck0_+ASM1 锁定进程
asm_gmon_+ASM1 负责监控磁盘活动的进程
使用ASM 作为存储的RDBMS 实例也会多出2个进程: RBAL 和 ASMB
RBAL:这个进程的主要功能是打开每个磁盘的所有磁盘和数据的Rebalance。
ASMB:这个进程作ASM实例和数据库实例之间的信息通道。这个进程负责与ASM 实例的通信,它先利用Diskgroup Name从CSS 获得管理该Diskgroup的ASM 实例的连接串,然后建立到ASM 的持久连接,两个实例之间通过这条连接定期交换信息,同时也是一种心跳机制。
mark 为asm磁盘组里的au分配单元做标记
onnn 是asm交换消息的从属进程
pz9n 在asm实例当中协同gv$访问数据的后台进程
ASM磁盘组平衡级别,默认为1,最高11,级别越高平衡速度越快;
select * from v$parameter where name='asm_power_limit'
ASM_POWER_LIMIT:
在磁盘组中添加、删除磁盘时,磁盘组会自动对数据在新旧磁盘间重新分配,从而实现分散IO, 这个过程就叫再平衡(Rebalance);
这个动作会在磁盘间移动数据,因此虽然是联机操作,仍然会影响部分性能,所以要在系统空闲的时候进行;
该参数控制Rebalance速度, 取值范围0-11;最小值为0,代表不做Rebalance,最大值11 ,代表最快的速度,也意味着严重影响性能,1代表最慢的速度和最小的性能影响。
除了在初始化参数中定义该参数,也可以在操作时指定。
比如:SQL> alter diskgroup DATA rebalance power 5;
考试点:
标准冗余,ASM要求该磁盘组至少要拥有两个failure磁盘组,即提供双倍镜像保护,对于同一份数据(ASM中镜像单位不是磁盘,也不是块,而是一种AU的单位,该单位大小默认是1M)将有主从两份镜像,并且ASM通过算法来自动确保主、从镜像不会存在于同一份failure 磁盘组,这样就保障了就算整个failure 磁盘组都损坏,数据也不会丢失。
该题中创建磁盘组使用了NORMAL REDUNDANCY即是说,该磁盘组拥有两个或两个以上的磁盘组成一组故障磁盘组,提供双倍镜像保护,题中为两个磁盘。
controller1组中包含两个磁盘, '/devices/diska1', '/devices/diska2'
controller2 组中包含两个磁盘,'/devices/diskb1', '/devices/diskb2' ;
如果controller1被破坏,则数据就会转移到controller2 ,并且自动rebalance。
RDBMS 实例要想使用ASM作为存储, RDBMS 实例必须在启动时从ASM 实例获得Extent Map, 以后发生磁盘组的维护操作, ASM 实例还要把Extent Map的更新信息通知给RDBMS 实例, 这2个实例间的信息交换就是由ASMB 进程完成的。
这也就是为什么:ASM 实例必须要先于数据库实例启动,和数据库实例同步运行,迟于数据库实例关闭。
注意: ASM 实例和数据库实例的关系可以是1:1,也可以是1:n,即一个ASM实例对应多个库。如果是1:n,最好为ASM 安装单独的ASM_HOME。
查询连接到asm磁盘组的数据库实例,有实例连接,则不能重启asm实例;
select group_number,instance_name,db_name,status from v$asm_client;
没有数据库实例连接asm磁盘组实例,才可以停asm实例;
asm不存在控制文件的概念;
使用crsctl、asmcmd也可以启停asm,但是不如sqlplus启停看着直观;
select group_number,name,path,state,total_mb,free_mb from v$asm_disk
如果group_number为0,则表示未使用

创建磁盘组:
sql>create diskgroup dg1 external redundancy disk'/dev/rhdisk8'
给磁盘组增加磁盘:

删除磁盘组:sql>drop diskgroup dg1 including contents
对磁盘组的维护操作:

ASM常用命令:
ASMCMD> lspwusr --查看asm实例中特权用户
ASMCMD> spget --查看参数文件位置,asm实例启动从这个位置读取参数文件
ASMCMD> lsdg --查看磁盘组
ASMCMD> lsdg data --查看磁盘组详细信息
ASMCMD> lsdsk -G data --查看磁盘组中的磁盘
ASMCMD> lsof -G data --查看磁盘组中的数据文件
ASMCMD> lsattr -l -G data --查看DATA磁盘组的属性
ASMCMD> iostat -G data --查看磁盘组中各个磁盘的读写数据量(v$asm_disk)
ASMCMD> iostat -t -G data --查看磁盘组中各个磁盘的读写数据量及时间
ASMCMD> find --type controlfile +data/PPMPPRD * --查找类型为控制文件的所有文件
ASMCMD> ls -s --查看文件占用空间大小
ASMCMD> orapwusr --modify --password user1 --修改特权用户的口令
浙公网安备 33010602011771号