1、asm_diskstring 参数
该参数用来指定asm磁盘的搜索模式,简单的理解就是控制ASM检索磁盘的规则
指定asm_diskstring的值为’ORCL:ASM*’
SQL> alter system set asm_diskstring='ORCL:ASM*' scope=both;
System altered.
SQL> show parameter asm_diskstring
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
asm_diskstring string ORCL:ASM*
SQL> col NAME for a10
SQL> col PATH for a15
SQL> select GROUP_NUMBER,DISK_NUMBER,NAME,PATH,TOTAL_MB,FREE_MB from v$asm_disk;
GROUP_NUMBER DISK_NUMBER NAME PATH TOTAL_MB FREE_MB
------------ ----------- ---------- --------------- ---------- ----------
1 0 ASM_DISK_1 ORCL:ASM_DISK_1 8189 7372
1 1 ASM_DISK_2 ORCL:ASM_DISK_2 8189 7373
1 2 ASM_DISK_3 ORCL:ASM_DISK_3 8189 7370
/*需要注意的是,在访问v$asm_disk视图时,会检索所以磁盘,而在访问v$asm_disk_stat视图时不需要检索磁盘,在磁盘没有更新的情况下,后者更加“廉价”*/
asm_diskstring的值设置的必须是ASM组中磁盘当前实例所能检索到的值,其他值将无法设置
SQL> alter system set asm_diskstring='ORCL:ASM_abc' scope=both;
alter system set asm_diskstring='ORCL:ASM_abc' scope=both
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-15014: location 'ORCL:ASM_DISK_1' is not in the discovery set
2、磁盘管理
添加删除硬盘
首先介绍一下几个概念
a)、ASM提供了3种冗余方法:
external redundancy 表示Oracle不帮你管理镜像,功能由外部存储系统实现。
normal redundancy (默认方式)表示Oracle提供2路镜像来保护数据。
high redundancy 表示Oracle提供3路镜像来保护数据。
b)、ASM failure group:
Oracle通过failure group来提供数据的高可用性。ASM使用的镜像算法并不是镜像整个disk,而是作extent级的镜像。所以很明显如果为各个failure group使用不同容量的disk是不明智的,因为这样在Oracle分配下一个extent的时候可能就会出现问题。在normal redundancy模式下,ASM环境中每分配一个extent都会有一个primary copy和一个second copy,ASM的算法保证了second copy和primary copy一定是在不同的failure group中,这就是failure group的意义。通过这个算法,ASM保证了即使一个failure group中的所有disk都损坏了,数据也是毫发无伤的。
Oracle在分配extent的时候,所有failure group中的这个将拥有相同数据的extent称为一个extent set,当Oracle将数据写入文件的时候,primary copy可能在任何一个failure group中,而second copy则在另外的failure group中,当Oracle读取数据的时候,除非是primary copy不可用,否则将优先从primary copy中读取数据,通过这种写入无序,读取有序的算法,Oracle保证了数据读取尽量分布在多个disk中。
以下测试仅为了测试fileglure group,不是正常删除硬盘的方式
现在我的环境中group1中有两块硬盘,冗余方式是默认的normal redundancy,数据库orcle安装在该disk_grup中
SQL> col FAILGROUP for a15
SQL> col name for a10
SQL> col path for a15
SQL> select GROUP_NUMBER,DISK_NUMBER,FAILGROUP,FREE_MB,NAME,PATH from v$asm_disk;
GROUP_NUMBER DISK_NUMBER FAILGROUP FREE_MB NAME PATH
------------ ----------- --------------- ---------- ---------- ---------------
1 0 ASM_DISK_1 7001 ASM_DISK_1 ORCL:ASM_DISK_1
1 1 ASM_DISK_2 7001 ASM_DISK_2 ORCL:ASM_DISK_2
为了模拟损坏,我直接在vmware中将第二块硬盘删除,两块8g硬盘现在仅剩一块
正常启动系统,启动css服务后,scandisk后asm会自动将损坏的硬盘清理掉
[oracle@orclasm ~]$ oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...
[oracle@orclasm ~]$ oracleasm listdisks
ASM_DISK_1
此时对数据库无影响,也就是说两块filedisk中删除任何块,数据库均可正常运行
[oracle@orclasm ~]$ export ORACLE_SID=orcl
[oracle@orclasm ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Aug 1 10:42:51 2014
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1218316 bytes
Variable Size 79694068 bytes
Database Buffers 83886080 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
添加硬盘
添加两块新的硬盘到系统,方便测试
[root@orclasm ~]# fdisk /dev/sdc
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1044, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1044, default 1044):
Using default value 1044
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@orclasm ~]# fdisk /dev/sdd
[root@orclasm ~]# oracleasm createdisk asm_disk_2 /dev/sdc1
Writing disk header: done
Instantiating disk: done
[root@orclasm ~]# oracleasm createdisk asm_disk_3 /dev/sdd1
Writing disk header: done
Instantiating disk: done
[root@orclasm ~]# oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...
[root@orclasm ~]# oracleasm listdisks
ASM_DISK_1
ASM_DISK_2
ASM_DISK_3
[oracle@orclasm ~]$ export ORACLE_SID=+ASM
[oracle@orclasm ~]$ sqlplus / as sysdba
指定failgroup添加硬盘
SQL> alter diskgroup data add failgroup asm_disk_f_2 disk 'ORCL:ASM_DISK_2' name asm_disk_2;
Diskgroup altered.
在不指定failgroup的情况先,默认的disk name将是failgroup
SQL> alter diskgroup data add disk 'ORCL:ASM_DISK_3' name asm_disk_3;
Diskgroup altered
当加入一块磁盘时,ASM从磁盘组内已有的各块磁盘上读出部分AU写入到新加入的磁盘中。以实现各盘数据量均衡。
SQL> select count(*) from v$asm_operation;
COUNT(*)
----------
1
SQL> select GROUP_NUMBER,DISK_NUMBER,NAME,PATH,FREE_MB,TOTAL_MB from v$asm_disk;
GROUP_NUMBER DISK_NUMBER NAME PATH FREE_MB TOTAL_MB
------------ ----------- ------------ --------------- ---------- ----------
1 0 ASM_DISK_1 ORCL:ASM_DISK_1 7371 8189
1 1 ASM_DISK_2 ORCL:ASM_DISK_2 7372 8189
1 2 ASM_DISK_3 ORCL:ASM_DISK_3 7372 8189
删除硬盘
当删除一块磁盘时,ASM从即将删除的磁盘上读出所有的AU,然后平均写入到组内其它的磁盘上。以实现各盘数据量均衡。
SQL> alter diskgroup data drop disk asm_disk_3;
Diskgroup altered.
此时ASM会自动将被删除的硬盘中的数据写入其他两组磁盘中
SQL> select count(*) from v$asm_operation;
COUNT(*)
----------
1
SQL> select GROUP_NUMBER,DISK_NUMBER,NAME,PATH,FREE_MB,TOTAL_MB from v$asm_disk;
GROUP_NUMBER DISK_NUMBER NAME PATH FREE_MB TOTAL_MB
------------ ----------- ------------ --------------- ---------- ----------
1 0 ASM_DISK_1 ORCL:ASM_DISK_1 7371 8189
1 1 ASM_DISK_2 ORCL:ASM_DISK_2 7372 8189
1 2 ASM_DISK_3 ORCL:ASM_DISK_3 7422 8189
SQL> select GROUP_NUMBER,DISK_NUMBER,NAME,PATH,FREE_MB,TOTAL_MB from v$asm_disk;
GROUP_NUMBER DISK_NUMBER NAME PATH FREE_MB TOTAL_MB
------------ ----------- ------------ --------------- ---------- ----------
1 0 ASM_DISK_1 ORCL:ASM_DISK_1 7252 8189
1 1 ASM_DISK_2 ORCL:ASM_DISK_2 7251 8189
1 2 ASM_DISK_3 ORCL:ASM_DISK_3 7662 8189
SQL> select count(*) from v$asm_operation;
COUNT(*)
----------
0
SQL> select GROUP_NUMBER,DISK_NUMBER,NAME,PATH,FREE_MB,TOTAL_MB from v$asm_disk;
GROUP_NUMBER DISK_NUMBER NAME PATH FREE_MB TOTAL_MB
------------ ----------- ------------ --------------- ---------- ----------
0 0 ORCL:ASM_DISK_3 0 8189
1 0 ASM_DISK_1 ORCL:ASM_DISK_1 7001 8189
1 1 ASM_DISK_2 ORCL:ASM_DISK_2 7001 8189
需要注意的是ASM为了保护磁盘的正常冗余,如果因为删除磁盘导致不满足最少冗余磁盘个数,该磁盘将等到有新的磁盘加入磁盘组,把数据转移到新的磁盘上之后再进行删除。
比如冗余度为normal,至少需要两块硬盘,而我删除了其中的一个,那么ASM将等待添加一块新的硬盘后,把被删除的硬盘数据转移到这块新的硬盘上,再去删除该硬盘。
添加磁盘组
create diskgroup diskgroup_name
redundancy
failgroup failgroup_name disk 'disk_nmae' name asm_disk_name
failgroup的个数的限制:
HIGH---------- failgroup >= 3
NORMAL---------- failgroup >= 2
EXTERNAL-------- failgroup == 0 (指定外部冗余)
此处使用的三块硬盘(sdd1、sde1、sdf1)来做高度冗余的一个磁盘组DATA2,硬盘添加方法跟上面相似
[root@orclasm ~]# oracleasm createdisk asm_disk_3 /dev/sdd1
Writing disk header: done
Instantiating disk: done
[root@orclasm ~]# oracleasm createdisk asm_disk_4 /dev/sde1
Writing disk header: done
Instantiating disk: done
[root@orclasm ~]# oracleasm createdisk asm_disk_5 /dev/sdf1
Writing disk header: done
Instantiating disk: done
[root@orclasm ~]# oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...
[root@orclasm ~]# oracleasm listdisks
ASM_DISK_1
ASM_DISK_2
ASM_DISK_3
ASM_DISK_4
ASM_DISK_5
SQL> select GROUP_NUMBER,NAME,PATH from v$asm_disk;
GROUP_NUMBER NAME PATH
------------ ------------------------------ ---------------
0 ORCL:ASM_DISK_3
0 ORCL:ASM_DISK_4
0 ORCL:ASM_DISK_5
1 DATA_ASM_DISK_2 ORCL:ASM_DISK_2
1 DATA_ASM_DISK_1 ORCL:ASM_DISK_1
SQL> create diskgroup data2
2 high redundancy
3 failgroup data2_fail_1 disk 'ORCL:ASM_DISK_3' name data2_asm_disk_1
4 failgroup data2_fail_2 disk 'ORCL:ASM_DISK_4' name data2_asm_disk_2
5 failgroup data2_fail_3 disk 'ORCL:ASM_DISK_5' name data2_asm_disk_3
6 /
Diskgroup created.
SQL> select GROUP_NUMBER,NAME,FREE_MB,TOTAL_MB,STATE from v$asm_diskgroup;
GROUP_NUMBER NAME FREE_MB TOTAL_MB STATE
------------ ---------- ---------- ---------- -----------
1 DATA 14002 16378 MOUNTED
2 DATA2 24414 24567 MOUNTED
卸载挂载磁盘组
SQL> alter diskgroup data2 dismount;
Diskgroup altered.
SQL> select GROUP_NUMBER,NAME,FREE_MB,TOTAL_MB,STATE from v$asm_diskgroup;
GROUP_NUMBER NAME FREE_MB TOTAL_MB STATE
------------ ---------- ---------- ---------- -----------
1 DATA 14002 16378 MOUNTED
0 DATA2 0 0 DISMOUNTED
SQL> alter diskgroup data2 mount;
Diskgroup altered.
/*或者使用alter diskgroup all mount; 挂载所以磁盘组*/
SQL> select GROUP_NUMBER,NAME,FREE_MB,TOTAL_MB,STATE from v$asm_diskgroup;
GROUP_NUMBER NAME FREE_MB TOTAL_MB STATE
------------ ---------- ---------- ---------- -----------
1 DATA 14002 16378 MOUNTED
2 DATA2 24414 24567 MOUNTED
删除磁盘组
SQL> drop diskgroup data2;
Diskgroup dropped.
3、目录管理
目录概念
A)、+ 表示根目录
B)、目录不能递归创建
C)、不能直接删除非空目录,需要先删目录下的内容,然后再删上层目录
目录的操作
直接递归添加目录将报错
SQL> alter diskgroup data add directory '+data/test_dir1/test_dir2';
alter diskgroup data add directory '+data/test_dir1/test_dir2'
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15173: entry 'test_dir1' does not exist in directory '/'
SQL> alter diskgroup data add directory '+data/test_dir1';
Diskgroup altered.
SQL> alter diskgroup data add directory '+data/test_dir1/test_dir2';
Diskgroup altered.
删除目录
SQL> alter diskgroup data drop directory '+data/test_dir1/test_dir2';
Diskgroup altered.
SQL> alter diskgroup data drop directory '+data/test_dir1';
Diskgroup altered.
ASMCMD管理目录
[oracle@orclasm ~]$ asmcmd
ASMCMD> help
commands:
--------
cd
du
find
help
ls
lsct
lsdg
mkalias
mkdir
pwd
rm
rmalias
ASMCMD> cd + //+是ASM根目录
ASMCMD> ls
DATA/
ASMCMD> mkdir +DATA/test_dir1 //创建目录
ASMCMD> mkdir +DATA/test_dir1/test_dir2
ASMCMD> cd +DATA/test_dir1/
ASMCMD> ls
test_dir2/
ASMCMD> rm test_dir2 //删除目录
ASMCMD> ls
ASMCMD> cd +
ASMCMD> rm +DATA/test_dir1
ASMCMD> cd +DATA
ASMCMD> ls
ORCL/
创建删除别名
ASMCMD> mkalias '+DATA/ORCL/datafile/SYSTEM.256.854421493' system.dbf
ASMCMD> rmalias system.dbf
/*注意别名创建保留在当前目录,删除时也要到当前目录删除*/
文件管理
ASM文件概述
ASM文件的命名不同于普通文件的命名,它的文件名一般不直接指定,由ASM系统自己生成,并且其管理方式是OMF。如果人为指定,则文件的管理方式就不再是OMF。
文件的命名规则
1)、完全命名:
格式:+diskgroup_name/database_name/filetype/file_name.xxx.xxxx
作用:只能用于引用,不能在创建ASM文件时指定。
说明:xxx表示数字,是唯一的。
例如:+dgdata/info/datafile/system.256.78684974
2)、数字命名:
格式:file_name.xxx.xxxx
作用:只能用于引用,不能在创建ASM文件时指定。
说明:xxx表示数字,是唯一的。
例如:system.256.78684974
3)、不完全命名:
格式:+diskgroup_name
作用:用于创建ASM文件,在创建文件时指定,由ASM 自动生成对应的文件名。
说明:文件是OMF。
例如:
SQL> create tablespace test01 datafile '+data' size 10m;
Tablespace created.
SQL> select name,file# from v$datafile;
NAME FILE#
------------------------------------------------- ----------
+DATA/orcl/datafile/system.256.854421493 1
+DATA/orcl/datafile/undotbs1.258.854421495 2
+DATA/orcl/datafile/sysaux.257.854421493 3
+DATA/orcl/datafile/users.259.854421495 4
+DATA/orcl/datafile/test01.270.854505245 5
4)、带模板的不完全命名:
格式:+diskgroup_name (template_name)
作用:用于创建ASM文件,在创建文件时指定,由ASM 自动生成对应的文件名。
说明:文件是OMF。
例如:create tablespace test datafile ‘+dgdata(my_template)’ size 100m;
创建一个模板
[oracle@orclasm ~]$ export ORACLE_SID=+ASM
[oracle@orclasm ~]$ sqlplus / as sysdba
SQL> alter diskgroup data add template my_temp attributes(high fine);
Diskgroup altered.
/*alter diskgroup data drop template my_temp;用来删除模板*/
[oracle@orclasm ~]$ export ORACLE_SID=orcl
[oracle@orclasm ~]$ sqlplus / as sysdba
SQL> create tablespace test02 datafile '+data(my_temp)' size 10m;
Tablespace created.
SQL> select name,file# from v$datafile;
NAME FILE#
-------------------------------------------------- ----------
+DATA/orcl/datafile/system.256.854421493 1
+DATA/orcl/datafile/undotbs1.258.854421495 2
+DATA/orcl/datafile/sysaux.257.854421493 3
+DATA/orcl/datafile/users.259.854421495 4
+DATA/orcl/datafile/test01.270.854505245 5
+DATA/orcl/datafile/test02.271.854505671 6
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29320885/viewspace-1243621/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29320885/viewspace-1243621/