ASM实例和管理
一,ASM的特点
1,自动调整I/O负载
ASM可以在所有可用的磁盘中自动调整I/O负载,不但避免了人工调整I/O难度,而且优化了性能的同时,利用ASM可以在线增加数据库的大小,而无需关闭数据库。
2,条带化储存
ASM将文件分为多个分配单元(allocation units,简称AU)进行存储,并在所有磁盘间分配每个文件的AU。
3,在线自动负载均衡
当共享存储设备有变化时,ASM中的数据会自动的均分配到现有存储设备中。同时,还可以调节数据的负载均衡速度。
4,自动管理数据库文件
在ASM存储管理中,Oracle数据文件是ASM自动管理的。ASM创建的任何文件一旦不再需要,就会自动删除。但是,ASM不管理二进制文件、跟踪文件、预警文件和口令文件。
5,数据冗余
ASM通过磁盘组镜像可以完成实现数据冗余,而不需要第三方工具来实现。
6,支持各种oracle数据文件
ASM存储支持oracle数据文件、日志文件、控制文件、归档日志、RMAN备份集等。
二,ASM的结构图
从图中可以看出ASM的物理组成结构,在最顶层是ASM磁盘组,ASM实例和数据库实例可以直接访问这些磁盘组;然后是ASM文件,每个ASM文件只能包含在一个磁盘组中,不过,一个磁盘组中可以包含属于多个数据库的多个ASM文件,并且单个数据库可以使用来自多个磁盘组的存储空间;第三部分是ASM磁盘,多个ASM磁盘组成了ASM磁盘组,但每个ASM磁盘只能属于一个磁盘组;接着是分配单元(AU),分配单元是ASM磁盘组分配的最小连续磁盘空间,ASM磁盘是按照AU进行分区,每个AU的大小为1MB;在这个结构的的最底层是oracle数据块,由于AU是ASM分配的最小的连续磁盘空间,因此,ASM是不允许跨分配单元拆分一个oracle数据块的。
三,ASM的体系结构与后台进程
1,要使用ASM,需要启动数据库实例之前,先启动一个名叫“+ASM”的实例,ASM实例不会装载数据库,它启动的目的是位了管理磁盘组和保护其中的数据。同时,ASM实例还可以向数据库传递有关文件布局的信息。通过这种方式,数据库实例就可以直接访问磁盘组中的存储的文件。
2,ASM实例与数据库实例进行通信的桥梁是ASMB进程,此进程运行在每个数据库实例上,是两个实例间信息交换的通道,它先利用磁盘组名称通过CSS获得管理该磁盘组的ASM实例连接串,然后建立一个到ASM的持久连接,这样两个实例之间就可以通过这条连接定期交换信息,同时这也是一种心跳监控机制。
3,在使用ASM作为数据存储时,ASM实例管理显得非常重要,oracle提供了丰富的管理功能,对ASM实例的管理要求具备SYSDBA权限,在Oracle 11g中可以使用一个新角色,即为SYSASM,此角色只用于管理ASM实例。
四,创建一个ASM实例
创建一个ASM实例有两种方法,第一种是用dbca创建,这种方法只需要运行Database configuration Assitant(DBCA),然后根据提示即可创建一个ASM实例。
第二种方法
1,创建ASM磁盘
可以使用RAID划分的LUN,分区,裸设备等来创建ASM磁盘,但是在使用LUN、分区或裸设备时,要注意将属主和属组改为oracle用户及其对应的组,oracle提供ASMLIB来完成ASM磁盘的创建,
(1),在创建ASM实例之前,首先应该确保节点上已经安装了ASMlib包,同时确认ASMLib是否已经自动加载:
[root@rac1 dev]# lsmod | grep oracleasm
oracleasm 46356 1
[root@rac1 dev]# /etc/init.d/oracleasm createdisk ASMDISK1 /dev/sdc1
ASM磁盘创建完毕,可以查看系统的/dev/oracleasm/disks/目录下是否已经生成磁盘设备。可以通过如下命令查看asm磁盘:
(2),[root@rac1 dev]# ll /dev/oracleasm/disks/
total 0
brw-rw---- 1 grid dba 8, 17 Apr 29 09:59 DISK1
brw-rw---- 1 grid dba 8, 33 Apr 29 09:59 DISK2
brw-rw---- 1 grid dba 8, 49 Apr 29 09:59 DISK3
brw-rw---- 1 grid dba 8, 65 Apr 29 09:59 DISK4
brw-rw---- 1 grid dba 8, 81 Apr 29 09:59 DISK5
[root@rac1 dev]#
(3),也可以用如下命令查看:
[root@rac1 disks]# service oracleasm listdisks
DISK1
DISK2
DISK3
DISK4
DISK5
[root@rac1 disks]#
(4),如果要删除ASM磁盘通过如下命令:
[root@rac1]/etc/init.d/oracleasm deletedisk ASMDISK5
(5),在RAC环境中,要注意另外一个节点是否能发现对应的asm disk,执行如下命令,让另外节点获取这种变化。
[root@rac1 disks]# /etc/init.d/oracleasm scandisks
Scanning the system for Oracle ASMLib disks: [ OK ]
[root@rac1 disks]#
到此为止,ASM磁盘已经创建完成了。
2,初始化参数
启动asm实例只需要如下几个参数即可,并且asm实例的内存自动分配并自动管理。
下面讲述下ASM实例初始化参数:
instance_type=asm
cluster_database=true
DB_UNIQUE_NAME=+ASM
ASM_POWER_LIMIT=1
large_pool_size=60M
asm_diskgroups='FLASH_DISK','ARCH_DISK','DATA_DISK'
asm_diskstring='/dev/oracleasm/disks/'
对每个参数的含义解释如下:
(1),instance_type:指定实例的类型,对于ASM实例,应设置为ASM。
(2),cluser_database:指定是否是数据库集群,true是表示ASM集群。
(3),DB_UNIQUE_NAME:指定ASM实例的名称,默认是+ASM。
(4),ASM_POWER_LIMIT:该参数用来控制ASM中数据的负载均衡速度。
(5),large_pool_size:设置大池的大小,由于ASM文件的分配单元映射是从LARGE_POOL分配的分配的,因此LARGE_POOL_SIZE至少要8M,建议越大越好。
(6),asm_diskgroups:指定实例启动时可用的ASM磁盘组,ASM实例将在启动时自动挂载这些磁盘组。
(7),asm_diskstring,用于限制ASM实例可用于创建磁盘组的磁盘设备。如果该值为NULL,则ASM实例可见的所有磁盘都可以称为创建磁盘组的可选磁盘。
3,创建密码文件
[oracle@rac1~]su -oracle
[oracle@rac1~]$cd $ORACLE_HOME/dbs
[oracle@rac1~]$orapwd file=orapw+ASM password=oracle
4,创建目录结构
[oracle@rac1~]$su - oracle
[oracle@rac1~]$cd $ORACLE_HOME/dbs
[oracle@rac1~]$mkdir -p $ORACLE_BASE/admin/+ASM/udump
[oracle@rac1~]$mkdir -p $ORACLE_BASE/admin/+ASM/bdump
[oracle@rac1~]$mkdir -p $ORACLE_BASE/admin/+ASM/adump
[oracle@rac1~]$mkdir -p $ORACLE_BASE/admin/+ASM/cdump