Oracle11g RAC下ASM 的管理与维护
一, 基本维护 :
注意: 如下除OS以外的命令及过程基本均可以经过ASMCA中的ASM相关操做以及Oracle Enterprise Mananger 来管理 .
1. 查看ASM磁盘及磁盘组 :
--SQL查看有哪些磁盘组 .
[root@rac01 ~]# su - grid
[grid@rac01 ~]$ sqlplus "/as sysasm"
SQL> select group_number , name , state, type from v$asm_diskgroup ;
GROUP_NUMBER NAME STATE TYPE
------------ ------------------------------ ----------- ------
1 OCR_VOTE MOUNTED EXTERN
2 ORADATA MOUNTED EXTERN
3 ORAFLASH MOUNTED EXTERN
经过一些字段total_mb及free_mb 等能够看出磁盘组的空间使用状况.
-- 经过SQL语句查看ASM磁盘
SQL> set line 2000
SQL> select group_number, name,failgroup, path from v$asm_disk;
GROUP_NUMBER NAME FAILGROUP PATH
------------ ---------- -------------- ----------------------------------------------------------------
2 ASMDATA01 ASMDATA01 ORCL:ASMDATA01
3 ASMDATA02 ASMDATA02 ORCL:ASMDATA02
1 OCR_VOTE01 OCR_VOTE01 ORCL:OCR_VOTE01
经过group_number能够将磁盘与磁盘组联系起来(一个磁盘组能够对应多个磁盘).
这里能够看到磁盘OCR_VOTE01对应OCR_VOTE磁盘组, 磁盘ASMDATA01对应ORADATA磁盘组, 磁盘ASMDATA02 对应ORAFLASH 磁盘组 (建议名称一致比较好) 。
--经过asmcmd查看磁盘组(每一个磁盘组表现为一个目录) :
[root@rac01 ~]# su - grid
[grid@rac01 ~]$ asmcmd
ASMCMD> ls -al
State Type Rebal Name
MOUNTED EXTERN N OCR_VOTE/
MOUNTED EXTERN N ORADATA/
MOUNTED EXTERN N ORAFLASH/
备注 : 或者 ASMCMD> lsdg
-- 经过OS下oracleasm 命令查看ASM磁盘 .
[root@rac01 bin]# /usr/sbin/oracleasm listdisks
ASMDATA01
ASMDATA02
OCR_VOTE01
2. 认识ASM相关路径 :
经过asmcm 命令能够看到ASM会根据dbca时制定的datafile路径, 在ORADATA磁盘组下面创建一些默认的路径 (通常是 db_name 下ARCHIVELOG/ , CONTROLFILE/,DATAFILE/ , ONLINELOG/ , PARAMETERFILE/ , TEMPFILE/ , 目录都是大写, 其中后面小写的arch是用户本身建的, SYS字段为Y的都是系统自建的, N是用户定义的 )
[root@rac01 bin]# su - grid
[grid@rac01 ~]$ asmcmd
ASMCMD> ls
OCR_VOTE/
ORADATA/
ORAFLASH/
ASMCMD> cd oradata
ASMCMD> ls
RACDB/
ASMCMD> cd racdb
ASMCMD> ls -l
Type Redund Striped Time Sys Name
Y ARCHIVELOG/
Y CONTROLFILE/
Y DATAFILE/
Y ONLINELOG/
Y PARAMETERFILE/
Y TEMPFILE/
N arch/
N control01.ctl => +ORADATA/RACDB/CONTROLFILE/Current.256.739387263
N control02.ctl => +ORADATA/RACDB/CONTROLFILE/Current.257.739387265
N redo01.log => +ORADATA/RACDB/ONLINELOG/group_1.258.739387273
N redo02.log => +ORADATA/RACDB/ONLINELOG/group_2.259.739387281
N redo03.log => +ORADATA/RACDB/ONLINELOG/group_3.266.739393547
N redo04.log => +ORADATA/RACDB/ONLINELOG/group_4.267.739393547
N spfileracdb.ora => +ORADATA/RACDB/PARAMETERFILE/spfile.268.739393555
ASMCMD>
--归档路径ARCHIVELOG :
经过oracle数据库参数文件看到归档路径 :
SQL> show parameter log_archive_dest
log_archive_dest_1 string LOCATION=+ORADATA/RACDB/arch
能够看到归档路径 " +ORADATA/RACDB/arch " , 那么 +ORADATA/RACDB/ARCHIVELOG
下面又是保存的什么文件呢 ?
ASMCMD> pwd
+oradata/racdb/arch -- 查看参数中的归档路径
ASMCMD> ls -l
Type Redund Striped Time Sys Name
N 1_204_739387258.arc =>
+ORADATA/RACDB/ARCHIVELOG/2011_11_28/thread_1_seq_204.478.768441403
N 1_205_739387258.arc =>
+ORADATA/RACDB/ARCHIVELOG/2011_11_29/thread_1_seq_205.481.768443221
N 1_206_739387258.arc =>
+ORADATA/RACDB/ARCHIVELOG/2011_11_29/thread_1_seq_206.482.768443233
N 1_207_739387258.arc =>
+ORADATA/RACDB/ARCHIVELOG/2011_11_29/thread_1_seq_207.483.768443239
用户本身定义的归档格式以及归档路径指向ASM自动创建的目录及文件, 自定义生成的归档至关于快捷方式(或软链接), 实际文件为ASM默认路径的归档文件。
也能够手工为Oracle ASM Filename 生成别名:
ALTER DISKGROUP ORADATA ADD ALIAS
'+oradata/racdb/datafile/test01.dbf'
FOR '+oradata/racdb/datafile/TEST.340.740166807' ;
ASMCMD> pwd
+oradata/racdb/ARCHIVELOG --查看ASM系统本身默认的归档路径
ASMCMD> ls -l
Type Redund Striped Time Sys Name
Y 2011_11_28/
Y 2011_11_29/
Y 2011_11_30/
归档文件是按照天天来进行存储的 , 而且有目录分开 .
ASMCMD> cd 2011_11_29/
ASMCMD> ls -l
Type Redund Striped Time Sys Name
ARCHIVELOG UNPROT COARSE NOV 29 00:00:00 Y thread_1_seq_205.481.768443221
ARCHIVELOG UNPROT COARSE NOV 29 00:00:00 Y thread_1_seq_206.482.768443233
ARCHIVELOG UNPROT COARSE NOV 29 00:00:00 Y thread_1_seq_207.483.768443239
ARCHIVELOG UNPROT COARSE NOV 29 00:00:00 Y thread_1_seq_208.485.768443253
ARCHIVELOG UNPROT COARSE NOV 29 00:00:00 Y thread_1_seq_209.486.768443277
--控制文件路径 CONTROLFILE :
ASMCMD> cd racdb
ASMCMD> ls -l
Type Redund Striped Time Sys Name
N control01.ctl => +ORADATA/RACDB/CONTROLFILE/Current.256.739387263
N control02.ctl => +ORADATA/RACDB/CONTROLFILE/Current.257.739387265
查看初始化参数文件位置, 实际文件也是相似软连接方式 :
SQL> show parameter control
NAME TYPE VALUE
------------------------------------ ----------- ----------------------------
control_files string +ORADATA/racdb/control01.ctl,
+ORADATA/racdb/control02.ctl
如何增长控制文件呢 ? 例子以下:
SQL> alter database mount database;
SQL> alter database backup controlfile to '+ORADATA/racdb/control02.ctl';
SQL> alter database backup controlfile to '+ORADATA/racdb/control03.ctl';
SQL> alter system set control_files='+ORADATA/racdb/control01.ctl','+DATA/racdb/control02.ctl','+DATA/racdb/control03.ctl'
scope=spfile;
SQL> startup mount
--数据文件路径 DATAFILE :
ASMCMD> pwd
+oradata/racdb/datafile
ASMCMD>
ASMCMD> ls -l
Type Redund Striped Time Sys Name
DATAFILE UNPROT COARSE OCT 29 18:00:00 Y BASE_DATA.317.754072293
DATAFILE UNPROT COARSE OCT 29 18:00:00 Y BASE_DATA.318.754072319
DATAFILE UNPROT COARSE OCT 29 18:00:00 Y BASE_DATA.319.754072331
DATAFILE UNPROT COARSE OCT 29 18:00:00 Y BASE_DATA.320.754072345
N BASE_DATA01.DBF => +ORADATA/RACDB/DATAFILE/BASE_DATA.317.754072293
N BASE_DATA02.DBF => +ORADATA/RACDB/DATAFILE/BASE_DATA.318.754072319
N BASE_DATA03.DBF => +ORADATA/RACDB/DATAFILE/BASE_DATA.319.754072331
N BASE_DATA04.DBF => +ORADATA/RACDB/DATAFILE/BASE_DATA.320.754072345
能够看出连接的名称及对应的实体文件名称都出如今 datafile目录下, 固然并非每一个实体文件都有一个对应的连接的文件名称, 例如初始创建数据库的时候指定 +ORADATA 磁盘组后, 数据库会自动创建初始数据文件, 那时候的文件就只有系统生成的, 而没有用户指定的名称(连接名称) , 例如上面例子中的 LOGMNRTS.321.754072935 , SYSTEM.263.754063787 等 .
而在加入datafile或创建表空间时, 若是只是指定 +ORADATA, 而不明确写出路径及文件名称 , 那么就会生成系统自建文件而没有连接名称, 若是文件使用相似' +ORADATA/racdb/datafile/mytbs01.dbf ' , 那么就会生成系统自建文件及对应的连接文件 .
一样能够利用ALTER DISKGROUP XX ADD ALIAS 增长别名.
----------------------------------------------------------------------------
-- 认识文件名
BASE_DATA.317.754072293 是表空间名+文件编号.Incarnation .
+group/dbname/file type/tag.file.incarnation 格式中分别是磁盘组名, file type是Oracle文件类型, tag通常对一个表空间名, file.incarnation 结合在一块儿确保惟一性.
----------------------------------------------------------------------------
测试 : 新增数据文件或表空间
CREATE TABLESPACE MYTBS DATAFILE
'+ORADATA/racdb/datafile/mytbs01.dbf ' SIZE 10M AUTOEXTEND OFF
LOGGING
ONLINE
PERMANENT
EXTENT MANAGEMENT LOCAL UNIFORM. SIZE 5M
BLOCKSIZE 16K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON ;
或者
CREATE TABLESPACE TONYTBS DATAFILE
'+ORADATA' SIZE 10M AUTOEXTEND ON NEXT 5M MAXSIZE 1024M
LOGGING
ONLINE
PERMANENT
EXTENT MANAGEMENT LOCAL UNIFORM. SIZE 5M
BLOCKSIZE 16K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON ;
增长数据文件
ALTER TABLESPACE MYTBS ADD DATAFILE '+ORADATA' SIZE 10M AUTOEXTEND OFF ;
若是设置了初始化参数db_create_file_dest(默认为空),连磁盘组名都不须要写了,例如:
SQL> show parameter db_create_file_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string +ORADATA
SQL> ALTER TABLESPACE MYTBS ADD DATAFILE SIZE 10M AUTOEXTEND OFF ;
tablespace altered.
Tips :
对于现有系统想迁入ASM存储,最简单的方式,莫过于使用RMAN了
3个语句创建完毕后, 查看系统文件:
[root@rac01 ~]# su - grid
[grid@rac01 ~]$
[grid@rac01 ~]$ asmcmd
ASMCMD> ls
OCR_VOTE/
ORADATA/
ORAFLASH/
ASMCMD> cd oradata/racdb
ASMCMD> ls -l
Type Redund Striped Time Sys Name
DATAFILE UNPROT COARSE NOV 30 17:00:00 Y MYTBS.504.768590521
DATAFILE UNPROT COARSE NOV 30 17:00:00 Y MYTBS.505.768590741
DATAFILE UNPROT COARSE NOV 30 17:00:00 Y SYSAUX.261.739387301
DATAFILE UNPROT COARSE NOV 30 17:00:00 Y SYSTEM.260.739387283
DATAFILE UNPROT COARSE NOV 30 17:00:00 Y TEST.340.740166807
DATAFILE UNPROT COARSE NOV 30 17:00:00 Y TEST.341.740166937
DATAFILE UNPROT COARSE NOV 30 17:00:00 Y TONYTBS.506.768590761
DATAFILE UNPROT COARSE NOV 30 17:00:00 Y UNDOTBS1.262.739387315
DATAFILE UNPROT COARSE NOV 30 17:00:00 Y UNDOTBS2.264.739387351
DATAFILE UNPROT COARSE NOV 30 17:00:00 Y USERS.265.739387361
N mytbs01.dbf => +ORADATA/RACDB/DATAFILE/MYTBS.504.768590521
N test01.dbf => +ORADATA/RACDB/DATAFILE/TEST.340.740166807
N test02.dbf => +ORADATA/RACDB/DATAFILE/TEST.341.740166937
咱们能够看到, mytbs01 指定了路径 '+ORADATA/racdb/datafile/mytbs01.dbf' , 因此显示时既有mytbs01.dbf, 也有对应的 MYTBS.504.768590521 , 新加入的 MYTBS表空间文件只是写了 '+ORADATA' , 生成文件为 MYTBS.505.768590741 , 一样创建的TONYTBS也是, 对应文件为 TONYTBS.506.768590761 , 没有连接文件 .
修改数据文件大小 (与文件系统操做类似) :
ALTER DATABASE DATAFILE '+DATA/wsjdell/datafile/users.256.754063811' RESIZE 200M;
对于归档目录及数据文件目录, 还有一个比较关心的问题就是空间问题, 咱们如何来判断磁盘组须要加入新的磁盘或新建磁盘组来知足数据增加呢 ?
ASMCMD> pwd
+oradata/racdb/datafile
ASMCMD> du
Used_MB Mirror_used_MB
2949 2949
ASMCMD> lsdg
State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files
Name
MOUNTED EXTERN N 512 4096 1048576 10236 9840 0 9840 0 N OCR_VOTE/
MOUNTED EXTERN N 512 4096 1048576 10236 465 0 465 0 N ORADATA/
MOUNTED EXTERN N 512 4096 1048576 4094 3999 0 3999 0 N ORAFLASH/
[root@rac01 ~]# su - grid
[grid@rac01 ~]$ sqlplus "/as sysasm"
SQL> select name , total_mb, free_mb,cold_used_mb from v$asm_diskgroup ;
NAME TOTAL_MB FREE_MB COLD_USED_MB
------------------------------ ---------- ---------- ------------
OCR_VOTE 10236 9840 396
ORADATA 10236 465 9771
ORAFLASH 4094 3999 95
能够看到经过asmcmd 及 asm 实例中的 sql 语句查询出来的 free_mb(或Usable_file_MB)大小是一致的 .
表空间的使用状况须要经过数据库SQL或辅助工具(如Toad)来进行查看.
--在线日志文件路径 ONLINELOG
ASMCMD> pwd
+oradata/racdb
ASMCMD> ls -l
Type Redund Striped Time Sys Name
Y ARCHIVELOG/
Y CONTROLFILE/
Y DATAFILE/
Y ONLINELOG/
Y PARAMETERFILE/
Y TEMPFILE/
N arch/
N control01.ctl => +ORADATA/RACDB/CONTROLFILE/Current.256.739387263
N control02.ctl => +ORADATA/RACDB/CONTROLFILE/Current.257.739387265
N redo01.log => +ORADATA/RACDB/ONLINELOG/group_1.258.739387273
N redo02.log => +ORADATA/RACDB/ONLINELOG/group_2.259.739387281
N redo03.log => +ORADATA/RACDB/ONLINELOG/group_3.266.739393547
N redo04.log => +ORADATA/RACDB/ONLINELOG/group_4.267.739393547
N spfileracdb.ora => +ORADATA/RACDB/PARAMETERFILE/spfile.268.739393555
ASMCMD> cd onlinelog
ASMCMD> ls -l
Type Redund Striped Time Sys Name
ONLINELOG UNPROT COARSE NOV 30 17:00:00 Y group_1.258.739387273
ONLINELOG UNPROT COARSE NOV 30 17:00:00 Y group_2.259.739387281
ONLINELOG UNPROT COARSE NOV 30 17:00:00 Y group_3.266.739393547
ONLINELOG UNPROT COARSE NOV 30 17:00:00 Y group_4.267.739393547
和其余关键文件同样, 在建库的时候手工指定了目录 +oradata/racdb , 因此毕竟
好辨认的名称 redo01.log, redo02.log 等都以连接名称方式存在 .
Redo logfile的冗余设置能够设置在不一样的磁盘组上, 好比 ORADATA和ORAFLASH .
加入冗余组的方式和文件系统下同样(惟一的区别是不能在file上加括号, 若是只加入一个member的话 ) .
alter database add logfile member '+ORAFLASH' to group 1 ;
alter database add logfile member '+ORAFLASH' to group 2 ;
alter database add logfile member '+ORAFLASH' to group 3 ;
alter database add logfile member '+ORAFLASH' to group 4 ;
加入后查询 v$logfile 能够看到每组2个成员 .
ASMCMD> cd +oraflash
ASMCMD> ls
RACDB/
ASMCMD> cd racdb
ASMCMD> ls
ONLINELOG/
ASMCMD> ls -l
Type Redund Striped Time Sys Name
ONLINELOG UNPROT COARSE NOV 30 20:00:00 Y group_1.256.768602255
ONLINELOG UNPROT COARSE NOV 30 21:00:00 Y group_2.257.768603599
ONLINELOG UNPROT COARSE NOV 30 21:00:00 Y group_3.258.768603683
ONLINELOG UNPROT COARSE NOV 30 21:00:00 Y group_4.259.768603705
加入一个redo log group .
alter database add logfile group 5 ('+ORADATA' , '+ORAFLASH') size 50M ;
SQL> select member from v$logfile;
MEMBER
--------------------
+ORADATA/racdb/redo01.log
+ORADATA/racdb/redo02.log
+ORADATA/racdb/redo03.log
+ORADATA/racdb/redo04.log
+ORAFLASH/racdb/onlinelog/group_1.256.768602255
+ORAFLASH/racdb/onlinelog/group_2.257.768603599
+ORAFLASH/racdb/onlinelog/group_3.258.768603683
+ORAFLASH/racdb/onlinelog/group_4.259.768603705
+ORADATA/racdb/onlinelog/group_5.508.768604159
+ORAFLASH/racdb/onlinelog/group_5.260.768604161
10 rows selected.
SQL>
--参数文件路径 PARAMETERFILE (DB参数文件, 非ASM实例参数文件)
ASMCMD> pwd
+oradata/racdb/parameterfile
ASMCMD> ls -l
Type Redund Striped Time Sys Name
PARAMETERFILE UNPROT COARSE NOV 30 17:00:00 Y spfile.268.739393555
ASMCMD>
--临时文件路径 TEMPFILE
ASMCMD> cd tempfile
ASMCMD> ls -l
Type Redund Striped Time Sys Name
TEMPFILE UNPROT COARSE NOV 30 17:00:00 Y TEMP.263.739387321
3. 扩充磁盘组大小
ASMCMD> lsdg
State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files
Name
MOUNTED EXTERN N 512 4096 1048576 10236 9840 0 9840 0 N OCR_VOTE/
MOUNTED EXTERN N 512 4096 1048576 10236 414 0 414 0 N ORADATA/
MOUNTED EXTERN N 512 4096 1048576 4094 3737 0 3737 0 N ORAFLASH/
经过lsdg或v$asm_diskgroup视图咱们发现磁盘组空间可能不够了, 那么咱们是新加入一个磁盘组呢, 仍是在原来磁盘组基础上加入新的磁盘呢 ?
为了更好的获得I/O性能 , 通常采用在磁盘组中加入新的磁盘 . ASM磁盘组支持动态扩展,咱们能够向现有的磁盘组动态加入新的磁盘,新磁盘加入后,Oracle经过后台RBAL进行Rebalance,将当前的数据均衡到新增长的磁盘上。Drop磁盘亦会Rebalance。
asm_power_limit 参数用于控制Rebalance的速度,取值1~11,power表示启动的rebalance的进程RBAL的个数数字越大,平衡速度越快,默认值是1。可是该数字越大,可能由于Rebalance而影响性能, 通常为了平衡, 设置为 3~6之间。
加入新磁盘后, 假设为 /dev/sde, /dev/sdf , fdisk 划分分区为 /dev/sde1, /dev/sdf1 .
[grid@rac01 ~]$ sqlplus "/as sysasm"
SQL*Plus: Release 11.2.0.1.0 Production on Wed Nov 30 23:04:08 2011
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Real Application Clusters and Automatic Storage Management options
SQL> show parameter asm_power_limit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
asm_power_limit integer 1
SQL> alter system set asm_power_limit=5 ; -- 修改power值 .
System altered.
或者使用
ALTER DISKGROUP diskgroupname REBALANCE POWER 5 ;
-- 查看已有的磁盘 .
SQL> select group_number, name from v$asm_disk order by 1;
GROUP_NUMBER NAME
------------ ------------------------------
0
1 OCR_VOTE01
2 ASMDATA01
3 ASMDATA02
-- 查看已有的磁盘组 .
SQL> select group_number, name from v$asm_diskgroup order by 1 ;
GROUP_NUMBER NAME
------------ ------------------------------
1 OCR_VOTE
2 ORADATA
3 ORAFLASH
建立新磁盘:
[root@rac01 ~]# /usr/sbin/oracleasm createdisk ASMDATA03 /dev/sde1
Writing disk header: done
Instantiating disk: done
[root@rac01 ~]# /usr/sbin/oracleasm listdisks
ASMDATA01
ASMDATA02
ASMDATA03
OCR_VOTE01
其余节点上:
[root@rac02 ~]# /usr/sbin/oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...
[root@rac02 ~]# /usr/sbin/oracleasm listdisks
ASMDATA01
ASMDATA02
ASMDATA03
OCR_VOTE01
新磁盘ASMDATA03 须要加入到 ORADATA 磁盘组中:
[grid@rac01 ~]$ sqlplus "/as sysasm"
SQL> ALTER DISKGROUP ORADATA ADD DISK 'ORCL:ASMDATA03' ;
Diskgroup altered .
或者( 须要在初始参数指定 ASM_DISKSTRING = '/dev/*' )
SQL>ALTER DISKGROUP ORADATA ADD DISK '/dev/sde1' name ASMDATA03 ;
速度仍是很是快的(多是没有多少数据须要在各磁盘间转移), 你们能够找一些大的测试库进行不一样power值时的速度及性能测试 . 注意完毕后将asm_power_limit 值修改成默认的 1 .
SQL> alter system set asm_power_limit=1 ;
System altered.
----------------------------------------------------------------------------------------------------------------
注意, 若是扩容的磁盘组是Normal Redundant 的, 那么还须要failure group.
修改及新增磁盘组相关的语句相似 (须要设置初始参数ASM_DISKSTRING='/dev/*'):
具体参考:
http://docs.oracle.com/cd/E11882_01/server.112/e18951/asmdiskgrps.htm#CHDHHABI
一个磁盘组成failgroup (Normal):
ALTER DISKGROUP dgroup1 NORMAL REDUNDANCY
FAILGROUP fg1 DISK '/dev/sde1' NAME ASMDATA05
FAILGROUP fg2 DISK '/dev/sdf1' NAME ASMDATA06 ;
一个磁盘组成failgroup (High):
create diskgroup data2 high redundancy
failgroup fg1 disk '/dev/raw/raw3' name d2a
failgroup fg2 disk '/dev/raw/raw4' name d2b
failgroup fg3 disk '/dev/raw/raw5' name d2c;
多个磁盘组成failgroup (Normal):
CREATE DISKGROUP dgroup1 NORMAL REDUNDANCY
FAILGROUP controller1 DISK
'/dev/diska1',
'/dev/diska2',
'/dev/diska3',
'/dev/diska4'
FAILGROUP controller2 DISK
'/dev/diskb1',
'/dev/diskb2',
'/dev/diskb3',
'/dev/diskb4';
语法:
CREATE DISKGROUP diskgroup_name
[ { HIGH | NORMAL | EXTERNAL } REDUNDANCY ]
[ FAILGROUP failgroup_name ]
DISK [ NAME disk_name ] [ SIZE size_clause ] [ FORCE | NOFORCE ] ...;
-------------------------------------------------------------------------
能够经过v$asm_operation视图来查看正在进行的操做 .
--------------------------------------------------------------------------
这里有几点要注意:
(1), 首先 sqlplus登入须要 sysasm角色, 由于sysdba只能查看, 不能修改.
(2), add disk 后接的磁盘信息为 'ORCL:XXX' , XXX是listdisks看到的ASM磁盘label .
若是只是 add disk 'XXX' 会报错.
(3), 一样 add disk 后面直接写 '/dev/sde1' 也是不行的, 会报权限错误.
--------------------------------------------------------------------------
经过asmcmd 查看磁盘组空间扩展状况 :
[root@rac02 ~]# su - grid
[grid@rac02 ~]$
[grid@rac02 ~]$ asmcmd
ASMCMD> lsdg
State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files
Name
MOUNTED EXTERN N 512 4096 1048576 10236 9840 0 9840 0 N OCR_VOTE/
MOUNTED EXTERN Y 512 4096 1048576 30709 20694 0 20694 0 N ORADATA/
MOUNTED EXTERN N 512 4096 1048576 4094 3737 0 3737 0 N ORAFLASH/
ASMCMD>
能够看到ORADATA 磁盘组的 Total_MB变成了30G (30709M), 显然是
成功加入了20G 的 /dev/sde1 .
删除磁盘组中的磁盘(一样也须要设置power值来使RBAL速度加快) :
SQL> ALTER DISKGROUP ORADATA DROP DISK 'ASMDATA03' ;
Diskgroup altered.
若是执行后马上查看的话, 可能ORADATA磁盘组大小不会变, 须要观察v$asm_operation视图来查看正在进行的操做, 完毕后才会变化, 执行drop命令后不等待和等待3分钟后查看的结果以下:
ASMCMD> lsdg -- 立刻查看(大小没有变化)
State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files
Name
MOUNTED EXTERN N 512 4096 1048576 10236 9840 0 9840 0 N OCR_VOTE/
MOUNTED EXTERN Y 512 4096 1048576 30709 20694 0 20694 0 N ORADATA/
MOUNTED EXTERN N 512 4096 1048576 4094 3737 0 3737 0 N ORAFLASH/
ASMCMD>
ASMCMD> lsdg -- 等待3分钟后查看 (固然数据量大的话等待时间更久)
State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files
Name
MOUNTED EXTERN N 512 4096 1048576 10236 9840 0 9840 0 N OCR_VOTE/
MOUNTED EXTERN N 512 4096 1048576 10236 223 0 223 0 N ORADATA/
MOUNTED EXTERN N 512 4096 1048576 4094 3737 0 3737 0 N ORAFLASH/
能够看到 ORADATA 的total_mb 又变回 10G了 .
如但愿ALTER DISKGROUP语句完成全部工做才返回用户控制权的话,可在执行时附加REBALANCE WAIT子句,这样该语句就会等待自动平衡的操做,直接全部操做完成才返回结果,固然在等待期间,若是你改主意了不肯意继续等待,CTRL+C中断便可得到控制权,此时平衡的操做不受影响,会在后台继续进行。
ASMCMD> lsdsk -- ASMDATA03 磁盘消失.
Path
ORCL:ASMDATA01
ORCL:ASMDATA02
ORCL:OCR_VOTE01
注意 DROP DISK 只是将ASMDATA03 从磁盘组中删除 :
[root@rac02 ~]# /usr/sbin/oracleasm listdisks
ASMDATA01
ASMDATA02
ASMDATA03
OCR_VOTE01
--------------------------------------------------------------
备注:
(1), 也能够只对某个diskgroup设置rebalance power, 好比:
alter diskgroup ORADATA rebalance power 8 ;
(2), 或者在命令中设置
alter diskgroup ORADATA add disk 'ORCL:ASMDATA03' rebalance power 8;
alter diskgroup ORADATA drop disk 'ASMDATA03' rebalance power 8;
--------------------------------------------------------------
须要注意的是, add 及 drop以后都须要等待一些时间再作针对此磁盘或磁盘组的动做, 不然可能报错, 或者观察v$asm_operation 来查看事务.
以下:
SQL> select * from v$asm_operation ;
GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE
------------ ----- ---- ---------- ---------- ---------- ---------- ----------
EST_MINUTES ERROR_CODE
----------- --------------------------------------------
2 REBAL RUN 8 8 173 6680 741
隔一段时间再次查看(直到相关事务今后视图消失) :
SQL> select * from v$asm_operation ;
no rows selected
因为前面提到的ASM自动平衡的特性,上述语句返回后并不表明磁盘已经被删除,此时后台可能因为正忙碌地执行着IO重平衡的工做,所以若是在这个时候,DBA突然意识到操做失误,其实磁盘并不须要被删除,那也能够立刻经过alter diskgroup dgname undrop disks语句来取消删除的操做,例如:
SQL> alter diskgroup ORADATA undrop disks;
Diskgroup altered.
只要删除操做尚未真正完成,任务就会被取消,不然的话,上述语句也挽回不了什么了,若是但愿挽回,那DBA只能再经过ADD语句将该磁盘从新加入到磁盘组了。
4. 增长新的磁盘组
-- 查看已有的磁盘 .
SQL> select group_number, name from v$asm_disk order by 1;
GROUP_NUMBER NAME
------------ ------------------------------
1 OCR_VOTE01
2 ASMDATA01
2 ASMDATA03
3 ASMDATA02
-- 查看已有的磁盘组 .
SQL> select group_number, name from v$asm_diskgroup order by 1 ;
GROUP_NUMBER NAME
------------ ------------------------------
1 OCR_VOTE
2 ORADATA
3 ORAFLASH
建立新磁盘 (/dev/sdf1):
[root@rac01 ~]# /usr/sbin/oracleasm createdisk ASMDATA04 /dev/sdf1
Writing disk header: done
Instantiating disk: done
[root@rac01 ~]# /usr/sbin/oracleasm listdisks
ASMDATA01
ASMDATA02
ASMDATA03
ASMDATA04
OCR_VOTE01
其余节点上:
[root@rac02 ~]# /usr/sbin/oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...
Instantiating disk "ASMDATA04"
[root@rac02 ~]# /usr/sbin/oracleasm listdisks
ASMDATA01
ASMDATA02
ASMDATA03
ASMDATA04
OCR_VOTE01
开始创建磁盘组(这里是external模式, 具体语法参考文档) :
在节点1 上创建新的磁盘组:
SQL> CREATE DISKGROUP ORAINDX EXTERNAL REDUNDANCY
DISK 'ORCL:ASMDATA04' ;
SQL> select group_number, name from v$asm_diskgroup ;
GROUP_NUMBER NAME
------------ ------------------------------
1 OCR_VOTE
2 ORADATA
3 ORAFLASH
4 ORAINDX
ASMCMD> lsdg
State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files
Name
MOUNTED EXTERN N 512 4096 1048576 10236 9840 0 9840 0 N OCR_VOTE/
MOUNTED EXTERN N 512 4096 1048576 30709 20694 0 20694 0 N ORADATA/
MOUNTED EXTERN N 512 4096 1048576 4094 3737 0 3737 0 N ORAFLASH/
MOUNTED EXTERN N 512 4096 1048576 10236 10186 0 10186 0 N ORAINDX/
能够看到在节点1上都生效了. 可是其余节点没有生效(lsdg, lsdsk都看不到),
须要手工挂载新磁盘组 .
SQL> ALTER DISKGROUP ORAINDX MOUNT ;
Diskgroup altered.
在其余节点上查看便可以看到了 :
SQL> select name from v$asm_diskgroup;
SQL> select name from v$asm_disk;
ASMCMD> lsdsk
ASMCMD> lsdg
5 , 删除磁盘组
语法:drop diskgroup gpname, 若是删除的diskgroup非空的话,直接执行上述语句会报错,这时候能够经过附加including contents子句,来自动删除该磁盘组中包含的文件。删除磁盘组的操做会自动修改spfile中ASM_DISKGROUPS初始化参数的值(若是使用了SPFILE的话) .
-- Tips :
若是删除的是文件的话,其关联的别名(Alias)也会被自动删除。
SQL> alter diskgroup asmdisk2 drop file '+ASMDISK2/repdb/datafile/temp01.dbf';
Diskgroup altered.
二 , ASM 实例相关
1. ASM 相关的权限及角色
安装Grid Infrastructure时候的经常使用用户及组:
Grid Infrastructure 操做系统用户grid , 主组为oinstall, 辅助组为asmadmin, asmdba, asmoper
Oracle RAC 操做系统用户 oracle , 主组为oinstall , 辅助组为dba, oper , asmdba
11g release2中oracle建议独立地管理Grid Infrastructure和ASM实例 .
OSASM(asmadmin)用户组
若是使用ASM,咱们必须建立osasm(asmadmin)用户组,该OSASM用户组的成员将被赋予
SYSASM权限,以知足组成员管理Oracle Clusterware和 ASM的权限需求。
OSDBA for ASM group(asmdba)用户组
OSDBA(asmdba)用户组的成员将被赋予读写访问ASM文件的权限。GI/CRS拥有者用户和
全部oracle数据库软件的拥有者必须是该组的成员。同时全部OSDBA(dba)用户组的成员也必须是asmdba组的成员。
OSOPER for ASM(asmoper)用户组
asmoper和osoper相似都是额外的可选择建立的用户组,建立该独立的用户组以知足赋予
用户一套受限的ASM实例管理权限(ASM的SYSOPER角色),该权限包括了启动和中止ASM实例,
默认状况下OSASM(asmadmin)组成员将拥有全部SYSOPER的ASM管理权限。
grid用户单独安装集群,好比包括asm实例,监听资源,节点资源等
oracle用户就只安装oracle代码
# groupadd oinstall
# groupadd asmadmin
# groupadd asmdba
# groupadd asmoper
# groupadd dba
# groupadd oper
#useradd -g oinstall -G asmadmin,asmdba,asmoper grid
#useradd -g oinstall -G dba, oper, asmdba oracle
具体表明含义参考 :
http://www.oracledatabase12g.com/archives/oracle-installation-os-user-groups.html
用户组 所属该组的用户 用户组描述
oinstall grid, oracle Oracle Inventory and Software Owner
dba oracle Database Administrator
asmadmin grid Oracle ASM Group
asmdba grid, oracle ASM Database Administrator Group
asmoper grid ASM Operator Group
oper oracle Database Operator
若是对oracle用户没赋予asmdba组的话,则会致使oracle用户认不到diskgroup,
启动对应节点实例失败。
---------------------------------------------------------------------
备注 :
Oracle10g中仍是使用sysdba管理asm实例,Oracle11g中使用一个新角色sysasm, 专用于
管理asm, 至关于针对asm实例的sysdba角色。 在Oracle11g RAC 中以grid用户登入后 , 以
sysdba登入也是能够查看asm实例相关的状态, 可是不能作变动, sysasm 角色链接后才
能够。
---------------------------------------------------------------------
2. ASM 实例
ASM 实例与 ORACLE 数据库实例差很少, 都是由SGA和后台进程组成, 区别在于
oracle实例管理的是数据库,而asm实例只管理ASM磁盘组. 这里grid用户是属于
asmadmin组, 用于管理ASM,
[root@rac01 ~]# su - grid
[grid@rac01 ~]$ id
uid=501(grid) gid=501(oinstall) groups=501(oinstall),504(asmadmin),506(asmdba),507(asmoper)
[grid@rac01 ~]$export ORACLE_SID=+ASM1 (通常不用,由于grid用户下只有一个ASM实例)
[grid@rac01 ~]$ env | grep ORA
ORA_NLS11=/u01/grid/11.2.0/nls/data
ORACLE_SID=+ASM1
ORACLE_BASE=/u01/grid/crs
ORACLE_TERM=vt100
ORACLE_HOME=/u01/grid/11.2.0
[grid@rac01 ~]$ sqlplus / as sysasm
SQL*Plus: Release 11.2.0.1.0 Production on Sat Dec 3 07:13:39 2011
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Real Application Clusters and Automatic Storage Management options
SQL> show parameter instance_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string +ASM1
以grid用户身份, 链接到ASM实例 , 使用sysdba 及 sysasm 角色均可以,
以sysdba登入也是能够查看asm实例相关的状态 , 可是不能作变动,
sysasm 角色链接后才能够 .
A. ASM实例开启及关闭
一样的, ASM 实例也能够 startup nomount / mount / open / force .
nomount : 只是启动实例 ;
mount / open : 启动实例及加载磁盘组, open和mount同样 ;
force : 先执行shutdown abort , 而后再startup ;
测试 :
[grid@rac01 ~]$ sqlplus / as sysasm
SQL> startup nomount
ASM instance started
Total System Global Area 120023424 bytes
Fixed Size 2082208 bytes
Variable Size 102775392 bytes
ASM Cache 25165824 bytes
SQL> select name,state from v$asm_diskgroup;
NAME STATE
------------------------------ -----------
ASMDISK1 DISMOUNTED
ASMDISK2 DISMOUNTED
SQL> select instance_name,status from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
+ASM1 STARTED
而后加载磁盘组,注意,不是alter database:
SQL> alter diskgroup all mount;
Diskgroup altered.
SQL> select name,state from v$asm_diskgroup;
NAME STATE
------------------------------ -----------
ASMDISK1 MOUNTED
ASMDISK2 MOUNTED
关闭ASM实例 : NORMAL/IMMEDIATE/TRANSACTIONAL/ABORT 几个选项
与关闭普通数据库实例同样 :
SQL> shutdown immediate
ASM diskgroups dismounted
ASM instance shutdown
B. ASM 实例的初始化参数
ASM初始化也分spfile及pfile, 操做也相同. 和RDBMS数据库比起来, 仍是有一些差别
参数.
SQL> create pfile='/tmp/asminit.ora' from spfile;
File created.
由于ASM实例在内存占用方面很是小, 基本上100M内存空间就足够了, 内存相关就不提了.
INSTANCE_TYPE : 在ASM中值为ASM , 在数据库实例中是RDBMS .
ASM_POWER_LIMIT :指定磁盘rebalance的程度,有0-11个级别,默认值为1,指定
的级别越高,则rebalance的操做就会越快被完成(固然这也意味着这个时间段内将
占用更多的资源),指定级别较低的话,虽然rebalance操做会耗时更久,但对当前
系统的IO及负载影响会更少,这中间的度须要DBA根据实际状况衡量。另外,这个参
数指定的只是一个默认值,在操做过程当中,便可以动态修改,也能够在语句级命令行
时指定power,覆盖该默认值。
ASM_DISKSTRING :用最简单的话说,就是设置ASM启动时检查的磁盘,该选项能够
同时指定多个值,而且支持通配符。好比说,只检查/dev/dsk/下的设备,能够设置
该参数以下:/dev/dsk/*,默认状况下该参数为空,为空的话,表示ASM将查找系统
中全部ASM拥有读写权限的设备。
ASM_DISKGROUPS : 指定实例启动或alter diskgroup all mount语句时要加载的磁
盘组,若是为空的话,那么实际就仅启动到NOMOUNT状态了。若是是使用SPFILE的话,
该参数通常不须要手动修改,ASM可以自动更新该初始化参数中的值。
[grid@rac01 tmp]$ sqlplus / as sysasm
SQL*Plus: Release 11.2.0.1.0 Production on Tue Nov 29 05:24:38 2011
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Real Application Clusters and Automatic Storage Management options
SQL> show parameter
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
asm_diskgroups string ORADATA, ORAFLASH
asm_diskstring string
asm_power_limit integer 1
......
3. ASM 相关视图
[root@rac01 ~]# su - oracle
[oracle@rac01 ~]$ sqlplus "/as sysdba"
SQL> select TABLE_NAME from dict where table_name like 'V$ASM_%';
TABLE_NAME
------------------------------
V$ASM_ACFSSNAPSHOTS
V$ASM_ACFSVOLUMES
V$ASM_ALIAS -- 记录文件别名
V$ASM_ATTRIBUTE -- 记录ASM磁盘组的属性
V$ASM_CLIENT -- 当前链接的客户端实例信息
V$ASM_DISK -- ASM管理的磁盘及磁盘组信息
V$ASM_DISKGROUP -- ASM磁盘组
V$ASM_DISKGROUP_STAT -- ASM磁盘组状态, 大小
V$ASM_DISK_IOSTAT -- ASM磁盘组I/O状态
V$ASM_DISK_STAT
V$ASM_FILE
TABLE_NAME
------------------------------
V$ASM_FILESYSTEM
V$ASM_OPERATION -- 当前磁盘的操做信息
V$ASM_TEMPLATE
V$ASM_USER
V$ASM_USERGROUP
V$ASM_USERGROUP_MEMBER
V$ASM_VOLUME
V$ASM_VOLUME_STAT
19 rows selected.
4. ASM 体系结构
ASM实例 :
1) RBAL: rebalancer进程,负责规划ASM磁盘组的Reblance活动
2) ABRn: 是RBAL进程的子进程,真正完成Reblance活动
RDBMS实例 :
1) RBAL: 负责打开每一个磁盘组的全部磁盘
2) ASMB: 这个进程做为ASM实例和数据库实例之间的信息通道.这个进程负责与
ASM实例的通讯,它先利用Diskgroup name从CSS得到管理该Diskgroup的ASM实例的
链接串,而后创建到ASM的持久链接,两个实例经过这条链接按期交换信息,同时也
是一种心跳机制.
3)O0nn 01-10:这组进程创建到ASM实例的链接,某些长时间操做好比建立数据文件,
RDBMS会经过这些进程向ASM发送信息
ASM Instance 与RDBMS 的交互
当ASM实例挂载一个磁盘组以后,ASM会把Disk Group Name, ASM Instance Name,
Oracle Home Path等信息注册到CSS(Cluster Sychronization Service), 这些信息会被用
来构造Connect String. 当RDBMS启动过程当中须要访问某个ASM File时, RDBMS会
和CSS联系, 从CSS中获取Connect String,而后发起一个到ASM实例的链接, 这条
ASM和RDBMS实例之间的初始链接叫做Umbilicu(脐带), 只要RDBMS打开ASM File,
这个链接就会保持活动. 直到全部ASM File都被RDBMS实例关闭以后,这个链接才
会关闭.
对ASM的理解, ASM其实就是LVM披上了Oracle的马甲, Disk 对应PV, Diskgroup 对应VG,
5. ASM 高效存储技术
自动存储管理直接在Oracle 内核提供了文件系统和卷管理器的垂直整合,
从而带来了存储区域网系统提供的“虚拟化”类型的优势(易于管理、更高的可用性),
并专门用于Oracle 数据库文件。ASM 提供了配置数据库的快捷方法,以达到最佳性能
和资源利用率。它经过Oracle 内核自动管理数据库文件和这些文件的放置,再也不须要
第三方文件系统和卷管理器来管理Oracle 文件。ASM 免去了耗时的手动I/O 性能与调
整任务,大大节省了DBA 的时间。
ASM的镜像(mirroring)与条带化(striping):ASM 将文件分红1MB 大小的区(extent, AU),
并将全部文件的区平均分布到磁盘组的全部磁盘中。ASM 不使用数学函数跟踪每一个区的
放置,而使用指针记录区的位置。这样,ASM 就能够在磁盘组配置变化时移动某个文
件的某些区,而没必要按照公式并根据磁盘数来移动全部的区。对于须要低延迟的文件
(例如日志文件),ASM 提供了细粒度(128k) 分段,以便由多个磁盘并行分隔并处理较
大的I/O。ASM 在全部可用的资源中分布I/O 负载,在免除手动I/O 调节须要(经过分
散数据库文件来避免热点)的同时优化性能。
ASM的镜像比操做系统的磁盘镜像更为灵活,由于ASM可基于文件设置冗余级别,
也就是说在同一磁盘组中的两个文件能够一个是镜像的, 而另外一个不作镜像。ASM镜
像发生在区级。
ASM的动态存储配置:ASM使得在线调整存储配置成为可能,即它帮助DBA 管理
动态数据库环境,让DBA 可以在扩大或缩小数据库规模的状况下,无需关闭数据库
以调整存储配置。而在往磁盘组中增长磁盘或从磁盘组中删除磁盘后,ASM将自动
从新平衡――均衡地在磁盘组中的全部磁盘上从新分布文件数据。
三, ASM 磁盘冗余及故障处理
ASM的磁盘冗余策略能够分红三类:外部冗余、标准冗余和高度冗余,
其中外部冗余不须要failure 磁盘组, 标准和高度冗余必需要有failure磁盘组,
好比说对于标准冗余(Normal Redundancy),ASM要求该磁盘组至少要拥有
两个failure磁盘组,即提供双倍镜像保护,对于同一份数据(ASM中镜像单位
不是磁盘,也不是块,而是一种AU的单位,该单位大小默认是1M)将有主从两
份镜像,而且ASM经过算法来自动确保主、从镜像不会存在于同一份failure磁
盘组,这样就保障了就算整个failure磁盘组都损坏,数据也不会丢失。至于高
度冗余(High Redundancy)就更安全了,它至少须要三个failure磁盘组,也就
是一份AU有一主多从的镜像,理论上将更加安全。
若是磁盘发生损坏,那么损坏的磁盘默认自动offline并被drop掉,不过该
磁盘所在的磁盘组仍将保持MOUNT状态,若是该盘有镜像的话,那么应用不会有
影响,镜像盘将自动实现接管 (只要不是全部failure磁盘组都损坏掉),不然的话,
该磁盘组将自动DISMOUNT。 好比,某标准冗余的failure组有6个盘(对应6个裸设
备),假如说此时坏了一块盘,不要紧,操做继续,坏了那块会被自动dropped,剩
下的5块盘仍然可以负担起正常的读写操做。
ASM 扩展性:
最多支持63个磁盘组;
最多支持10000个磁盘;
最大支持4pb/磁盘;
最大支持40 exabyte/ASM存储;
最大支持1百W个文件/磁盘组;
外部冗余时单个文件最大35tb,标准冗余时单个文件最大5.8tb,高冗余度时单个
文件最大3.9tb。
加载及卸载磁盘组
UMOUNT磁盘组的话务必慎重操做,要确保UNMOUNT的磁盘组中保存的
文件对应的数据库当前未启动,并且该操做也会直接致使数据库SHUTDOWN。
只有mount的磁盘组才能被数据库使用并执行add/drop操做, ASM中的磁盘组默
认会在ASM实例启动时自动加载 .
SQL> select group_number,name,state,total_mb,free_mb from v$asm_diskgroup;
GROUP_NUMBER NAME STATE TOTAL_MB FREE_MB
------------ ------------------------------ ----------- ---------- ----------
1 ASMDATA1 MOUNTED 20472 18667
2 ASMDATA2 MOUNTED 16378 14621
将ASMDATA2磁盘组UNMOUNT:
SQL> alter diskgroup ASMDATA2 dismount;
Diskgroup altered.
SQL> select group_number,name,state from v$asm_diskgroup;
GROUP_NUMBER NAME STATE
------------ ------------------------------ -----------
1 ASMDATA1 MOUNTED
0 ASMDATA2 DISMOUNTED
SQL> alter diskgroup ASMDATA2 mount; -- 再挂载.
Diskgroup altered.
四 , ASM 在Linux下的相关命令ORACLEASM , ASMCMD, ASMCA
1. ORACLEASM命令
安装asm lib后咱们能够经过man 来查看相关命令:
[grid@rac01 tmp]$ man oracleasm
使用 ASMLib 建立 ASM Disks , 语法以下:
# /usr/sbin/oracleasm createdisk disk_name device_partition_name
其中 disk_name 是你为 ASM Disk 选择的一个名字,名字只能包含数字字母及下划线,好比OCR01 , DATA01 等. device_partition_name 标示为 ASM 的系统磁盘分区,如
/dev/sdb1 , /dev/sdc1 等
若是你发现设置错误或须要 unmark这个磁盘,能够运行以下命令:
# /usr/sbin/oracleasm deletedisk disk_name
设置共享磁盘。
# /usr/sbin/oracleasm createdisk OCR_VOTE01 /dev/sdb1
# /usr/sbin/oracleasm createdisk ASM_DATA01 /dev/sdc1
使用 listdisks 命令确认他们的可用性。
[root@rac001 ~]# /usr/sbin/oracleasm listdisks
ASM_DATA01
ASM_DATA02
ASM_FRA
OCR_VOTE01
在全部其余节点上以 root 用户身份,使用 scandisks 命令扫描已经建立的 ASM磁盘,也就是说,咱们只须要在节点 1 上建立 ASM 磁盘,其余节点不须要。
[root@rac002 ~]# /usr/sbin/oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...
Instantiating disk "OCR_VOTE01"
Instantiating disk "ASM_DATA01"
Instantiating disk "ASM_DATA02"
Instantiating disk "ASM_FRA"
最后在其余节点经过 listdisks 检查 ASM 磁盘的可用性。
[root@rac002 ~]# /usr/sbin/oracleasm listdisks
ASM_DATA01
ASM_DATA02
ASM_FRA
OCR_VOTE01
2 . ASMCMD 命令
[root@rac01 ~]# su - grid
[grid@rac01 ~]$ id
uid=501(grid) gid=501(oinstall) groups=501(oinstall),504(asmadmin),506(asmdba),507(asmoper)
[grid@rac01 ~]$ asmcmd
ASMCMD>
若是 asm -p 进入的话, 就会带路径 (path)
[grid@rac01 ~]$ asmcmd -p
ASMCMD [+] > cd oradata
ASMCMD [+oradata] >
获取帮助 help [command] :
ASMCMD [+oradata] > help du
du [-H] [dir]
Display total space used for files located recursively under [dir],
similar to "du -s" under UNIX; default is the current directory. Two
values are returned, both in units of megabytes. The first value does
not take into account mirroring of the diskgroup while the second does.
For instance, if a file occupies 100 MB of space, then it actually
takes up 200 MB of space on a normal redundancy diskgroup and 300 MB
of space on a high redundancy diskgroup.
[dir] can also contain wildcards.
The -H flag suppresses the column headers from the output.
ASMCMD [+oradata] >
3 . ASMCA 命令
运行ASMCA建立磁盘组。
以grid用户登入开始ASMCA配置磁盘组,由于是图形界面,咱们使用grid用户的vnc session ( 若是是root的vnc进入到su 到grid会报错 ) .
[grid@rac001 bin]$ pwd
/u01/grid/11.2.0/bin
[grid@rac001 bin]$ ./asmca
图形界面显示到Disk Groups 。咱们能够看到先前配置的OCR_VOTE已经在列。点击下面的create 建立datafile及flash recovery area的ASM磁盘组。
磁盘组名称ORADATA, 冗余部分选择External, 点击磁盘为ORCL:ASMDATA01,点击OK.继续create
磁盘组名称ORAFLASH, 冗余部分选择External, 磁盘为ORCL:ASMDATA02,点击OK.
所有OK后点击QUIT退出。
4 . ASMLib 及其余经常使用命令
ORCL关键字说明:Linux ASMLib 的发现字符串
ASMLib 使用发现字符串来肯定 ASM 正在请求哪些磁盘。通常的 Linux ASMLib 使用glob 字符串。字符串必须以 "ORCL:" 为前缀。磁盘经过名称来指定。能够经过发现字符串 "ORCL:VOL1" 在 ASM 中,发现以名称 "VOL1" 建立的磁盘。相似地,能够用发现字符串 "ORCL:VOL*" 来查询全部以字符串 "VOL" 开始的磁盘。
不能在发现字符串中用路径名称来发现磁盘。若是缺乏前缀,那么通常的 Linux ASMLib将彻底忽略发现字符串,认为它适用于一个不一样的 ASMLib。惟一的例外是空字符串 (""),
它被认为是一个全通配符。这与发现字符串 "ORCL:*" 彻底等价。
其余经常使用命令 :
SQL>create diskgroup dg2 external redundancy disk 'ORCL:VOL3';
SQL>drop diskgroup dg2 including contents; 默认是能够删除empty的diskgroup , 若是磁盘组不是空的, 不接including contents 会报错 . 指定 including contents 即删除磁盘组中全部文件,即便不是为空 .
SQL>alter diskgroup dg1 add disk 'ORCL:VOL3';
Diskgroup altered.
SQL>alter diskgroup dg1 rebalance power 8 ;
Diskgroup altered.
SQL>alter diskgroup dg1 check all ; -- 检查ASM磁盘组内部consistency
Diskgroup altered.
SQL>alter diskgroup dg1 check all repair; -- 检查并通知ASM修复错误
Diskgroup altered.
5 . ASM与文件系统之间的迁移及文件传输/拷贝
A, 文件传输或拷贝
10g 下ASM下的文件和OS文件系统是不能互相拷贝的 。
11g 下从ASM到文件系统或文件系统到ASM 都很方便 。
ASMCMD> cp spfileracdb.ora /tmp
copying +oradata/racdb/spfileracdb.ora -> /tmp/spfileracdb.ora
[root@rac01 tmp]# ls -al spfileracdb.ora
-rw-r----- 1 grid oinstall 4096 Dec 4 06:05 spfileracdb.ora
10g 下若是须要实现文件拷贝有如下方式 :
具体参考 http://space.itpub.net/35489/viewspace-712638
(1). http://www.oracle.com/global/il/ ... ro_asm_access1.html
ASM Access Through FTP and HTML Using XDB Configuration
(2). rman
(3). dbms_file_transfer
B. 利用RMAN进行迁移 .
参考 : http://www.linuxidc.com/Linux/2011-05/36675.htm
来自 “ ITPUB博客 ” ,连接:http://blog.itpub.net/31397003/viewspace-2142173/,如需转载,请注明出处,不然将追究法律责任。html