ASM:Automatic Storage Management,是ORACEL10G以后为了简化存储管理的复杂性,也是为了摆脱对其他厂商的依赖而推出的。ASM作为目前ORACLE推荐的首选存储方案,除了具有集群文件系统的功能外,同时还集成了冗余、IO分散等卷管理器的功能。我们可以通过两种方式使用ASM,包括建立在裸设备上,如果安装了ASMLib,也可以建立的块设备上。

使用ASM需要从ORACLE官方网站下载ASM驱动包,一般包括了ASM和ASMLib两部分,需要注意ASM和ASMLib是两部分,ASMLib只是ASM的一个管理工具包,我们常用ASMLib包创建ASM磁盘,如/etc/init.d/oracleasm VOL1 /dev/sdb1[这里也可以是裸设备].如上所诉,如果我们直接使用裸设备作为我们的ASM磁盘,那么就可以不用安装ASMLib (主要是通过asm_disstring='' 参数指定)

如下的一些ASM包,下载ASM包需要根据自己的操作系统内核版本来选择:

oracleasm-2.6.18-194.el5-2.0.5-1.el5.i686.rpm
oracleasm-2.6.18-194.el5debug-2.0.5-1.el5.i686.rpm
oracleasm-2.6.18-194.el5-debuginfo-2.0.5-1.el5.i686.rpm
oracleasm-2.6.18-194.el5PAE-2.0.5-1.el5.i686.rpm
oracleasm-2.6.18-194.el5xen-2.0.5-1.el5.i686.rpm
oracleasmlib-2.0.4-1.el5.i386.rpm
oracleasm-support-2.1.8-1.el5.i386.rpm

1.后台进程

ASM与普通的RDBMS非常类似,ASM由一些后台进程组成,也可以通过sql*plus工具维护。
ASM实例和传统的实例的RDBMS实例相比多两个进程:RBAL和ABRn

<1>RBAL:这个进程也叫rebalancer进程,负责规划ASM磁盘组的rebalancer活动。
<2>ABRn:是RBAL进程的子进程,这个进程在数量上可以有多个,n从1~9,这些子进程负责完成真正的rebalancer活动。
<3>传统进程:ASM实例也有DBWR、LGWR等进程。

而使用ASM作为存储的RDBMS实例,也会多出两个进程:RBAL和ASMB.

<4>RBAL:这个进程的主要功能是打开每个磁盘组的所有磁盘和数据的rebalancer。
<5>ASMB:这个进程作为ASM实例和数据库实例之间的信息通道。这个进程负责与ASM实例的通信,它先利用Diskgroup Name从CSS获得管理该Diskgroup的ASM实例的连接串,然后简历到ASM的持久连接,两个实例通过这条连接定期交换信息,同时也是一种心跳机制。 这也说明了当我们的单实例数据使用ASM存储时,为什么要单独启动一个CSS进程。
<6>O0nn01~10:这是一组进程,这组进程建立到ASM实例的连接,某些长时间操作如创建数据文件,RDBMS会通过这些进程向 ASM发送信息。

注意:ASM实例必须要先于数据库实例启动、和数据库实例同步运行、迟于数据库实例关闭。

2.ASM的安装位置

ASM实例和RDBMS实例的关系需要注意以下两点:

<1>如果一个节点上的ASM实例和RDBMS实例是1:n的关系,也就是一个ASM实例同时为多个RDBMS实例提供存储, 则最好为 ASM 安装单独的$ASM_HOME,并和RDBMS的$ORACLE_HOME区分开来,在这种环境下需要使用ASM_HOME下的监听器。
<2>如果节点上的ASM实例和RDBMS实例是1:1的关系,也就是ASM实例只为一个RDBMS实例提供存储,则ASM和RDBMS可以共用一个$ORACLE_HOME

3.创建ASM磁盘

配置ASM磁盘需要注意以下几点:

<1>ASM是以Oracle用户身份运行的,要想让它能够发现磁盘分区并进行管理和使用,必须把这些分区的属主设置成Oracle。

<2>可通过两种方式创建ASM磁盘,一种是裸设备,一种是ASMLib方式。

<3>使用裸设备创建的ASM磁盘参数可以这样指定:

asm_diskstring='/dev/raw/raw1','/dev/raw/raw5' 或 asm_diskstring='/dev/raw/raw*'

<4>使用ASMLib方式创建的ASM磁盘参数可以这样指定即"ORCL:磁盘名"格式:

asm_diskstring='ORCL:VOL1','ORCL:VOL2' 或 asm_diskstring='ORCL:VOL*'

#######################

配置裸设备

配置裸设备我就不详细描述了,下面只是给出命令。我的博客里也有相关的文章。注意的是配置完裸设备需要把裸设备的属主改成Oracle,操作系统版本不同,配置稍有差别:

(1)对磁盘分区   fdisk -l /fdisk /dev/sdb
 (2)编辑rawdevices配置文件,添加裸设备、块设备的绑定条目 
 vi /etc/sysconfig/rawdevices
    /dev/raw/raw1 /dev/sdb1
 (3)启动rawdevices服务   service rawdevices start
 (4)配置随系统自动启动   chkconfig rawdevices on   一般默认是都on
 (5)确认rawdevices服务启动  service rawdevices status
 (6)查看裸设备  raw -qa或直接cd /dev/raw;ls
 (7)修改权限   cd /dev/raw;chown oracle:dba raw*
 
  设置权限的时候 chown 命令重启系统后会失效,可以把此命令配置在/etc/rc.local中。

#######################

ASMLib方式

使用ASMLib就不需要创建裸设备,可以直接在块设备上创建(当然也可以裸设备上创建)。

(1)根据操作系统内核版本下载安装    rpm -ivh oracleasm*.rpm

(2)配置驱动   /etc/init.d/oracleasm configure

(3)确认配置成功,ASMLib被加载#3种方法

--确认ASMLib被加载

lsmod |grep asm

--确认系统内存中存在oracleasmfs文件系统

cat /proc/filesystem

--确认oracleasmfs被挂载

df -ha

(4)创建ASM磁盘

/etc/init.d/oracleasm createdisk VOL1 /dev/sdb1    ...

(5)检查ASM磁盘是否创建成功(ASMLib方式的磁盘)

cd /etc/init.d/oracleasm listdisks

(6)查看每个ASM磁盘对应的物理设备

/etc/init.d/oracleasm querydisk VOL1

4.ASM的存储结构

ASM的存储我们需要明白两点:

<1>每个磁盘组都有一个ASM文件系统。

<2>ASM磁盘组自身就带有条带化和镜像功能。

在使用ASM存储的数据库实例与普通采用文件系统的数据库实例其存储结构有所不同,在采用ASM存储的数据库实例中其RDBMS部分仍然采用tablespace,segment,extent这种结构来组织空间,这与传统的方式一样.所不同的是extent不再对应到data block,而是对应 到ASM的AU(Allocation Unit),空间的分配不再以data file形式,而是ASM file,这一点也证明了ASM 文件系统的存在.

ASM存储特点:
<1> asm可以把多个磁盘分区(asm disk)集合成一个磁盘组(asm diskgroup)提供给RDBMS使用。对于RDBMS而言,ASM DiskGroup和普通的磁盘没有区别,都可以在上面创建文件。使用asm存储隔离了RDBMS实例对底层存储技术的依赖,RDBMS只专心自己的事务功能即可,而不必关心底层存储的实现细节。
<2> 一个Disk Group有1到多个ASM DISK组成,一个ASM DISK只能属于一个Disk Group。
<3> 一个Disk Group中可以包含多个Disk File,但是一个Disk file只能在一个Disk Group内,每个Disk File会在ASM Disk间平均分配,分散IO以提高性能。
<4> 如果磁盘组空间不够,可以动态向磁盘组中添加、删除磁盘,然后ASM重新条带化数据文件,而所有这些对RDBMS都是透明的。
<5> ASM还提供了卷管理器才有的镜像保护功能,这种镜像是在ASM file级别的,而不像其他的卷管理器是在卷级别。
<6> ASM把asm disk划分为若干存储单元叫作Allocation Unit(AU);一般每个AU是1MB。
<7> 数据库仍然使用extent作为基本单位,extent是RDBMS的内容,需要对应到ASM的AU,extent和AU的对应关系一般为1:1,但是如果使用了ASM的冗余功能,关系就变成了1:2或1:3(叫作2-way或3-way mirroring)。
<8> 数据库仍然是利用extent map来操作数据。在传统的存储方式中,extent map是从数据文件中获得的;而在ASM环境中,这个extent map不是从数据文件中获得,
     而是从ASM实例获得。
#==============================
   什么extent map: 在数据库中 Data file和segment的空间分配、扩展都不是以Data Block为单位的,而是以Extent为单位,这个extent大小在创建表空间的时候指定;整个表空间的所有extent信息就构成了extent map。根据extent map是记录在数据字典中还是记录在数据文件中,又可以分为数据字典和本地管理两种管理方式,在Oracle10g以后,缺省的方式都是本地管理。
<9> 数据库实例从asm获得extent map来操作extent map后,后续的读写操作直接操作磁盘,而不再经过ASM。
<10> asm实例只负责对asm磁盘组的维护,包括创建、删除磁盘组,添加、删除磁盘;而不负责数据文件的读写,这些操作由数据库实例完成。

5.RDBMS和ASM之间的交互

当ASM实例挂载一个磁盘组之后,ASM会把Disk Group Name、ASM Instance Name、Oracle Home Path等信息注册到CSS,这些信息会被RDBMS用来构造Connect String。
     当RDBMS启动过程中需要访问某个ASM File时,RDBMS会和CSS联系,从CSS获得Connect String,然后发起一个到ASM实例的连接,这条ASM和 RDBMS实例之间的初始连接叫做Umbilicu(脐带),只要RDBMS打开ASM File,这个连接就会保持活动。直到所有ASM File都被RDBMS关闭后,这个连接才会关闭。在RDBMS一端,这个连接是ASMB后台进程;而在ASM方面,是一个前台进程,叫Umbilicus Forground(UFG).ASM和RDBMS通过这个连接发送互动信息。

如果检查LISTENER中ASM实例的注册信息,可以看到ASM不是OPEN状态,而是以BLOCKED状态注册的。BLOCKED状态禁止了通常方式的数据库连接,从而确保所有连接都是通过ASMB后台进程的路由完成,保证了ASM操作的安全性。

创建ASM文件的过程如下:

<1>、用户在RDBMS中输入create file命令;

<2>、RDBMS会产生一个前台进程去连接ASM实例的进程;

<3>、创建文件的指令会通过这个连接交给ASM实例;

<4>、ASM实例根据指令创建文件,从磁盘中分配AU;ASM会根据指令中指定的template或Diskgroup默认的template来决定文件的冗余、条带策略;

<5>、AU分配完成后,ASM就把这个文件的extent map发送给RDBMS;ASM创建一个COD记录以跟踪目前这个挂起的操作;

<6>、RDBMS发起IO操作,初始化这个ASM File;这时候不需要ASM介入;

<7>、初始化完成后,RDBMS向ASM发送commit请求;

<8>、ASM接到commit请求后,ASM的LGWR进程把ACD change Record 写入到ACD Directory;然后ASM的DBWR进程把Allocation Table、File Directory、Alias Directory异步写回磁盘;

<9>、如果RDBMS放弃创建,ASM会使用COD(相当于ASM中的回滚段)回滚文件操作。回滚操作会把Allocation Entries标志为free,释放File Directory中的条目。

ASM File的打开和IO过程

<1>、RDBMS向ASM Instacne发生file-open请求

<2>、ASM查看ASM SGA中是否存在相应的Extent Map,如果有则直接通过ASMB把Extent Map发生给RDBMS,如果没有则从File Directory,再通过ASMB把Extent Map发生给RDBMS

<3>、在10g中ASM会把整个ASM FILE的extent map都发生给RDBMS,在11g中只会返回前60个Direct Extent,Indirect Extent会在需要时载入。

<4>、ASM FILE的整个IO过程由RDBMS直接操作ASM FILE不需要ASM实例介入

删除ASM File的过程

<1>、RDBMS实例想ASM实例发出删除请求

<2>、ASM创建COD记录用于回滚操作,接着标记allocation table中的条目为free,释放File directory记录,

删除alias direcotry中的别名记录。

<3>、如果此时ASM实例崩溃,则利用COD记录进行回滚

6.ASM、RDBMS、CSS关系

      在ASM实例与RDBMS实例运行过程中,CSS起到了重要的作用。我们知道存储是由ASM实例维护的,但是RDBMS在运行过程中,并是不是所有的读写都要借助ASM实例,RDBMS实例只在打开数据文件时需要从ASM实例获得Extent Map信息,并把这些信息保存在SGA中。而以后的数据读写都是直接操作存储的。因此如果ASM实例终止,必须关闭所有使用该ASM的RDBMS实例,以确认这些RDBMS实例不能操作该ASM管理的存储上的数据,也就是要进行IO隔离(IO Fencing)。
     ASM实例启动时,需要在CSS中注册,而所有实用ASM存储的RDBMS实例启动时,也要像CSS注册,同时从CSS获得ASM的连接串。RDBMS实例和ASM实例是通过ASM实例端的UFG和RDBMS实例端的ASMB进程组成的通道进行通信。
   如果ASM实例Crash,UFG就会终止RDBMS的ASMB进程,对于RDBMS而言,这个进程是关键进程,其终止会导致RDBMS的终止。
   ASM进程和RDBMS进程除了主动向CSS注册,CSS也要跟踪两个实例的IO的健康状况,如果RDBMS的实例终止,CSS通知ASM,ASM实例就会代替RDBMS实例执行一些资源回收释放工作。ASM实例将不受影响仍然正常运行。

7.ASM别名

先来了解一下OMF:
  OMF,全称是Oracle_Managed Files,即Oracle文件管理,使用OMF可以简化管理员的管理工作,不用指定文件的名字、大小、路径,
其名字,大小,路径由oracle 自动分配。在删除不再使用的日志、数据、控制文件时,OMF也可以自动删除其对应的OS文件。
  想使用OMF需要设置3个参数,我们可以根据需要对这三个参数设置,三个参数作用不解释了  
  db_create_file_dest
  db_create_online_log_dest_n
  db_recover_file_dest

ASM别名可以看作是OMF在ASM上的扩展,它定义了各种文件在ASM磁盘上的存放位置,因此ASM file的存放路径和文件命名是循序特定的格式的,格式如下:
 +diskgroup_name/database_name/database file type/tag_name.file_number.incarnation
     这个完整的名称叫做FQDN(Fully Qualified Filename Notation)。但是FQDN对于DBA来说不容易记忆,因此Oracle又提供了ASM Alias来方便管理和记忆。
 
   ASM别名的目的就是为了方便管理和记忆,所以没有太多的道理可讲,但是在使用上有些小技巧需要注意。别名即可以在文件创建之初就指定,也可以在文件创建之后再补上,两者略有区别。
  创建ASM别名两种方法:
  <1>在RDBMS中创建数据文件时就指定别名。
   create tablespace test datafile '+data/test.dbf' size 10m;
  
  <2>在ASM中对已有的ASM文件创建别名。
  alter diskgroup data add alias '+data/test.dbf' for '+data/ORCL/datafile/test.273.660075820'
 
  这两种方式的区别在于,后者指定的别名对于数据库不可见。

8.ASM的限制

目前ASM只支持数据库文件(包括控制文件、spifle、数据文件、日志文件、备份文件),还不支持其他文件。ASM会检查每个文件的文件头,只有符合要求的才能保存到ASM  中,对于不能识别的文件报ORA-27047:"unable to read the header block or the file"错误。

9.ASM相关的一些视图和数据字典

V$ASM_DISK
V$ASM_DISK_STAT
V$ASM_DISKGROUP
V$ASM_DISKGROUP_STAT
V$ASM_FILE
V$ASM_ALIAS
V$ASM_TEMPLATE
V$ASM_CLIENT
V$ASM_OPERATION

10.使用裸设备配置ASM实例

http://www.cnblogs.com/myrunning/p/4270849.html

11.将文件系统数据库迁移到ASM中

http://www.cnblogs.com/myrunning/p/4270889.html

12.使用文件模拟ASM磁盘

 http://www.cnblogs.com/myrunning/p/4280845.html

参考:张晓明<<大话Oracle RAC>>
      http://czmmiao.iteye.com/blog/1753396
      http://blog.csdn.net/zq9017197/article/details/7635095
      http://www.cnblogs.com/springside-example/archive/2011/08/30/2529664.html

对ASM存储管理的一些初步理解记录的更多相关文章

  1. Mysql加锁过程详解(7)-初步理解MySQL的gap锁

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

  2. 初步理解@Transactional注解

    在SSM项目中,经常在业务层的类或者方法上看到@Transactional注解,只是知道这个注解的作用是进行事务管理,但是具体有哪些属性,在什么情况下进行回滚,确是不那么清楚.所以在网上看了一些视频和 ...

  3. javascript 原型及原型链的初步理解

    最近折腾了好久,终于是把js里面的原型和原型链做了个初步的理解: 在这里,我打个比喻: 我(child),我妈constructor(构造函数)生了我:别人问我老妈跟谁生的我,于是此时我妈会指向我爸爸 ...

  4. Spring学习笔记--环境搭建和初步理解IOC

    Spring框架是一个轻量级的框架,不依赖容器就能够运行,像重量级的框架EJB框架就必须运行在JBoss等支持EJB的容器中,核心思想是IOC,AOP,Spring能够协同Struts,hiberna ...

  5. Graph Cuts初步理解

    一些知识点的初步理解_8(Graph Cuts,ing...) Graph cuts是一种十分有用和流行的能量优化算法,在计算机视觉领域普遍应用于前背景分割(Image segmentation).立 ...

  6. 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感

    关键字:名称,名称空间,引用,指针,指针类型的指针(即指向指针的指针) 我读完后的理解总结: 1. 我们知道,python中的变量的赋值操作,变量其实就是一个名称name,赋值就是将name引用到一个 ...

  7. springBoot(1)---springboot初步理解

    springboot初步理解 在没有用SpringBoot之前,我们用spring和springMVC框架,但是你要做很多比如: (1)配置web.xml,加载spring和spring mvc 2) ...

  8. 关于THINKPHP5模型关联的初步理解

    初步理解的意思是,使用最常用的关联模型,然后可以正常运行 还是打个比方 文章表  和文章分类表 一个文章分类可以有多个文章  所以  文章分类模型和文章建立 hasMany的关联 而文章和文章分类表则 ...

  9. spfa+差分约束系统(C - House Man HDU - 3440 )+对差分约束系统的初步理解

    题目链接:https://cn.vjudge.net/contest/276233#problem/C 题目大意:有n层楼,给你每个楼的高度,和这个人单次的最大跳跃距离m,两个楼之间的距离最小是1,但 ...

随机推荐

  1. @import与link

    本质上,这两种方式都是为了加载CSS文件,但还是存在着细微的差别. 1. 老祖宗的差别.link属于XHTML标签,而@import完全是CSS提供的一种方式. link标签除了可以加载CSS外,还可 ...

  2. JavaScript 之 iframe自适应问题---可以用来实现网页局部刷新

    1.HTML <iframe src="index.html" id="iframepage" frameborder="0" scr ...

  3. coffeeScript学习02

    闭包 closure = do -> _private = "foo" -> _private console.log(closure()) #=> " ...

  4. const int *

    5.Please choose the right statement about constusage: A.const int a;//const interger B.int const a;/ ...

  5. 【主席树】【bzoj2161】[hdu4348]

    #include<cstdio> #include<algorithm> #include<cstring> #define N 400000 using name ...

  6. ssl原理,非对称加密握手,对称加密传输

    SSL的基本思想是用非对称加密来建立链接(握手阶段),用对称加密来传输数据(传输阶段).这样既保证了密钥分发的安全,也保证了通信的效率. SSL握手,单方服务器认证(一般的浏览器上网) SSL握手,双 ...

  7. three.js入门3

    为什么要用three.js Three.js为我们封装了底层的WebGl接口,使我们在无需掌握繁冗的图形学知识的基础下可以轻松的创建三维场景.相比较使用底层的WebGL我们可以使用更少的代码,大大的降 ...

  8. HDU5785 Interesting(Manacher + 延迟标记)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5785 Description Alice get a string S. She think ...

  9. HDU5739 Fantasia(点双连通分量 + Block Forest Data Structure)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5739 Description Professor Zhang has an undirect ...

  10. POJ3184 Ikki's Story I - Road Reconstruction(最大流)

    求一次最大流后,分别对所有满流的边的容量+1,然后看是否存在增广路. #include<cstdio> #include<cstring> #include<queue& ...