ASM
介绍 ASM 实例由 SGA 和后台进程组成。
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 实例比 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 实例的创建和删除也可以用DBCA 这个命令来操作 。 在dbca 的第一个界面选择 配置自动存储管理 就可以了。 ASM 实例需要 CSS 进程, 如果是非 RAC 环境, 在启动 ASM 实例之前会提示用脚本
$ORACLE_HOME/bin/localconfig add 启动 CSS
1启 ASM 实例
NOMOUNT:仅启动实例
MOUNT, OPEN ,启动实例,并加载磁盘(磁盘组,未提示警告,则提示警告信息)。 OPEN 选项对于 ASM 实例无意义,等同于 MOUNT
FORCE:先执行 shutdown abort ,在 startup
[]$export ORACLE_SID=+ASM
[]$startup nomount
SQL> select name,state from v$asm_diskgroup;
SQL> select instance_name,status from v$instance;
SQL> alter diskgroup all mount;
10g版本中, asm 启动前,确保 css 守护进程已经启动
[]$crsctl check cssd
2>关闭 ASM
SQL>shutdown immediate
3>初始化参数
INSTANCE_TYPE=ASM | 数据库实例为RDBM |
ASM_POWER_LIMIT | rebalance的程度 , 0-11,低到高 |
ASM_DISKSTRING | 设置ASM 启动时检查的磁盘 |
ASM_DISKGROUPS | alter diskgroup all mount语句时要加载的磁盘组 |
|
|
|
|
4>管理 ASM 磁盘
于ASM 相关的动态性能视图
SQL> select * from dict where table_name like 'V$ASM_%';
添加,删除磁盘
ASM自动平衡。
磁盘组与failure 磁盘组的概念
外部冗余 | 于failure 磁盘组无关 |
标准冗余 | N磁盘个,至少有两个 failure 磁盘组,提高冗余 |
高度冗余 | N磁盘个,至少有三个 failure 磁盘组,提高冗余 |
当设置标准冗余,高度冗余时,每个磁盘只能属于一个failure 磁盘组
磁盘发生损坏。损坏的磁盘默认自动office 并 drop 掉。磁盘组,提供了冗余,仍保持 MOUNT 状态
ASM 扩展性
最多支持63 个磁盘组;
最多支持10000 个磁盘;
最大支持4pb/ 磁盘;
最大支持40 exabyte/ASM 存储;
最大支持1 百 W 个文件 / 磁盘组;
外部冗余时单个文件最大35tb ,标准冗余时单个文件最大 5.8tb ,高冗余度时单个文件最大 3.9tb 。
4.1>添加磁盘组
CREATE DISKGROUP diskgroup_name
[ { HIGH | NORMAL | EXTERNAL } REDUNDANCY ]
[ FAILGROUP failgroup_name ]
DISK [ NAME disk_name ] [ SIZE size_clause ] [ FORCE | NOFORCE ] ...; // 通过FORCE 选项来强制修改该盘所属磁盘组
4.2修改磁盘组
ALTER DISKGROUP DATA add disk '/dew/raw/raw7' name date_1;
4.3删除磁盘
alter diskgroup asmdisk2 drop disk asmdisk2_0001;
由于未被马上删除, DBA可以通过 alter diskgroup asmdisk2 undrop disks; 取消删除
4.4修改磁盘大小
SQL> alter diskgroup asmdisk2 resize disk asmdisk2_0000 size 1000m;
4.5手动平衡磁盘组
SQL> alter diskgroup asmdisk2 rebalance power 5;
4.6Mount/unmount 磁盘组
手工加载
S QL> select group_number,name,state,total_mb,free_mb from v$asm_diskgroup;
alter diskgroup asmdisk2 dismount;
a lter diskgroup asmdisk2 mount;
4.7 管理目录,文件
创建目录
SQL> alter diskgroup asmdisk2 add directory '+ASMDISK2/JSS1';
修改目录名
SQL> alter diskgroup asmdisk2 rename directory '+ASMDISK2/JSS1'
删除目录
SQL> alter diskgroup asmdisk2 drop directory '+ASMDISK2/JSS2';
4.8管理别名
增加别名
SQL> alter diskgroup asmdisk2 add alias '+ASMDISK2/repdb/datafile/temp01.dbf' for '+ASMDISK2/repdb/TEMPFILE/TEMP.267.714576831';
修改别名
SQL> alter diskgroup asmdisk2 rename alias '+ASMDISK2/repdb/datafile/temp01.dbf' to '+ASMDISK2/repdb/TEMPFILE/temp01.dbf';
删除别名
SQL> alter diskgroup asmdisk2 drop alias '+ASMDISK2/repdb/TEMPFILE/temp01.dbf';
4.9删除磁盘组中文件 / 别名
SQL> alter diskgroup asmdisk2 drop file '+ASMDISK2/repdb/datafile/temp01.dbf';
指定为别名,就只删除了别名,并未真正将文件删除。删除文件将自动删除别名。
4.10删除磁盘组
drop diskgroup gpname ,
如果磁盘组非空,报错,附加including contents 。如果使用了 spfile 。将自动修改 spfile 参数
5>管理 ASM 磁盘中的文件
ASM(同一个文件 ) 在保存时,也并非保存在某个磁盘,打散。
由ASM 自动空盒子, 文件名ASM 通过 OMF 管理
5.1Asm 中的文件名
+diskgroup/dbname/file_type/file_type_tag.file.incarnation
+diskgroup :磁盘组名称;
dbname : 数据库 的DB_UNIQUE_NAME 参数值;
file_type :创建的文件类型,比如
CONTROLFILE/DATAFILE/ONLINELOG/ARCHIVELOG/TEMPFILE/BACKUPSET/FLASHBACK等等,类型众多此处不一一例举;
file_type_tag :文件类型的标签,比如表空间对应的通常为该表空间名称;
file.incarnation :文件序号 +incarnation ,用来确保文件的唯一;