Oracle ASM 管理 16.1 什么是ASM
自动存储管理即ASM(Automatic Storage Management),是Oracle提供的一项管理磁盘的
功能,它是一种以纯软件方式实现的逻辑卷管理器,
功能上提供了基于Oracle数据
文件的条带化和可选的镜像。ASM的知识同时涉及了
数据库管理和系统管理两大领域。 16.2 系统级的磁盘管理 物理卷:指的是独立磁盘,或磁盘分区或磁盘RAID结构。 逻辑卷:LVM(Logical Volume Manager),以软件方式将虚拟磁盘呈现给
用户,LVM是操作系统级别的。提供了磁盘管理的灵活性,可靠性,具有条带,镜像和快照等
功能。 磁盘阵列上的RAID技术:希望通过多个物理卷增强
性能和容错性,常用的有4个级别,RAID0,RAID1,RAID5,RAID0+1。 16.3 ASM和LVM的比较 1)ASM了解Oracle特性,ASM可以对ASM数据
文件制定不同的条带(两种)和镜像(三种)策略,这对提高
数据库性能来说是一个优势。 2)ASM
增加/
删除磁盘后会使磁盘组上的ASM
文件重新均衡分布,这个过程是
自动完成的。 3)ASM是Oracle绑定的,不同的平台上可移植性好。 16.4 ASM体系结构(以下概念全是重点) 16.4.1 ASM实例 1)ASM
数据库需要启动ASM实例,它和RDBMS实例分工协作,ASM实例负责管理ASM磁盘组和ASM磁盘以及定位ASM
文件,注意仅仅是定位,ASM
文件的IO读写操作还是由RDBMS实例完成的。 2)ASM实例合法参数很少,如ASM_DISKTRING和ASM_DISKGROUP,这些参数在RDBMS实例中是没有的。 16.4.2 ASM
文件 ASM可以管理的
文件有数据
文件,临时
文件,控制
文件,联机日志和归档日志
文件,spfile,及RMAN备份集和映像副本等。ASM
不支持口令
文件、跟踪
文件、告警
文件和Oracle二进制
文件(重点)。 16.4.3 ASM磁盘和磁盘组概念 1)ASM disk可以是实际的磁盘,也可以是磁盘的某个分区,或LVM管理的逻辑卷,实际工作中ASM disk一般不使用
文件系统格式化的磁盘。 2)ASM diskgroup由ASM disk组成,可以包含一个或多个ASM disk。 3)建立ASM diskgroup时会将所有ASM disk划分成单元(AU)。AU大小缺省1M。也可指定其
属性为2,4,8,16,32或64M。(重点) 4)建立ASM file会依据
文件的动态增长分配ASM extent,ASM extent是(可变长)基于一个或多个ASM AU,一个ASM file会分布到一个ASM diskgroup的所有ASM disk上。 5)只能使用RMAN备份ASM file,操作系统命令对ASM file是不可知的。 6)可以通过ALTER DISKGROUP MOUNT手动加载ASM disk,也可以通过指定参数ASM_DISKGROUP
自动加载。 7)当ASM diskgroup组中的ASM disk发生增减后,ASM diskgroup会
自动再平衡,目的是使IO均衡在ASM diskgroup的所有ASM disk上。 16.4.4 利用磁盘组
增加性能和冗余 1)ASM striping (条带) 为了提高IO读写
性能,ASM需要进行条带化处理,注意striping(条带)是基于AU的。 2)ASM不能禁用striping。有两种类型的条带化方式:粗粒度条带(coarse)和细粒度条带(fine)。粗粒度条带大小=AU大小,一般来说相对1M的AU,粗粒度条带也是1M,而细粒度条带总是128K,条带策略已由Oracle模板缺省定义了(见下图)。若有特殊需求,你可
自定义模板,然后在建立表空间时使用模板子句引用你
自定义的
文件模板。 ASM
文件模板的默认值 Oracle
文件类型 默认系统模板
名称 条带化 ------------------------------------------------------------------------------ 控制
文件 CONTROLFILE 细密 数据
文件 DATAFILE 粗糙 日志
文件 ONLINELOG 细密 归档日志
文件 ARCHIVELOG 粗糙 临时
文件 TEMPFILE 粗糙 RMAN备份
文件 BACKUPSET 粗糙 动态参数
文件 PARAMETERFILE 粗糙 ...... 16.4.5 ASM
文件(file)、ASM区(extent)、ASM单元(unit)、ASM镜像(mirror)、ASM条带(stripe)之间的关系: ASM file ----->spread across all of the disks in a disk group /|\ ASM extent(3种规格) ----->mirror(3种规格) /|\ ASM au (7种规格) ----->stripe(2种规格) 16.5 ASM 的一些重要特性 16.5.1 动态可变分配ASMextent的大小 ASM file (0--19999) extents extent=AU ASM file (20000--39999) extents extent=8AU ASM file (40000+) extents extent=64AU 16.5.2 ASM镜像及故障组 1)ASM镜像提供了数据的冗余
支持,镜像有三种模式: NORMAL REDUNDANCY(两路), HIGH REDUNDANCY(三路), EXTERNAL REDUNDANCY(无镜像,使用RAID) 2)ASM的镜像与操作系统提供的镜像有所不同。操作系统镜像是基于整个盘(分区)的镜像。而ASM是对ASM
文件的extent做镜像,当ASM在某个磁盘上分配了一个primary extent时,必定在另一个磁盘上分配一个与之对应的secondary extent(镜像)。 3)对于双路磁盘控制器,为防止单路控制器同时损毁主副extent,ASM又引入故障组容错概念,使主副extent分布在不同的故障组下,即主extent和副extent分别属于不同的故障组。所以,如果不设故障组,则每个磁盘就是一个独立的故障组。 4)一个磁盘组可有两个或多个故障组(failgroup),一个故障组由一个或多个ASM磁盘组成,故障组只能在两路或三路镜像模式下进行。 故障组是在标准冗余的基础上指定镜像策略,它是一种镜像
功能的补充。假定有磁盘组DG1,且创建了两个故障组controller1,controller2,每个故障组由2个ASM磁盘组成,则对标准冗余而言,指定两个故障组互为镜像 controller1 --> asmdiskA,asmdiskB controller2 --> asmdiskC,asmdiskD 就是说:asmdiskA 的extent镜像一定会建立在另一个故障组的asmdiskC或asmdiskD磁盘上,而不会在本故障组conntroller1内。 16.5.3 重新平衡磁盘组 ASM重新平衡磁盘组的操作是自发的,动态的。无论是向磁盘组加盘还是减盘,只要改变了磁盘组中磁盘的
数量,ASM就会重新分布磁盘上的数据。如果是
增加磁盘还会为其划分au,进而划分条带,这样,
文件会立即分布到新加的ASM disk上。
自动重新平衡会消耗系统资源,有条件的话应该选择系统比较空闲的时段加减磁盘。 ASM_POWER_LIMIT这个参数值取1-11(在11gR2后可以选的范围是1-1024),此值越高平衡时消耗服务器资源越多(重点)。 如果需要也可以使用手动方式对磁盘组进行重新平衡。可以为power子句分配1-11的值。
sql> ALTER DISKGROUP dgroup1 REBALANCE POWER 5; 16.5.4
快速镜像再同步特性(PPT-II-635) 一般情况下,如果由于一个磁盘损坏使之不可用,系统会
自动将冗余extent的复制到另一个磁盘上,即重新创建该盘的extent副本,然后
删除有故障的磁盘,这样做的缺点是迁移总会消耗一定的系统资源。但是,如果仅仅是电缆或控制器接口或电源等故障(干脆说不是介质损坏)而导致ASM磁盘不可用,这样的问题可以
快速修复,为此Oracle引入ASM
快速镜像再同步特性。 这个特性的要点是:(会尝试三次读,一次写。如果都不通则oracle认为磁盘组损坏。) 1)在给定修复期内,仅使磁盘offline,不会从磁盘组drop磁盘。(重点)。 2)将修复的磁盘online后,ASM仅重写offline之后发生变更的数据(增量数据),而不必执行冗长的再平衡。 可以通过设置
属性参数disk_repair_time指定修复期。 如:alter diskgroup dg1 set attribute 'disk_repair_time'=4h; 可以临时更改修复期 alter diskgroup dg1 offline disks in failuregroup controller1 drop after 2h; 这将意味着忽略了disk_repair_time
属性,指定2小时为修复时间。 修复后重新进行联机即可 alter diskgroup dg1 ONLINE; 超过修复期,将转为常规方式处理,即
自动drop掉这些磁盘,然后开始复制整个副本并做REBALANCE。 也可以在修复期内提前使用FORCE选项
删除这些磁盘: alter diskgroup dg1 drop disks in failuregroup controller1 FORCE; 16.5.5 ASM首选镜像读 正常冗余需要两个故障组,高冗余需要三个故障组,ASM分配新的extent时总是定义一个主本和一个副本。ASM总是
自动的读取镜像extent的主本。但对于一个远程系统(集群延伸),读取它本地的副本更可以减少网络流量。于是有了首选镜像读特性。 通过设置ASM_PREFERRED_READ_FAILURE_GROUPS初始化参数,指定一列首选镜像读故障组的名字。 通过
查询V$ASM_DISK视图可以确定首选故障组中有哪些磁盘: 例
sql> alter system set asm_prefeeed_read_failure_groups=diskgroup_name.failure_group_name,diskgroup_name1.failure_group_name1...;
sql> select preferred_read from v$asm_disk; 16.5.6 ASM兼容性参数(PPT-II-631) 为使用一些ASM的新
功能,你可以对不同的磁盘组设置不同的兼容性
属性, COMPATIBLE.RDBMS 指定能mount这个diskgroup的RDBMS实例的最小兼容版本 COMPATIBLE.ASM 定义了这个dsikgroup的ASM
Metadata格式 COMPATIBLE.ADVM 指定该diskgroup是否可以包含ASM volume 请记住:RDBMS兼容性级别必须小于或等于磁盘组的ASM兼容性级别。 即:COMPATIBLE.RDBMS<=COMPATIBLE.ASM。 16.5.7 ASM的同步集群服务 CSS是为claster服务一组软件,即使不是RAC配置,配置一个单实例的ASM也要使用CSS部分
功能,另外还需要了解ASM也有
后台进程,特别是有两个进程,一个是RBAL,一个是ARBn ASM实例上的两个重要进程 RBAL:用于协调和管理磁盘组之间的动态平衡 ARBn:用于完成AU的移动 RDBMS实例上两个与ASM有关的
后台进程: RBAL:完成ASM磁盘打开的任务,其中的磁盘是ASM磁盘组的一部分 ASMB:作为一个重要的进程将RDBMS实例与ASM实例相连起来,对于RDBMS实例来说,它是一个foreground process(考题) 特别注意 RBAL在ASM实例和RDBMS实例中各有一个,但
功能不同,前者是负责协调ASM再平衡活动,后者负责打开和
关闭ASM磁盘。 [oracle@timran timran11g]$ ps -ef |grep rbal oracle 4790 1 0 14:10 ? 00:00:00 asm_rbal_+ASM oracle
5021 1 0 14:13 ? 00:00:00 ora_rbal_timran11g oracle 5133 4112 0 14:22 pts/2 00:00:00 grep rbal 16.5.8 关于ASM实例和RDBMS实例的启动和
关闭 1)只能在nomount 下启动ASM实例,它永远不能mount控制
文件,也不能打开datafile 2)启动:ASM实例先启动,RDBMS实例后启动。
退出:RDBMS实例先shutdwon immediate,ASM实例后
退出. 3)ASM实例做shutdown immediate,而此时RDBMS还有
用户连接,ASM shutdown不能成功。会报错! 4)如果RDBMS shutdown abort,ASM实例什么也不做。 16.5.9 ASMCMD命令行工具 $asmcmd ASMCMD>help 可以使用命令行工具更灵活的管理ASM。关注11g下在ASMCMD中新加入的两个命令,ASM元数据的备份与还原:即md_backup和 md_resotre md_backup 进行磁盘组的备份 ASMCMD> md_backup -b /tmp/asmbkp1 -g g1 -g 选项指定要备份的单个磁盘组,-b 选项指定
文件asmbkp1作为备份的文本
文件。 ASMCMD> md_recover -b /tmp/asmbkp1 -t full -g g1 重点:md_recover 不能恢复存储在ASM磁盘中的实际数据,但是能恢复磁盘组,
修改模板,创建目录。当md_recover恢复了ASM元数据后,才可以使用RMAN备份在重建的磁盘组中恢复数据。 16.6 在Linux上创建ASM实例的范例 1) 在linux里
增加两个虚盘 ASMDISK1,/dev/sdb,4G,分4个区,每个区1000M,分别对应sdb1,sdb2,sdb3,sdb4。 ASMDISK2,/dev/sdc,2G 分1个区,对应sdc1。 [root@timran dev]# fdisk -l Disk /dev/sda: 21.4 GB,21474836480 bytes 255 heads,63 sectors/track,2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 2349 18868311 83 Linux /dev/sda2 2350 2610 2096482+ 82 Linux swap / Solaris Disk /dev/sdb: 4294 MB,4294967296 bytes 255 heads,522 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdb1 1 123 987966 83 Linux /dev/sdb2 124 246 987997+ 83 Linux /dev/sdb3 247 369 987997+ 83 Linux /dev/sdb4 370 492 987997+ 83 Linux Disk /dev/sdc: 2147 MB,2147483648 bytes 255 heads,261 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdc1 1 261 2096451 83 Linux [root@timran dev]# --------------------------------以下若不使用asmlib,则跳过------------------------------------------------------------------- 2) Oracle ASMlib 安装 ASMlib是Oracle针对linux 操作系统的ASM管理套件,ASMlib 简化磁盘管理,取代原来我们在linux 上常用rawdevices 服务。 根据linux不同的内核版本,对应有不同的ASMlib包,下载地址:http://www.oracle.com/technetwork/server-storage/linux/asmlib/index-101839.html 比如,我的linux内核版本是: [root@timran ~]# uname -a Linux timran.localdomain 2.6.18-348.el5 #1 SMP Wed Nov 28 21:25:39 EST 2012 i686 athlon i386 GNU/Linux 根据这个kernel版本,我找到的三个对应的ASMlib包应该是: [root@timran timran11g]# ll -al *.rpm -rw-rw-r-- 1 oracle oracle 22751 07-01 13:12 oracleasm-2.6.18-348.el5-2.0.5-1.el5.i686.rpm -rw-rw-r-- 1 oracle oracle 13929 07-01 13:12 oracleasmlib-2.0.4-1.el5.i386.rpm -rw-rw-r-- 1 oracle oracle 85303 07-01 13:12 oracleasm-support-2.1.8-1.el5.i386.rpm [root@timran timran11g]# rpm -qa |grep asm [root@timran timran11g]# 将这三个包加载到linux kernel中 [root@timran timran11g]# rpm -ivh *.rpm warning: oracleasm-2.6.18-348.el5-2.0.5-1.el5.i686.rpm: Header V3 DSA signature: NOKEY,key ID 1e5e0159 Preparing... ########################################### [100%] 1:oracleasm-support ########################################### [ 33%] 2:oracleasm-2.6.18-348.el ########################################### [ 67%] 3:oracleasmlib ########################################### [100%]
显示一下已经加载成功 [root@timran timran11g]# rpm -qa |grep asm oracleasmlib-2.0.4-1.el5 oracleasm-support-2.1.8-1.el5 oracleasm-2.6.18-348.el5-2.0.5-1.el5 [root@timran timran11g]# [root@timran oracle]# reboot //重启一下,看看主控台
显示ASM驱动能否正常加载. ASMlib包装好后会在/etc/init.d/下出现oracleasm这个service,它可以
支持很多linux上的ASM操作。 3)配置ASMlib驱动 [root@timran init.d]# /etc/init.d/oracleasm configure Configuring the Oracle ASM library driver. This will configure the on-boot properties of the Oracle ASM library driver. The following questions will determine whether the driver is loaded on boot and what permissions it will have. The current values will be shown in brackets ('[]'). Hitting <ENTER> without typing an answer will keep that current value. Ctrl-C will abort. Default user to own the driver interface []: oracle Default group to own the driver interface []: dba Start Oracle ASM library driver on boot (y/n) [n]: y Scan for Oracle ASM disks on boot (y/n) [y]: Writing Oracle ASM library driver configuration: done Initializing the Oracle ASMLib driver: [ OK ] Scanning the system for Oracle ASMLib disks: [ OK ] [root@timran ~]# 4)创建ASM磁盘 [root@timran init.d]# /etc/init.d/oracleasm createdisk VOL1 /dev/sdb1 Marking disk "VOL1" as an ASM disk: [ OK ] [root@timran init.d]# /etc/init.d/oracleasm createdisk VOL2 /dev/sdb2 Marking disk "VOL2" as an ASM disk: [ OK ] [root@timran init.d]# /etc/init.d/oracleasm createdisk VOL3 /dev/sdb3 Marking disk "VOL3" as an ASM disk: [ OK ] [root@timran init.d]# /etc/init.d/oracleasm createdisk VOL4 /dev/sdb4 Marking disk "VOL4" as an ASM disk: [ OK ] [root@timran init.d]# /etc/init.d/oracleasm createdisk VOL5 /dev/sdc1 Marking disk "VOL5" as an ASM disk: [ OK ] [root@timran init.d]# [root@timran init.d]# ls /dev/oracleasm/disks VOL1 VOL2 VOL3 VOL4 VOL5 //可以看到
生成了5个ASM磁盘。 #/etc/init.d/oracleasm querydisk -d VOL1 //试一下,
查询ASM磁盘对应的物理磁盘号 Disk "VOL1" is a valid ASM disk on device /dev/sdb1[8,17] ------------------------------------------------------------------------------------------------------------- 不使用asmlib,可以直接用asm管理磁盘,只是要将磁盘的属主使用linux的udev改变 使用下列命令 vi /etc/udev/rules.d/90-asm.rules 11gr2之前: kernel=="sdxx",action=="add",owner="oracle",group="dba",mode="660" 11gR2之后: kernel=="sdxx",owner="grid",group="asmdba",mode="660" 说明:11gR2之后,asm和grid绑定,需建立独立的
用户和组,这里假定grid软件的
用户名为grid(一般都是这样) 5)创建ASM实例 ----------------------------------------以下为11gR2之前的做法,11gR2之后的见后-------------------------------------------- 5.1)启用css服务(Cluster Synchronization Services ), 单实例的ASM也要用到RAC套件中的一些驱动,它们负责多实例间的通信。这里用于同步ASM实例与RDBMS实例 使用root帐户进行配置,配置程序位于$ORACLE_HOME/bin [root@timran ~]# /u01/oracle/bin/localconfig add Successfully accumulated necessary OCR keys. Creating OCR keys for user 'root',privgrp 'root'.. Operation successful. Configuration for local CSS has been initialized Cleaning up Network socket directories Setting up Network socket directories Adding to inittab Startup will be queued to init within 30 seconds. Checking the status of new Oracle init process... Expecting the CRS daemons to be up within 600 seconds. Cluster Synchronization Services is active on these nodes. timran Cluster Synchronization Services is active on all the nodes. Oracle CSS service is installed and running under init(1M) [root@timran ~]# [root@timran ~]# ps -ef |grep css oracle 3316 1 1 12:01 ? 00:00:00 /u01/oracle/bin/ocssd.bin root 3594 2537 0 12:01 pts/0 00:00:00 grep css --------------------------------11gR2之后-------------------------------------------------------------------------------- 5.1) 创建grid软件的组和
用户: groupadd asmadmin groupadd asmdba groupadd asmoper asmoper组可以不用 useradd -g oinstall -G asmadmin,asmdba,asmoper grid passwd grid 设置grid
用户的password 配置grid的环境: root
用户: vi /etc/security/limits.conf grid soft nproc 2047 grid hard nproc 16384 grid soft nofile 1024 grid hard nofile 65536 grid soft stack 10240 建立安装grid的目录,这里设为/u01 mkdir /u02 chown oinstall:grid /u02 grid
用户: vi .bash_profile export PATH ORACLE_BASE=/u01 export ORACLE_BASE ORACLE_HOME=/u02/grid export ORACLE_HOME ORACLE_SID=+ASM export ORACLE_SID alias
sqlplus='rlwrap
sqlplus' alias asmcmd='rlwrap asmcmd' mount grid软件盘 root: mount -r -o uid=grid,gid=oinstall /dev/cdrom /mnt 或将grid软件传到linux下: unzip grid软件.gz -d /home/grid chown -R grid:oinstall /home/grid/grid linux控制台下,用grid
用户登录,启动图形,运行: /mnt/grid/runInstaller 若使用的是传到linux下的grid软件:/home/grid/grid/runInstaller 说明:11gR2之后,独立服务器安装grid,内存最小为1.5GB 安装选项 第一步: 选择" 仅安装网格基础结构软件” 第二步: 选择”简体
中文 英语“ 第三步: 选择asm
数据库管理员为”asmdba",asm实例管理操作者"asmoper",asm实例
管理员"asmadmin" 第四步: oracle基目录“/u01",软件位置 ”/u02/grid" 第五步: 安装条件检查,不通过则查找原因。 其中ntp不通过时,可以 mv /etc/ntp.conf /etc/ntp.conf.org 以后步骤略 安装完成后,继续下列步骤,配置crs: root
用户: /Grid_home/perl/bin/perl -I Grid_home/perl/lib -I Grid_home/crs/install Grid_home/crs/install/roothas.pl 用实际的目录代替Grid_home,这里是/u02/grid /u02/grid/perl/bin/perl -I /u02/grid/perl/lib -I /u02/grid/crs/install /u02/grid/crs/install/roothas.pl grid
用户: 到Grid_home/oui/bin 目录下,这里是 /u02/grid/oui/bin cd /u02/grid/oui/bin 运行: ./runInstaller -updateNodeList ORACLE_HOME=Grid_home -defaultHomeName 用实际目录代替grid_home ./runInstaller -updateNodeList ORACLE_HOME=/u02/grid -defaultHomeName 配置完成,之后启动服务: grid
用户: crs_start ora.cssd --------------------------------------------------------------------------------------------------------------- 5.2)创建ASM参数
文件(使用VI或VIM) [root@timran dbs]# vi /u01/oracle/dbs/init+ASM.ora #*.asm_diskgroups='DG1' *.asm_diskstring='/dev/oracleasm/disks' 若不用asmlib,则该值为‘/dev/sdb*,/dev/sdc1' *.diagnostic_dest='/u01' *.instance_type='ASM' *.instance_name='+ASM' *.large_pool_size=12M *.remote_login_passwordfile='SHARED' *.asm_power_limit=1 说明一下: asm_diskgroups='DG1' 这行先注释掉,等到建完磁盘组后再去掉#号。 asm_diskstring='/dev/oracleasm/disks' 描述ASM磁盘所在的路径。 instance_type='ASM' 这个参数对应ASM实例是强制性的,其他都不是。 存盘后改一下属主: [root@timran dbs]# chown oracle:oinstall /u01/oracle/dbs/init+ASM.ora 5.3) 创建ASM的口令
文件 [oracle@timran ~]$orapwd file=$ORACLE_HOME/dbs/orapw+ASM password=system entries=5 5.3) 启动ASM实例 [oracle@timran ~]$export ORACLE_SID=+ASM [oracle@timran ~]$
sqlplus / as sysdba Connected to an idle instance.
sql> startup ASM instance started Total System Global Area 284565504 bytes Fixed Size 1299428 bytes Variable Size 258100252 bytes ASM Cache 25165824 bytes ORA-15110: no diskgroups mounted //因为ASM磁盘组还没有建立 实例启动了,可以在linux下看一下+ASM进程 [root@timran dbs]# ps -ef |grep +ASM oracle 3993 1 0 14:31 ? 00:00:00 asm_pmon_+ASM oracle 3995 1 0 14:31 ? 00:00:00 asm_vktm_+ASM oracle 3999 1 0 14:31 ? 00:00:00 asm_diag_+ASM oracle 4001 1 0 14:31 ? 00:00:00 asm_psp0_+ASM oracle 4005 1 0 14:31 ? 00:00:00 asm_dia0_+ASM oracle 4007 1 0 14:31 ? 00:00:00 asm_mman_+ASM oracle 4009 1 0 14:31 ? 00:00:00 asm_dbw0_+ASM oracle 4011 1 0 14:31 ? 00:00:00 asm_lgwr_+ASM oracle 4013 1 0 14:31 ? 00:00:00 asm_ckpt_+ASM oracle 4015 1 0 14:31 ? 00:00:00 asm_smon_+ASM oracle 4017 1 0 14:31 ? 00:00:00 asm_rbal_+ASM oracle 4019 1 0 14:31 ? 00:00:00 asm_gmon_+ASM oracle 4021 3988 0 14:31 ? 00:00:00 oracle+ASM (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) root
4032 3235 0 14:37 pts/2 00:00:00 grep +ASM 6)创建ASM磁盘组 建立磁盘组有三个办法,一个是使用DBCA工具,另一个是使用
sqlplus命令,还有一种是使用EM。 使用
sqlplus命令: 注意:创建磁盘组要在ASM实例下去做,不可以在RDBMS实例下完成
sql> create diskgroup DG1 normal redundancy failgroup controller1 disk '/dev/oracleasm/disks/VOL1','/dev/oracleasm/disks/VOL2' failgroup controller2 disk '/dev/oracleasm/disks/VOL3','/dev/oracleasm/disks/VOL4'; -------------------------不用asmlib时-------------------------------------------------------------- create diskgroup DG1 normal redundency failgroup f1 disk '/dev/sdb1','/dev/sdb3' failgroup f2 disk '/dev/sdb2','/dev/sdb4'; col name for a15; col failgroup for a20;
sql> select NAME,STATE,FREE_MB,
required_MIRROR_FREE_MB,USABLE_FILE_MB from v$asm_diskgroup; NAME STATE FREE_MB
required_MIRROR_FREE_MB USABLE_FILE_MB --------------------------------------------------------------------------------------------------------------- DG1 MOUNTED 3750 964 1393
sql> select GROUP_NUMBER,DISK_NUMBER,NAME,FAILGROUP,TOTAL_MB from v$asm_disk; GROUP_NUMBER DISK_NUMBER NAME FAILGROUP STATE TOTAL_MB --------------------------------------------------------------------------------------------------------------- 0 5 NORMAL 0 1 3 DG1_0003 CONTROLLER2 NORMAL 964 1 2 DG1_0002 CONTROLLER2 NORMAL 964 1 1 DG1_0001 CONTROLLER1 NORMAL 964 1 0 DG1_0000 CONTROLLER1 NORMAL 964 看一下ASM磁盘的情况:
sql> col path for a40;
sql> select path,os_mb from v$asm_disk order by path; PATH OS_MB ---------------------------------------- ---------- /dev/oracleasm/disks/VOL1 964 /dev/oracleasm/disks/VOL2 964 /dev/oracleasm/disks/VOL3 964 /dev/oracleasm/disks/VOL4 964 /dev/oracleasm/disks/VOL5 2047 重新启动前将参数
文件的第一行#去掉 [root@timran dbs]#vi /u01/oracle/dbs/init+ASM.ora *.asm_diskgroups='DG1' 到此,创建ASM的基本
内容已经完成了。重启系统(reboot),检查一下看看磁盘组是否能够
自动mounted了。 测试ASM是否可以工作 启动了+ASM实例正常后,再启动RDBMS实例,然后建立一个+ASM上的表空间testasm做测试。
sql> exit [oracle@timran ~]$ export ORACLE_SID=timran11g [oracle@timran ~]$
sqlplus / as sysdba Connected to an idle instance.
sql> startup
sql> create tablespace testasm datafile '+DG1' size 200m; Tablespace created. //这时,你可以使用ps -ef看看,ASM实例和RDBMS实例中都有了RABL
后台进程。
sql> select * from v$tablespace; TS# NAME INC BIG FLA ENC ---------- ------------------------------ --- --- --- --- 0 SYSTEM YES NO YES 1 SYSAUX YES NO YES 2 UNDOTBS1 YES NO YES 4 USERS YES NO YES 3 TEMP NO NO YES 6 EXAMPLE YES NO YES 7 TESTASM YES NO YES
sql>select file#,name from v$datafile; FILE# NAME ---------- -------------------------------------------------- 1 /u01/oradata/timran11g/system01.dbf 2 /u01/oradata/timran11g/sysaux01.dbf 3 /u01/oradata/timran11g/undotbs01.dbf 4 /u01/oradata/timran11g/users01.dbf 5 /u01/oradata/timran11g/example01.dbf 6 +DG1/timran11g/datafile/testasm.256.803235039 create table scott.test(id int) tablespace testasm; insert into scott.test values(1); commit; select * from scott.test; ID ---------- 1 OK! 我们进入EM,看看是否也可以看到ASM磁盘组了,当ASM实例和RDBMS实例都启动之后,在EM里应该出现管理ASM磁盘组的栏目, EM-->Server-->Storage-->Disk Group 第一次加载ASM有可能看不到Disk Group项,可以尝试
查询testasm表空间-->datafile-->DG1使其出现。如果还不能出现,说明EM的资料库里缺少我们加载的ASM信息。重新配置一下EM,这需要花点时间了。 [oracle@timran ~]$ emca -config dbcontrol db 过程较长,简单说一下: a)不需要shutdown
数据库,也不需要
关闭EM,配置过程会
自动关闭启动EM b)
数据库SID:timran11g 监听端口号:1521 有关ASM信息使用缺省值即可 所有管理
用户口令:system c)继续,等待最终结果:“已成功完成Enterprise Manager的配置” ok e) 重新
登录EM,按前面所述再试,使之出现Disk Group项 [oracle@timran ~]$ 8)动态
增加/
删除ASM磁盘,观察动态再平衡,你将看到动态再平衡的特点:ASM
文件以failgroup为“池”均衡分布在所有ASM磁盘上。 8-1)将VOL5加入dg1组并指定一个故障组
sql> alter diskgroup dg1 ADD FAILGROUP CONTROLLER1 DISK 'ORCL:VOL5';
sql> select GROUP_NUMBER,TOTAL_MB from v$asm_disk; GROUP_NUMBER DISK_NUMBER NAME FAILGROUP STATE TOTAL_MB ------------ ----------- ---------- -------------------- -------- ---------- 1 0 DG1_0000 CONTROLLER1 NORMAL 964 1 1 DG1_0001 CONTROLLER1 NORMAL 964 1 2 DG1_0002 CONTROLLER2 NORMAL 964 1 3 DG1_0003 CONTROLLER2 NORMAL 964 1 4 VOL5 CONTROLLER1 NORMAL 2047 8-2)增扩表空间
sql> alter tablespace testasm add datafile '+DG1' size 5m; 注意: 1)动态再平衡的范围是以该ASM磁盘所在的故障组中进行的,其他故障组不会做IO平衡。 2)如果由于ASM
文件的增长使空间不够时,可以扩容表空间,而这会扩展所有ASM磁盘的使用空间。 9)彻底
删除ASMlib 9.1)
删除表空间
sql> drop tablespace testasm including contents and datafiles; 9.2)
删除ASM组 [root@timran ~]# su - oracle [oracle@timran ~]$ export ORACLE_SID=+ASM [oracle@timran ~]$
sqlplus / as sysdb
sql> drop diskgroup dg1 including contents; //
删除ASM组要在实例启动时做。
sql> drop diskgroup dg1 force including contents; //如果
删除失败,再试试这句。 9.3)
删除ASM磁盘
sql>shutdown abort //
关闭ASM实例 #/etc/init.d/oracleasm listdisks VOL1 VOL2 VOL3 VOL4 VOL5 #/etc/init.d/oracleasm deletedisk vol1 #/etc/init.d/oracleasm deletedisk vol2 #/etc/init.d/oracleasm deletedisk vol3 #/etc/init.d/oracleasm deletedisk vol4 #/etc/init.d/oracleasm deletedisk vol5 9.4)
删除CSS服务 #/u01/oracle/bin/localconfig delete //
删除css信息 9.5)
删除ASM参数
文件和口令
文件 #rm /u01/oracle/dbs/*ASM* 9.6)
删除ASMlib的RPM包 [root@timran init.d]# rpm -qa |grep asm //
查询asm有关的rpm包, oracleasm-2.6.18-53.el5-2.0.4-1.el5 oracleasm-support-2.1.7-1.el5 oracleasmlib-2.0.4-1.el5 [root@timran init.d]# rpm -e oracleasmlib-2.0.4-1.el5 //
删除这三个rpm包有顺序 [root@timran init.d]# rpm -e oracleasm-2.6.18-53.el5-2.0.4-1.el5 [root@timran init.d]# rpm -e oracleasm-support-2.1.8-1.el5 [root@timran init.d]# [root@timran init.d]# ll /etc/init.d/oracleasm //确信oracleasm
文件删掉了 9.7)物理
删除V
Box上的ASM虚盘 v
Box->存储->controller stat->vdi //vobx里
删除ASMDISK1,ASMDISK2。 重启linux,看到sdb,sbc都没有了,再启动RDBMS,可以正常打开访问。 [root@timran dev]# ll /dev/sd* brw-r----- 1 root disk 8,0 Dec 28 17:35 sda brw-r----- 1 root disk 8,1 Dec 28 17:35 sda1 brw-r----- 1 root disk 8,2 Dec 28 17:35 sda2 [root@timran dev]# 9.8 本机安装测试完成后碰到的一个问题:当启动ASM实例后再启动RDBMS实例时报错: ORA-00845: MEMORY_TARGET not supported on this system 这个问题是由于设置SGA的大小超过了操作系统/dev/shm的大小: 查看并更改/etc/fstab
文件后,问题
解决。 [root@timran ~]# df -h /dev/shm Filesystem Size Used Avail Use% Mounted on tmpfs 506M 158M 348M 32% /dev/shm [root@timran ~]# [root@timran ~]# vi /etc/fstab LABEL=/ / ext3 defaults 1 1 tmpfs /dev/shm tmpfs defaults,size=800m 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 LABEL=SWAP-sda2 swap swap defaults 0 0