开发者社区> 问答> 正文

OracleASM管理

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, 63 sectors/track, 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, 63 sectors/track, 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 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",action=="add",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,STATE,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,DISK_NUMBER,NAME,FAILGROUP,STATE,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)物理删除Vbox上的ASM虚盘
vbox->存储->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

展开
收起
男刊 2016-09-02 19:16:29 10382 0
2 条回答
写回答
取消 提交回答
  • 云栖社区聚能聊、问答管理员~发福利、搞怪,八卦我来,论技术、发话题、写博客你上!
    看得我好混乱
    2016-09-05 13:33:00
    赞同 展开评论 打赏
  • 为毛我在我网站发的都是格式对着呢    发到这就一大堆了

    -------------------------

    回 2楼(linanxiaoxiao) 的帖子
    我发出来的确也吓我一跳 可是修改了格式还是这样
    2016-09-02 19:17:31
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PostgresChina2018_樊文凯_ORACLE数据库和应用异构迁移最佳实践 立即下载
PostgresChina2018_王帅_从Oracle到PostgreSQL的数据迁移 立即下载
Oracle云上最佳实践 立即下载

相关镜像