--======================== -- 创建ASM实例及ASM数据库 --========================
一、ASM相关概念
1.什么是ASM(Auto Storage Management)
简称自动存储管理,是一种用于管理磁盘的工具
能够在多个物理设备之间实现条带化、镜像数据文件、恢复文件等
文件按分配单元AUs(allocation units)平衡分布在磁盘组的所有磁盘中,ASM使用索支持联机磁盘的动态增加和减少,当磁盘发生变化后,AUs会自动重新实现动态分布 支持RAC集群技术,每一节点上运行一个ASM实例,各ASM实例间能实现点对点通讯 是一个纯软件级别的实现方式,第三方RAID工作在卷层次上,使用统一条带大小,ASM
不同的条带大小
引技术来跟踪每个AUs的位置
可以工作在文件层次级别,不同文件可以使用
磁盘增加:增加磁盘变得非常容易。无需停机时间,并且文件区域自动重新分配。 I/O 分配:I/O 自动分布在所有可用的磁盘上,无需人工干预,从而减少了热点出现
2.ASM的优点
的可能性。
带区宽度:在重做日志文件中分段可以细分(K,以获得更快的传输速率),对于数据
传输大量的数据块)。
文件,带区则略大一些(MB,以一次性
缓冲:ASM 文件系统不进行缓冲,直接进行输入/输出。 镜像:如果硬件镜像不可用,则可以容易地建立软件镜像。
核心化的异步I/O :实现核心化的异步I/O 无需特殊的设置,并且无需使用原始或第
三方的文件系统(如 Veritas Quick I/O)
3.Oracle 常用数据文件的RAID级别
SYSTEM、UNDO表空间通常置于RAID 1卷上 联机重做日志通常置于RAID 0卷上 控制文件通常置于RAID 0+1 卷上 数据文件通常置于RAID 5卷上
ASM的使用需要创建一个ASM实例,用于管理ASM磁盘组 ASM磁盘组由ASM磁盘组成,可以包含一个或多个ASM磁盘
4.ASM体系结构(主要由ASM实例及ASM磁盘组组成)
ASM磁盘可以是实际的磁盘,也可以是磁盘的某个分区,或LVM管理的逻辑卷,但必须
是未格式化的原始设备
ASM磁盘组的大小为该组内ASM磁盘大小的总和,可使用的容量则根据容错级别而有不
同的可用大小
ASM实例类似于普通的数据库实例(RDBMS),同样由SGA和一堆后台进程组成,对大多数
5.ASM实例及RDBMS实例
系统而言,SGA只需 MB即可
ASM实例中的LargePool 用于存放Extent Map,可以根据数据库的大小来计算
LargePool的大小,通常100GB大小需要1MB存放Extent Map
普通的RDBMS实例会定位数据文件并打开其数据文件,而在使用ASM存储的数据库中,
管理ASM磁盘,磁盘组。
该工作由ASM实例接管,即ASM实例用于定位和
ASM实例拥有类似于普通RDBMS实例的后台进程,如SMON,PMON,LGWR,DBWR,CKPT
RBAL:用于协调和管理磁盘组之间的动态平衡 ARBn:可以为多个,用于完成AU的移动
等,还增添了两个新进程,一类是RBAL,一类是ARBn
ASM实例仅仅是定位管理ASM磁盘,不能加载或打开数据库,因此也无法读取数据字典
信息
ASM实例通常有个参数,只能使用口令文件或操作系统身份验证作为sysdba或sysoper
关于sysdba或sysoper区别请参考:system sys,sysoper sysdba 的区别
来启动或关闭该实例。
一个ASM实例可以为多个RDBMS提供服务,可以在一台主机上创建多个ASM实例,但
通常一台主机上使用一个ASM实例
如果一个实例服务于多个RDBMS,建议将ASM的ASM_HOME与DB的ORACLE_HOME分开,ASM磁盘组的创建与配置在ASM实例启动之后
便于日后的升级与维护
使用ASM磁盘的RDBMS实例与普通的RDBMS实例相同,但多出了两个后台进程,RBAL,ASMB。
ASMB借助某个服务器进程如oracle+ASM1建立普通RDBMS实例到ASM实例的会话,RBAL打开通过ASM实例定位的ASM磁盘
并传递磁盘文件的相关信息
注意:ASM 实例并不代替RDBMS实例来读取或写入数据文件,数据是直接在ASM磁盘
和RDBMS实例传递,ASM实例仅用于定位数据文件
所在的asm磁盘,盘区以及所需的相关信息。假定新增加数据文件,则RDBMS告
知ASM实例要创建数据文件,ASM实例则分配盘区
(extent),并创建盘区映射地址返回给RDBMS实例,RDBMS则将数据直接写入到
磁盘组。
参数文件
联机日志文件
归档日志文件
数据文件
临
6.ASM实例中存储的文件类型
控制文件
时文件
RMAN备份集、映像副本
控制文件备份集
datapump 转储文件、Change
Tracing file
二、创建ASM实例(下面基于VMware + RHEL 5.4 + Oracle 10g R2演示)
1.安装ASM包
使用ASM实例,需要到Oracle官方网站下载所需的ASM包。下载路径:ASMLib下载 注意下载支持该内核的包,分为两部分,一是Library and Tools,二是Drivers for 如本人的Linux的内核为:
[root@oradb ~]# uname -rm 2.6.18-1.el5 i686 Library and Tools
oracleasmlib-2.0.4-1.el5.x86_.rpm oracleasm-support-2.1.3-1.el5.i386.rpm
oracleasm-2.6.18-1.el5xen-2.0.5-1.el5.i686.rpm oracleasm-2.6.18-1.el5debug-2.0.5-1.el5.i686.rpm oracleasm-2.6.18-1.el5PAE-2.0.5-1.el5.i686.rpm oracleasm-2.6.18-1.el5-debuginfo-2.0.5-1.el5.i686.rpm oracleasm-2.6.18-1.el5-2.0.5-1.el5.i686.rpm
kernel
则下载对应的包为:
Drivers for kernel 2.6.18-1.el5
使用下面类似的方式来安装这些包,关于RPM 的使用请参考:RPM 使用简介
[root@oradb asm]# rpm -Uvh oracleasm-support-2.1.3-1.el5.i386.rpm [root@oradb asm]# rpm -qa | grep asm oracleasm-support-2.1.3-1.el5
oracleasm-2.6.18-1.el5-debuginfo-2.0.5-1.el5 oracleasm-2.6.18-1.el5-2.0.5-1.el5
验证安装的包
2.启用css服务(Cluster Synchronization Services )
用于同步ASM实例与RDBMS实例
使用root帐户进行配置,配置程序位于$ORACLE_HOME/bin [root@oradb ~]# /u01/oracle/10g/bin/localconfig add
/etc/oracle does not exist. Creating it now. Successfully accumulated necessary OCR keys. Creating OCR keys for user 'root', privgrp 'root'.. Operation successful.
Configuration for local CSS has been initialized Adding to inittab
Startup will be queued to init within 90 seconds. Checking the status of new Oracle init process... Expecting the CRS daemons to be up within 600 seconds. CSS is active on these nodes.
oradb
CSS is active on all nodes.
Oracle CSS service is installed and running under init(1M)
3.创建ASM参数文件(使用VI或VIM)
[oracle@oradb dbs]$ cat /u01/oracle/10g/dbs/init+ASM.ora
*.asm_diskstring='' #为空表示可以搜索*.background_dump_dest='/u01/oracle/admin/+ASM/bdump' #后台进程存放位置 *.core_dump_dest='/u01/oracle/admin/+ASM/cdump' #核心进程存放位置 *.user_dump_dest='/u01/oracle/admin/+ASM/udump' #用户进程存放位置 *.instance_type='ASM' #实例类型,普通实*.instance_name='+ASM' #实例名字 *.large_pool_size=12M #为实例分配*.remote_login_passwordfile='SHARED' #登陆认证方式 *.asm_power_limit=1 #控制均衡操作的资
任意的ASM磁盘
例默认则为RDBMS
large_pool的大小
源,缺省为
4.创建ASM后台进程目录,参照参数文件中的配置来创建
[oracle@oradb ~]$ echo $ORACLE_BASE /u01/oracle/10g
[oracle@oradb ~]$ mkdir -p $ORACLE_BASE/admin/+ASM/bdump [oracle@oradb ~]$ mkdir -p $ORACLE_BASE/admin/+ASM/udump [oracle@oradb ~]$ mkdir -p $ORACLE_BASE/admin/+ASM/cdump
5.创建密码文件及spfile参数文件
[oracle@oradb ~]$ orapwd file=$ORACLE_HOME/dbs/orapw+ASM password=redhat [oracle@oradb ~]$ export ORACLE_SID=+ASM SQL> conn / as sysdba Connected to an idle instance. SQL> startup ASM instance started
ORA-15110: no diskgroups mounted SQL> create spfile from pfile; SQL> select * from v$asm_diskgroup; no rows selected
entries=8
Calling ioctl() to re-read partition table. Syncing disks.
Command (m for help): w
The partition table has been altered!
Command (m for help): n Command action e extended
p primary partition (1-4) p
Partition number (1-4): 1
First cylinder (1-261, default 1): Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-261, default 261): Using default value 261
7.创建ASM磁盘及配置ASMlib驱动
在Vmware分配几个空闲的磁盘用于创建ASM磁盘,建议使用不同的磁盘控制器 下面使用个磁盘来组建ASM磁盘组,分别为sdd,sde,sdf,sdg 分别对个磁盘进行分区,列出sdd的分区样例,其余如法炮制
[root@oradb ~]# fdisk /dev/sdd
创建ASM磁盘(三种方法)
a.配置裸设备映射,修改/etc/udev/rules.d/60-raw.rules文件
容
使用root帐户修改/etc/udev/rules.d/60-raw.rules 按如下方式添加磁盘 [root@oradb ~]# cat /etc/udev/rules.d/60-raw.rules --查看添加的内ACTION==\"add\", KERNEL==\"sdd1\", RUN+=\"/bin/raw /dev/raw/raw1 %N\" ACTION==\"add\", ENV{MAJOR}==\"8\", ENV{MINOR}==\"1\", RUN+=\"/bin/raw
/dev/raw/raw1 %M %m\"
ACTION==\"add\", KERNEL==\"sde1\", RUN+=\"/bin/raw /dev/raw/raw2 %N\" ACTION==\"add\", ENV{MAJOR}==\"8\", ENV{MINOR}==\"17\", RUN+=\"/bin/raw
/dev/raw/raw2 %M %m\"
b.也可以采用下面的方式来增加磁盘,即直接修改/etc/sysconfig/rawdevices
[root@oradb ~]# vim /etc/sysconfig/rawdevices
[root@oradb ~]# cat /etc/sysconfig/rawdevices --查看增加的内容为/dev/raw/raw3 /dev/sdf1 /dev/raw/raw4 /dev/sdg1
(root帐户)
[root@oradb ~]# start_udev #重启udev服务 Starting udev: [ OK ]
[root@oradb ~]# ll /dev/raw total 0
crw------- 1 root root 162, 1 Nov 10 18:50 raw1 crw------- 1 root root 162, 2 Nov 10 18:50 raw2
[root@oradb ~]# chown oracle:dba /dev/raw/raw[1-2] --修改属主,否则创
建磁盘组时提示权限不够
raw3,raw4
[root@oradb ~]# chown oracle:dba /dev/raw/raw[3-4] --修改属主,否则创[root@oradb ~]# ll /dev/raw/ total 0
crw------- 1 oracle dba 162, 1 Nov 10 20:12 raw1 crw------- 1 oracle dba 162, 2 Nov 10 20:12 raw2 crw------- 1 oracle dba 162, 3 Nov 10 20:12 raw3 crw------- 1 oracle dba 162, 4 Nov 10 20:12 raw4
建磁盘组时提示权限不够
重启裸设备服务
[root@oradb ~]# /sbin/service rawdevices restart Assigning devices:
/dev/raw/raw3 --> /dev/sdf1 /dev/raw/raw4 --> /dev/sdg1
/dev/raw/raw3: bound to major 8, minor 81
/dev/raw/raw4: bound to major 8, minor 97 done
SQL> select instance_name,status from v$instance; INSTANCE_NAME STATUS ---------------- ------------ +ASM STARTED
SQL> create diskgroup DG1 normal redundancy disk
'/dev/raw/raw1','/dev/raw/raw2'; --创建磁盘组DG1
SQL> select * from v$fixed_table where name like '%ASM%'; --查看和asm
相关的视图
NAME ALLOCATION_UNIT_SIZE STATE TYPE FREE_MB
REQ_MI_FR_MB USABLE_FILE_MB
--------------- -------------------- ----------- ------ ----------
------------ --------------
SQL> select name,state,free_mb,required_mirror_free_mb,usable_file_mb 2 from v$asm_diskgroup;
--查看磁盘组的状态及信息
SQL> create diskgroup DG2 normal redundancy disk
'/dev/raw/raw3','/dev/raw/raw4'; --创建磁盘组DG2
DG1 1048576 MOUNTED NORMAL 296
0 148
SQL> select name,allocation_unit_size,state,type,
2 free_mb,required_mirror_free_mb req_mi_fr_mb,usable_file_mb 3 from v$asm_diskgroup;
NAME STATE FREE_MB REQUIRED_MIRROR_FREE_MB
USABLE_FILE_MB
--------------- ----------- ---------- -----------------------
-------------- 148 148
DISK_NUMBER TOTAL_MB FREE_MB ----------- ---------- ----------
1 199 148 0 199 148 1 199 148 0 199 148
DG2 MOUNTED 296 0
DG1 MOUNTED 296 0
SQL> select disk_number,total_mb,free_mb from v$asm_disk;
重新启动Linux 主机后
SQL> startup --重新启动ASM实例,收到了磁盘组insufficient信息 ASM instance started
ORA-15032: not all alterations performed
ORA-15063: ASM discovered an insufficient number of disks for diskgroup
\"DG2\"
ORA-15063: ASM discovered an insufficient number of disks for diskgroup
\"DG1\"
SQL> ho ls -hlt /dev/raw # LINUX主机重新启动之后属主性质已发生total 0
crw------- 1 root root 162, 4 Nov 10 20:28 raw4 crw------- 1 root root 162, 3 Nov 10 20:28 raw3 crw------- 1 root root 162, 2 Nov 10 20:28 raw2 crw------- 1 root root 162, 1 Nov 10 20:28 raw1
变化
原因:原始设备在引导时会重新映射。默认情况下,在引导时原始设备的拥有者
将更改为root 用户
将下面的内容增加到/etc/rc.local文件(root帐户),重新启动主机,使得属主
变为oracle,则不再出现类似的提示
chown oracle:dba /dev/raw/raw1 chown oracle:dba /dev/raw/raw2 chown oracle:dba /dev/raw/raw3 chown oracle:dba /dev/raw/raw4 chmod 660 /dev/raw/raw1 chmod 660 /dev/raw/raw2 chmod 660 /dev/raw/raw3 chmod 660 /dev/raw/raw4
SQL> drop diskgroup dg1; --将刚才创建的两个磁盘组删除
SQL> drop diskgroup dg2;
使用root帐户清除/etc/udev/rules.d/60-raw.rules 便于下面使用asmlib来创建asm磁盘
/etc/sysconfig/rawdevices 以及/etc/rc.local刚刚增加的记录
c.使用root帐户配置ASMLib驱动及创建ASM磁盘,Oracle建议使用ASMLIB驱动来
[root@oradb ~]# /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 配置ASM磁盘 --注意下面创建磁盘前本人重新对磁盘分过区 [root@oradb ~]# ls /dev/oracleasm/disks [root@oradb ~]# /etc/init.d/oracleasm createdisk VOL1 /dev/sdd1 Marking disk \"VOL1\" as an ASM disk: [ OK ] [root@oradb ~]# /etc/init.d/oracleasm createdisk VOL2 /dev/sdd2 Marking disk \"VOL2\" as an ASM disk: [ OK ] [root@oradb ~]# /etc/init.d/oracleasm createdisk VOL3 /dev/sde1 Marking disk \"VOL3\" as an ASM disk: [ OK ] [root@oradb ~]# /etc/init.d/oracleasm createdisk VOL4 /dev/sde2 Marking disk \"VOL4\" as an ASM disk: [ OK ] [root@oradb ~]# /etc/init.d/oracleasm listdisks VOL1 VOL2 VOL3 VOL4 [root@oradb ~]# su - oracle [oracle@oradb ~]$ export ORACLE_SID=+ASM [oracle@oradb ~]$ sqlplus /nolog SQL> conn / as sysdba SQL> startup ASM instance started ORA-15110: no diskgroups mounted SQL> create diskgroup DG1 normal redundancy 2 failgroup FG1 disk '/dev/oracleasm/disks/VOL1' name VOL1 3 failgroup FG2 disk '/dev/oracleasm/disks/VOL2' name VOL2; create diskgroup DG1 normal redundancy * ERROR at line 1: ORA-15018: diskgroup cannot be created --下面提示磁盘路径未在 discovery set中设置 ORA-15031: disk specification '/dev/oracleasm/disks/VOL2' matches no disks ORA-15014: location '/dev/oracleasm/disks/VOL2' is not in the discovery set ORA-15031: disk specification '/dev/oracleasm/disks/VOL1' matches no disks ORA-15014: location '/dev/oracleasm/disks/VOL1' is not in the discovery set SQL> show parameter asm_diskstring NAME TYPE VALUE ------------------------------------ ----------- asm_diskstring string ------------------------------ SQL> create diskgroup DG1 normal redundancy --设置asm_diskstring 2 failgroup FG1 disk '/dev/oracleasm/disks/VOL1' name VOL1 3 failgroup FG2 disk '/dev/oracleasm/disks/VOL2' name VOL2; 后重新创建磁盘DG1成功 SQL> alter system set asm_diskstring='/dev/oracleasm/disks/VOL*'; SQL> select 2 from v$asm_diskgroup; name,state,free_mb,required_mirror_free_mb,usable_file_mb NAME STATE FREE_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB --------------- ----------- ---------- ----------------------- -------------- DG1 MOUNTED 29 0 1482 8.创建ASM数据库 使用dbca工具根据提示来创建使用ASM存储的数据库 创建使用ASM存储的数据库完毕之后,对于ASM数据库启动应首先保证ASM实例先被接下来再来启动RDBMS 启动,因为RDBMS是ASM实例服务的一个客户端 --首先启动asm实例 export ORACLE_SID=+ASM sqlplus / as sysdba startup exit export ORACLE_SID=orcl --接下来启动rdbms数据库 sqlplus / as sysdba startup 三、创建ASM实例时的常见故障 1.创建磁盘时出现错误可以查看asm日志 tail -f /var/log/oracleasm 2.启动asm实例时出现ORA-29701错误 ORA-29701: unable to connect to Cluster Manager 首次需要启用css服务,使用root帐户,运行$ORACLE_HOME/bin/localconfig add 如果下次启动实例的时候仍然碰到如下报错: ORA-29701: unable to connect to Cluster Manager 那么检查/etc/inittab 文件,看看是否有下面这行 h1:35:respawn:/etc/init.d/init.cssd run >/dev/null 2>&1 也可以使用root帐户执行/u01/oracle/10g/bin/localconfig reset来解决 SQL> create diskgroup DG1 normal redundancy disk 'ORCL:VOL1','ORCL:VOL2'; create diskgroup DG1 normal redundancy disk 'ORCL:VOL1','ORCL:VOL2' * ERROR at line 1: ORA-15018: diskgroup cannot be created ORA-15031: disk specification 'ORCL:VOL2' matches no disks ORA-15031: disk specification 'ORCL:VOL1' matches no disks 3.磁盘搜索路径问题 使用oraclasm创建磁盘后,缺省会在/dev/oracleasm/disks目录下添加刚刚创建的磁修改asm_diskstring修改路径之后再次创建即可 alter system set asm_diskstring='/dev/oracleasm/disks/VOL*' 盘映射 --======================== -- ASM 磁盘、目录的管理 --======================== ASM磁盘是ASM体系结构的重要组成部分,ASM磁盘由ASM实例来定位、管理,本文主要讲有关ASM实例及ASM数据库的创建请参考:创建ASM实例及ASM数据库 述ASM磁盘组、故障组等等。 一、相关概念 1.ASM 磁盘组 ASM存储管理除了ASM实例之外,最大的组成部分就是ASM磁盘组。一个ASM磁盘组由 过多个ASM磁盘组成 一个磁盘组内可以存放多个数据文件,一个数据文件仅仅只能位于一个磁盘组内,不多个数据库可以共享相同的或多个磁盘组 磁盘组的冗余类型可以分为三类:标准冗余,高度冗余,外部冗余 对于已创建的磁盘组,不能够更改其冗余级别,如要更改,需要删除该磁盘组后再重 能跨磁盘组 2.ASM 磁盘 新创建 ASM磁盘通过标准的OS接口来访问,由Oracle用户来读写,在聚集的所有节点可以被ASM磁盘在不同的节点可以使用不同的名字 ASM磁盘可以使网络文件系统 ASM磁盘上的对象被冗余保护 每一个ASM磁盘的第块用于定义磁盘的头部信息,ASM磁盘名字编号,创建的时间戳等 ASM文件会均匀分布在一个ASM组内的各个磁盘中 访问 3.ASM 故障组 一个磁盘组可以由两个或多个故障组组成 一个故障组由一个或多个ASM磁盘组成 故障组提供了共享相同资源的冗余,我们可以这样来理解标准冗余 假定有磁盘组DG1,且创建了两个故障组fgroup1,fgroup2,每个故障组由个ASM磁failgroup1 --> asmdiskA , asmdiskB failgroup2 --> asmdiskC , asmdiskD 假定文件datafileA大小为MB,则个extent均匀分布到asmdiskA,asmdiskB,同样 盘组成,则对标准冗余而言,两个故障组互为镜像 asmdiskC,asmdiskD也包含该文件的至个extent 即只要有一个extent在故障组fgroup1中存在,必定有一个镜像的extent存在 于fgroup2中,反之亦然,两个extent互为镜像。 当一个故障组中的某个磁盘损坏,假定为asmdiskA ,则asmdiskA中原来保存的总之,故障组failgroup1和failgroup2必定有相同的extent副本 extent将会从failgroup2中复制到asmdiskB中。 标准冗余至少需要两个故障组,高度冗余则至少需要个故障组。事实上对于未明确指 asm磁盘,而高度冗余至少需要个asm磁盘 定故障组的情况下,一个标准冗余至少需要两个 ASM磁盘的最小粒度是分配单元,大小默认是M,也可设置为K进行细粒度访问 支持粗粒度和细粒度分配单元进行读写来实现装载平衡和减少延迟 ASM文件由一些分配单元的集合组成 4.分配单元 对Oracle自身而言,实际上与标准的文件并没有太多区别 ASM文件一般位于磁盘组内创建的子目录内,磁盘组以加号开头,相当于Linux系统的 如+DG1/oradb/datafile/system.258.346542 5.ASM 文件 根目录 持 6.I/O分布 可以使用条带化和镜像来保护数据 文件被平均分布在一个组内的所有磁盘中 磁盘的添加与删除,ASM会自动重新分配AU,因此也不存在碎片的问题 将I/O分批到不同的磁盘控制器提高了读写数据 使用extent maps来记录文件到磁盘的映射 ASM可以为控制文件,数据文件,联机日志文件,参数文件,归档日志,备份等 不支持trace文件,可执行文件,OCR,Votingdisk等,注:Oracle 11g R2可支 ASM 文件被均衡地分布在一个磁盘组的所有磁盘中 磁盘添加时,当前磁盘组加载的所有磁盘享的部分extent将会被移植到新的磁盘磁盘删除或故障时,删除磁盘或故障磁盘的extent将会被均匀的分布到剩余的磁盘中 未使用force关键字drop磁盘操作,该磁盘上所有数据rebalance完毕后才被释放.即 7.Rebalance 中,直到重新分布完成才正常提供I/O均衡 完毕后磁盘脱机,置磁盘头部状态为former 总之,任意存储性质改变(磁盘增加,删除,故障)都将导致rebalance,且由asm自动完 成,无需人工干预,在一个时间段通常会锁定一个盘区 用 8.ASM磁盘组的管理 通常建议创建两个磁盘组,一个用于保存数据文件,一个用于保存闪回,备份恢复使Flash Recovery Area 的大小取决于闪回内容需要保留的时间长短 尽可能将数据区与闪回区使用不同的物理通道 尽可能一次性mount所有需要用到的磁盘 建议使用性能,磁盘大小相近的磁盘。假定两个故障组FG1,FG2各使用一块磁盘,则 否则会以最小的磁盘空间作为可使用空间 FG1内的磁盘应保持与FG2内的磁盘大小相同, 二、ASM磁盘创建及管理 NAME TYPE VALUE ------------------------------------ ----------- instance_type string ASM SQL> show parameter asm_diskst NAME TYPE VALUE ------------------------------------ ----------- asm_diskstring string /dev/oracleasm/disks/VOL* 9.ASM磁盘组的管理方式 SQLPlus OEM DBCA ASMCMD 1.查看ASM配置磁盘搜索信息 SQL> show parameter instance_type ------------------------------ ------------------------------ 2.使用oracleasm创建磁盘 [root@oradb ~]# /etc/init.d/oracleasm createdisk VOL1 /dev/sdd1 Marking disk \"VOL1\" as an ASM disk: [ OK ] [root@oradb ~]# /etc/init.d/oracleasm createdisk VOL2 /dev/sdd2 Marking disk \"VOL2\" as an ASM disk: [ OK ] [root@oradb ~]# /etc/init.d/oracleasm createdisk VOL3 /dev/sde1 Marking disk \"VOL3\" as an ASM disk: [ OK ] [root@oradb ~]# /etc/init.d/oracleasm createdisk VOL4 /dev/sde2 Marking disk \"VOL4\" as an ASM disk: [ OK ] [root@oradb ~]# /etc/init.d/oracleasm listdisks VOL1 VOL2 VOL3 VOL4 3.创建磁盘组语法 CREATE DISKGROUP diskgroup_name [ { HIGH | NORMAL | EXTERNAL } REDUNDANCY ] [ FAILGROUP failgroup_name ] DISK [ NAME disk_name ] [ SIZE size_clause ] [ FORCE | NOFORCE ] ...; 4.创建磁盘组 SQL> create diskgroup DG1 normal redundancy disk '/dev/oracleasm/disks/VOL1' name VOL1; create diskgroup DG1 normal redundancy disk '/dev/oracleasm/disks/VOL1' name * ERROR at line 1: ORA-15018: diskgroup cannot be created --标准冗余至少需要两块磁盘 ORA-15072: command requires at least 2 failure groups, discovered only 1 SQL> create diskgroup DG1 normal redundancy 2 disk '/dev/oracleasm/disks/VOL1' name VOL1 SQL> create diskgroup DG2 normal redundancy --使 2 failgroup FG1 disk '/dev/oracleasm/disks/VOL3' name DG2_FG1_VOL3 3 failgroup FG2 disk '/dev/oracleasm/disks/VOL4' name DG2_FG2_VOL4; 用标准冗余创建磁盘组DG2 SQL> create diskgroup DG_ext external redundancy disk '/dev/oracleasm/disks/VOL10' name DG_ext_VOL10; --外部冗余 DG1_VOL1 ,'/dev/oracleasm/disks/VOL2' name DG1_VOL2; SQL> select group_number gno,name,state,type,total_mb,free_mb, --查看创建 2 required_mirror_free_mb rmfmb,usable_file_mb ufmb 3 from v$asm_diskgroup; 的磁盘组 GNO NAME STATE TYPE TOTAL_MB FREE_MB RMFMB UFMB ---------- --------------- ----------- ------ ---------- ---------- ---------- ---------- 1 DG1 MOUNTED NORMAL 3066 29 0 1482 2 DG2 MOUNTED NORMAL 3066 29 0 1482 GNO NAME FGNO STATE TOTAL_MB FREE_MB HEADER_STATU ---------- --------------- --------------- -------- ---------- ---------- ------------ 2 DG2_FG2_VOL4 FG2 NORMAL 1537 1486 MEMBER 2 DG2_FG1_VOL3 FG1 NORMAL 1529 1478 MEMBER 1 DG1_VOL2 DG1_VOL2 NORMAL 1537 1486 MEMBER 1 DG1_VOL1 DG1_VOL1 NORMAL 1529 1478 MEMBER 3 DG_EXT_VOL10 DG_EXT_VOL10 NORMAL 100 50 MEMBER 5.磁盘组添加故障组和成员 --为非故障组添加成员 SQL> alter diskgroup DG1 add disk '/dev/oracleasm/disks/VOL5' name SQL> select group_number gno,name,failgroup fgno,state,total_mb,free_mb,header_status from v$asm_disk; 3 DG_EXT MOUNTED EXTERN 100 50 0 50 DG1_VOL5; SQL> alter diskgroup DG2 drop disks in failgroup FG3; --删除故障组及所有成 SQL> alter diskgroup DG1 drop disk DG1_VOL4 --删除磁盘组中的磁盘, add failgroup FG3 disk '/dev/oracleasm/disks/VOL9' name DG1_VOL11; 员,注意此时为drop disks 复数形式 SQL> alter diskgroup DG2 drop disk DG2_0003; --删除故障组中的单个成员 SQL> alter diskgroup DG1 drop disk DG1_VOL5; --删除磁盘组DG1中的磁盘VOL5 6.删除磁盘组中的磁盘,故障组中的成员,磁盘组 --为DG2的个故障组各添加一个成员 SQL> alter diskgroup DG2 2 add failgroup FG1 disk '/dev/oracleasm/disks/VOL7' 3 add failgroup FG2 disk '/dev/oracleasm/disks/VOL8' 4 add failgroup FG3 disk '/dev/oracleasm/disks/VOL9'; --为DG2添加一个故障组FG3及成员 SQL> alter diskgroup DG2 2 add failgroup FG3 disk '/dev/oracleasm/disks/VOL6' name DG2_FG3_VOL6; --添加故障组及成员 同时添加故障组FG3 SQL> drop diskgroup DG1; --删除磁盘组 ----故障组FG3的容量将被调整到G,如果磁盘空间不足,则调整失败 SQL> alter diskgroup DG2 resize disks in failgroup FG3 size 10G; 7.调整磁盘组的容量 8.手动Rebalance SQL> alter diskgroup DG2 rebalance power 3 wait; 9.磁盘组的加载与卸载及内部一致性检查 SQL> alter diskgroup all dismount; SQL> alter diskgroup DG2 mount; SQL> alter diskgroup DG2 check all; 10.查看磁盘组的partner SQL> select name,state,type from v$asm_diskgroup where group_number=3; -- 查看磁盘组DG3的信息 NAME STATE TYPE --------------- ----------- ------ DG3 MOUNTED NORMAL SQL> select grp,disk,number_kfdpartner from x$kfdpartner where grp=3; GRP DISK NUMBER_KFDPARTNER ---------- ---------- ----------------- 3 0 1 --磁盘组DG3使用了个磁盘,且 冗余度为标准冗余 3 0 2 --磁盘组的partner 为磁盘 组,2 3 1 0 --磁盘组的partner 为磁盘 3 1 2 3 2 0 --磁盘组的partner 为磁盘 3 2 1 组,2 组,1 三、磁盘组中目录、文件的管理 SQL> alter diskgroup DG2 drop directory '+DG2/dtfile'; --删除目录 SQL> alter diskgroup DG2 rename directory '+DG2/datafile' to '+DG2/dtfile'; --重命名目录 1.为磁盘组增加目录 SQL> alter diskgroup DG2 add directory '+DG2/datafile'; --为磁盘组增加目录 SQL> alter diskgroup DG2 add directory '+DG2/asmdb/datafile'; --为磁盘组 增加目录 alter diskgroup DG2 add directory '+DG2/asmdb/datafile' * ERROR at line 1: ORA-15032: not all alterations performed ORA-15173: entry 'asmdb' does not exist in directory '/ ' --收到错误 提示,asmdb目录不存在,必须要先创建 SQL> alter diskgroup DG2 add directory '+DG2/asmdb/'; --首先添加 asmdb SQL> alter diskgroup DG2 add directory '+DG2/asmdb/datafile'; --再次添加 目录成功 2.为文件添加别名,重命名别名 SQL> alter diskgroup DG1 add alias '+DG1/asmdb/datafile/users.dbf' --添加 2 for '+DG1/asmdb/datafile/users.263.734885485' ; 别名 SQL> select 2 from v$asm_alias where file_number=263; NAME GROUP_NUMBER FILE_NUMBER ALIAS_INDEX A S ------------------------- ------------ ----------- ----------- - - USERS.263.734885485 1 263 215 N Y users.dbf 1 263 216 N N name,group_number,file_number,alias_index,alias_directory,system_created SQL> alter diskgroup DG1 rename alias '+DG1/asmdb/datafile/users.dbf' -- 2 to '+DG1/asmdb/datafile/users01.dbf'; 重命名一个别名 SQL> select 2 from v$asm_alias where file_number=263; NAME GROUP_NUMBER FILE_NUMBER ALIAS_INDEX A S ------------------------- ------------ ----------- ----------- - - USERS.263.734885485 1 263 215 N Y users01.dbf 1 263 216 N N name,group_number,file_number,alias_index,alias_directory,system_created 四、TEMPLATE的管理 TEMPLATE是一个模板,为数据库中新增的文件定义了缺省分配单元大小,以及冗余级 别。对于不同类型的文件,使用了不同的AUs以及 不同的冗余度。如对控制文件采用高度冗余,条带使用精细化条带(128kb),而参数文件,数据文件则采用标准冗余,粗级别条带(1MB)。 这个特性正是Oracle asm 管理不同于外部冗余的特性,即可以基于文件的不同属性而使用不同级别的冗余度和不同大小的条带化分配单 元。当然,我们可以根据不同的需求来修改该模板,使得创建新的文件时根据需要来应用其冗余和条带花特性。系统管理人员能改变系统缺 省template, 但不能删除该删除,管理员能增加自己的template,然后在该模板上创建数据文件。 3.为文件删除别名 SQL> alter diskgroup DG1 drop alias '+DG1/asmdb/datafile/users01.dbf'; 下面是缺省情况下DG1中新增文件所使用的缺省的条带化及其冗余级别 SQL> select * from v$asm_template where group_number=1; GROUP_NUMBER ENTRY_NUMBER REDUND STRIPE S NAME ------------ ------------ ------ ------ - ----------------------------------- 1 0 MIRROR COARSE Y PARAMETERFILE 1 1 MIRROR COARSE Y DUMPSET 1 2 HIGH FINE Y CONTROLFILE 1 3 MIRROR COARSE Y ARCHIVELOG 1 4 MIRROR FINE Y ONLINELOG 1 5 MIRROR COARSE Y DATAFILE 1 6 MIRROR COARSE Y TEMPFILE 1 7 MIRROR COARSE Y BACKUPSET 1 8 MIRROR COARSE Y AUTOBACKUP 1 9 MIRROR COARSE Y XTRANSPORT 1 10 MIRROR COARSE Y CHANGETRACKING 1 11 MIRROR FINE Y FLASHBACK 1 12 MIRROR COARSE Y DATAGUARDCONFIG 1.创建TEMPLATE的语法 ALTER DISKGROUP disk_group_name ADD TEMPLATE template_name ATTRIBUTES ([{MIRROR|HIGH|UNPROTECTED}] [{FINE|COARSE}]); 2.添加TEMPLATE SQL> alter diskgroup DG1 add template template_one attributes (high fine); SQL> alter diskgroup DG1 add template template_two attributes (unprotected); 3.修改已存在的TEMPLATE SQL> alter diskgroup DG1 alter template template_one attributes (coarse); 4.删除TEMPLATE SQL> alter diskgroup DG1 drop template template_two; 5.基于模板创建数据文件 SQL> create tablespace test datafile '+DG1/asmdb/datafile/test.dbf(template_one)' size 10M; DB_CREATE_FILE_DEST --Oracle创建数据文件、临时文件时,在未明确指定路径的情况下的缺省路径 --当db_create_online_log_dest_n未指定时,也作为 联机日志文件和控制文件的缺省路径 DB_CREATE_ONLINE_LOG_DEST_n --Oracle创建联机日志文件和控制文件时,在未明确指DB_RECOVERY_FILE_DEST --适用于rman, archivelog,onlinelog 定路径的情况下的缺省路径 NAME REDUND STRIPE ----------------------------------- ------ ------ Current.256.734885363 HIGH FINE SYSAUX.260.7363679 MIRROR COARSE TBS_RMAN.265.735409761 MIRROR COARSE TEMP.262.734885475 MIRROR COARSE SYSTEM.259.7348853 MIRROR COARSE 6.查看当前系统中文件使用的模板 SQL> select name,redundancy,striped 2 from v$asm_alias a join v$asm_file b 3 on a.file_number=b.file_number 4 and a.group_number=b.group_number 5 order by name; 五、使用OMF 创建ASM文件涉及的一些参数 CONTROL_FILES LOG_ARCHIVE_DEST_n LOG_ARCHIVE_DEST STANDBY_ARCHIVE_DEST 查看OMF相关参数的设置 SQL> show parameter db_reco NAME TYPE VALUE ------------------------------------ ----------- db_recovery_file_dest string +RECOVERYDEST db_recovery_file_dest_size big integer 1500M SQL> show parameter db_create NAME TYPE VALUE ------------------------------------ ----------- db_create_file_dest string +DG1 ------------------------------ ------------------------------ 有关OMF请参考:Oralce OMF 功能详解 v$asm_disk(_stat) --查看磁盘及其状态信息 v$asm_diskgroup(_stat) --查看磁盘组及其状态信息 v$asm_operation --查看当前磁盘的操作信息 v$asm_client --返回当前连接的客户端实例信息 v$asm_file --返回asm文件的相关信息 v$asm_template --返回asm文件样本的相关信息 v$asm_alias --返回asm文件的别名信息 六、ASM 磁盘的相关视图
因篇幅问题不能全部显示,请点此查看更多更全内容