摘要 随着数据库的持续运行,数据库的大小不断扩大,要求不断增大系统的存储容量,对于普通的文件系统,增加存储的过程非常复杂。Oracle10g的自动存储管理系统(automatic storage management asm)就是针对该问题而产生的,它大大简化了数据库存储系统的管理。
1 前言
如今,大型数据库系统要求尽量减少有计划的停机时间,同时随着数据库运行时间的持续增加,数据库的大小和数据库的文件数目也在不断增加,这种趋势导致磁盘容量和数据库大小每隔几年就翻一番,但是dba人数在这期间一般不会翻倍,因此要求dba管理更多和更大的数据库;还有一个问题,当数据库的存储容量不足时,向数据库添加磁盘,以增加磁盘容量时,普通的存储系统需要手工操作,过程非常复杂,而且要求数据库停机。一般包括以下步骤:(1)创建逻辑卷。(2)创建文件系统。(3)安装oracle数据软件。(4)创建并装载数据库。接着还要查找磁盘热点,移动数据文件减少竞争,并担心哪一天磁盘容量又不足,必须再添加更多的磁盘,移动所有的数据文件实现负载平衡,减少竞争。
可喜的是随着oracle10g新的存储管理特性asm(automatic storage management,自动存储管理)的出现,这种情况可以动态的改变了.
Asm集成了文件系统和卷管理器,它特别为oracle数据文件而构建。它扩展了same(stripe and mirror everything)的概念以优化性能,不再需要手工io调整(合理布局数据文件避免热点),自动实现数据文件的条带和镜像,在不停机的情况下,可以向存储系统增加磁盘,并自动调整数据文件的分布;另外,asm允许创建一个存储池(称为磁盘组),并管理文件的命名和数据库文件在磁盘上的放置,这些对于用户和管理人员来说都是透明的,屏蔽了底层数据文件的管理;还可以使用sql命令,命令行接口或企业管理器改变asm的存储如添加磁盘,删除磁盘等。可见,使用asm大大简化了数据库的storage management和provisioning。
2 Asm的结构
Asm的主要组件包括磁盘组、磁盘、失败组、文件和模版,下面一一介绍:
2.1 磁盘组
包含一组磁盘,该组磁盘作为一个单元进行管理。它是asm中最高级的数据结构,类似于逻辑卷管理器的卷组,但Asm文件系统层在磁盘组中隐含创建,该文件系统对用户是透明的,只能通过asm数据库接口和命令行工具访问;并具有自动的文件级条带和镜像的能力,在asm磁盘组中创建的数据库文件以文件分区(file extents)存储,文件的文件分区均匀的分布在磁盘组中所有联机磁盘上,提供均匀的i/o负载。磁盘组的类型有三种:高冗余的磁盘组,提供三路镜像;正常冗余磁盘组,提供两路镜像;外部冗余磁盘组,asm不提供镜像保护,镜像级别由外部存储系统决定,它决定了磁盘组中文件的镜像级别,可以在创建磁盘组时指定磁盘组的类别。
2.2 磁盘
磁盘组中的磁盘称为asm磁盘,当asm实例启动时,它自动发现所有可用的磁盘,决定磁盘属于那个磁盘组。磁盘是一个广义的概念,它可以是一个分区,一块磁盘,一个逻辑单元号还可以是nas的文件。磁盘有各种header statuses,反映了磁盘的状态:
Former 以前磁盘是磁盘组的一部分。
Candidate 表示磁盘可用,并可以添加到磁盘组。
Member磁盘已经是磁盘组的一部分。
Provisioned 类似于candadate因为对于磁盘组可用。但是,表示该磁盘使用asmlib已经配置或可用。
2.3 失败组
对于不使用external redundancy的系统,asm利用失败组提供了内部冗余机制和可用性,失败组是磁盘组的一个子集,它是多个磁盘的集合,当磁盘组的某个组件损坏后,这些磁盘变得不可用。例如:磁盘控制器或整个阵列都是一个失败组。如果为磁盘组定义多个失败组,asm能够容忍单个失败组中的多个磁盘同时失败。
2.4 文件
写在asm磁盘上的文件称为asm文件,它的名字由asm自动产生,文件的格式为+group/dbname/file_type/file_type_tag.file.incarnation,称为完全合格的asm文件名。
+group磁盘组名字。
dbname是数据库的DB_UNIQUE_NAME
。
file_type oracle的文件类型。
file_type_tag与oracle的文件类型有关的信息,对于特定文件它是固定的。
file.incarnation是 file/incarnation 对, 保证了唯一性。
例如asm中控制文件的名称为:
+dgroup2/sample/controlfile/Current.256.541956473
2.5 模版
模版是文件的属性集,在asm磁盘组中创建文件时,用来设置每种类型的数据库文件的条带和镜像属性。用户可以自定义模版。
3 Asm组成与工作原理:
3.1 Asm实例
Asm实例是一个特殊的oracle实例,用来管理磁盘组中的磁盘,实例通常命名为+asm,用instance-type=asm初始化参数启动,不像数据库实例,asm实例不包含物理文件,如:日志文件、控制文件。
3.2 Asm实例的后台进程:
Asm实例除了具有与数据库实例相同的进程如SMON, PMON, LGWR外,还包括两个与磁盘组管理有关的进程,一个是rbal,它主要协调磁盘组的重新平衡活动;另一个是arb0,arb1等,这是一组从进程,在磁盘组重新平衡过程中,它们执行实际的数据分区的移动。
3.3 Css集群同步服务(Cluster Synchronization Services)
Asm要求安装css,并且在服务器启动时自动启动。css维持asm实例和数据库实例的同步,磁盘组装载后,asm向css注册磁盘组名,实例名和oracle home路径名。接着数据库实例使用这些注册的数据结构建tns连接串,数据库实例使用该连接串连接到asm实例,进行卷管理活动。
数据库实例中新增加了三个进程以支持asm磁盘组和结构,实现asm实例与数据库实例的通信。
Rbal 该进程负责磁盘组中所有磁盘的打开。
Asmb 该进程使用磁盘组名称联系css,并得到asm连接串,接着使用该连接串连接到asm实例。使用该永久的连接,可以交换周期性的消息如:用来更新统计并提供心跳机制。在需要asm干预的操作中,如创建文件,数据库前台直接连接到asm实例执行这个操作,完成文件创建后,数据库文件分区映射由asm发送到asmb。另外,asmb还向asm实例发送数据库io 统计。
O00x 一组从进程,建立到asm实例的短暂连接,x是1-10的编号。通过这个连接池,数据库进程可以向asm实例发送消息。例如打开文件,利用从进程向asm实例发送打开请求。但是,从进程不用于长时间的操作如:创建文件。从进程池连接为短暂的请求服务,消除了登录asm实例的开销,这些进程在不使用时即关闭。
3.5 数据库实例与asm实例交互
数据库实例是asm实例的一个客户,数据库与asm的通讯在节点内部进行,对asm文件的操作象对文件系统文件的操作一样,例如:所有的文件访问直接执行并没有asm的干预。当创建,删除,打开文件时,数据库实例与asm实例相互作用,从asm实例读取文件分布,接下来的i/o操作使用存储在数据库实例中的分区映射。如果存储配置改变,如:添加,删除磁盘或磁盘失败都会引起asm与数据库实例相互作用。
4 军卫一号向oracle10g asm的迁移
该过程分两步进行,第一步是数据库的升级操作;第二步是数据库文件从普通文件系统迁移到asm。
4.1 数据库的升级
现在,军队各个医院的军卫一号信息系统数据库主要采用oracle8i或oracle9i版本,只有极少数使用oracle10g第二版。要使用oracle10g的asm特性,首先升级oracle数据库到oracle10g。oracle数据库升级有多种方法,主要有imp/exp逻辑备份工具;数据库升级助手图形化工具;还有oracle提供的升级脚本。具体的升级过程可以参考oracle文档。
4.2 数据库文件从普通文件系统向asm的迁移
数据库升级到oracle10g后,数据库文件的存储使用普通的文件系统,要使用asm特性,需要把数据库迁移到asm,这种迁移可以使用oracle的rman工具手工迁移,还可以使用企业管理器提供的图形化工具。在实施迁移前,需要对asm磁盘组进行规划。这里我们使用了两个磁盘组每个磁盘组两块磁盘,一个是data磁盘组,主要放置数据库文件。另一个是flashrec磁盘组,主要用于oracle10g的快速恢复区,其中放置rman备份文件,数据库闪回日志等。这里具体介绍rman的手工迁移过程:
(1) 备份升级好的军卫一号数据库文件,这里要求文件的备份副本。
BACKUP AS COPY INCREMENTAL LEVEL 0 DATABASE
FORMAT '+DATA' TAG 'ORA_ASM_MIGRATION';
备份后归档当前日志文件,保证备份的一致性。
RMAN> sql 'alter system archive log current';
(2) 在asm的flashrec磁盘组上创建恢复区。
通过设置参数DB_RECOVERY_FILE_DEST 和 DB_RECOVERY_FILE_DEST_SIZE即可创建恢复区。
在文本参数文件中修改参数
Alter system set DB_RECOVERY_FILE_DEST_SIZE=20G;
Alter system set DB_RECOVERY_FILE_DEST='+FLASHREC';
(3) 移植控制文件到asm。
修改参数文件中的参数control_files
Alter system set
control_files='+DATA/control01.ctl','+FLASHREC/
control02.ctl ' 其中一个控制文件存放在flashrec恢复区,提高了控制文件的可用性。
使用rman在asm上创建控制文件:
RMAN> shutdown immediate;
RMAN> startup nomount PFILE='d:tmppfile.ora';
RMAN> restore controlfile from ‘D:oracleproduct10.2.0oradatats control01.ctl';
RMAN> alter database mount;
RMAN> switch database to copy;
RMAN> recover database;
(4) 向asm移植临时文件。
RMAN > run {
set newname for tempfile 1 to '+DATA'
switch tempfile all;
}
(5) 打开数据库,完成数据库文件的迁移。
SQL> ALTER DATABASE OPEN;
6 Asm的管理
Asm的管理涉及内容比较多,主要包括磁盘组的管理如添加磁盘、删除磁盘,改变磁盘的大小,装载磁盘组,卸载磁盘组,手动重新平衡磁盘组等操作;磁盘组中文件和目录的管理;在磁盘组中创建数据库文件等。这些操作都可以通过sql命令完成,此外,oracle还提供了命令行工具asmcmd和企业管理器图形化工具,都可以对asm进行管理和操作,有关这些操作的详细地使用可以参考oracle的文档。在这里要强调的一点是asm的备份问题,asm<span style="FO