共计 7351 个字符,预计需要花费 19 分钟才能阅读完成。
这期内容当中丸趣 TV 小编将会给大家带来有关 Oracle ASM 的概念以及工作原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
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 错误。
上述就是丸趣 TV 小编为大家分享的 Oracle ASM 的概念以及工作原理是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注丸趣 TV 行业资讯频道。