(1)添加磁盘组
SQL> create diskgroup FLASH_DISK external redundancy disk '/dev/oracleasm/disks/ASMDISK1' name flashdisk;
SQL> create diskgroup ARCH_DISK external redundancy disk '/dev/oracleasm/disks/ASMDISK2' name archdisk1;
SQL> create diskgroup DATA_DISK normal redundancy disk '/dev/oracleasm/disks/ASMDISK4' name datadisk1, '/dev/oracleasm/disks/ASMDISK5' name datadisk2;
以sysadm身份登录Oracle
$ sqlplus / as sysasm
(2)查看磁盘组状态
SQL> select name,state from v$asm_diskgroup;
(4)挂载FLASH_DISK磁盘组
SQL> alter diskgroup FLASH_DISK mount;
(5)查看磁盘名与裸设备对应关系
SQL> select name,path from v$asm_disk_stat;
查看每个磁盘组可用大小
SQL> select name,allocation_unit_size,total_mb from v$asm_diskgroup;
(7)向磁盘组中增加一个磁盘
SQL> ALTER DISKGROUP ARCH_DISK ADD DISK '/dev/oracleasm/disks/ASMDISK3' name ARCHDISK2;
alter diskgroup ARCH add disk '/dev/mapper/asm-disk0039' name ORADATA_0001;
(8)从磁盘组中删除一个磁盘:
SQL> ALTER DISKGROUP ARCH_DISK DROP DISK ARCHDISK2;
(9)删除一个磁盘组:
SQL> drop diskgroup FLASH_DISK;
当有数据库使用ASM的磁盘组时,是无法卸载和删除的。ASM实例如果宕掉,那么使用ASM的数据库实例也会宕掉。RAC环境中,在删除一个磁盘组之前,其它节点的ASM实例必须要将这个要删除的磁盘组卸载。
(1.1)创建ASM磁盘
可以使用RAID划分的LUN,分区,裸设备等来创建ASM磁盘,但是在使用LUN、分区或裸设备时,要注意将属主和属组改为oracle用户及其对应的组,这个在前面章节已经讲述过,另外还有一种简单的方法就是使用oracle提供的ASMLIB来完成ASM磁盘的创建,下面我们将讲述这种方法。
在创建ASM实例之前,首先应该确保节点上已经安装了ASMlib包,同时确认ASMLib是否已经自动加载:
[root@node1 ~]# lsmod | grep oracleasm
oracleasm 46356 1
然后,通过ASMlib提供的oracleasm将已经分区好的磁盘分区转化为ASM磁盘,例如:
[root@node1 ~]#/etc/init.d/oracleasm createdisk ASMDISK1 /dev/sdc5
Marking disk "/dev/sdc5" as an ASM disk [ OK ]
[root@node1 ~]#/etc/init.d/oracleasm createdisk ASMDISK2 /dev/sdc6
3、 管理ASM实例
ASM磁盘创建完毕,可以查看系统的/dev/oracleasm/disks/目录下是否已经生成磁盘设备。可以通过如下命令查看asm磁盘:
[root@node1 ~]# ll /dev/oracleasm/disks/ASMDISK*
也可以用如下方式查看:
[root@node1 ~]#service oracleasm listdisks
如果要删除 ASM磁盘通过以下命令:
[root@node1 ~]#/etc/init.d/oracleasm deletedisk ASMDISK5
Removing ASM disk "ASMdisk5" [ OK ]
在RAC环境中,要注意另外一个节点是否能发现对应的asm disk,执行如下命令,让另外节点来获取这种变化。
[root@node2 ~]#/etc/init.d/oracleasm scandisks
管理ASM实例
(2)初始化参数
启动asm实例只需要如下几个参数即可,并且asm实例的内存会自动分配并自动管理。
下面讲述下ASM实例初始化参数:
instance_type=asm
cluster_database=true
DB_UNIQUE_NAME=+ASM
ASM_POWER_LIMIT=1
large_pool_size=60M
asm_diskgroups='FLASH_DISK','ARCH_DISK','DATA_DISK'
asm_diskstring='/dev/oracleasm/disks/*'
对每个参数的含义解释如下:
instance_type:指定实例的类型,对于ASM实例,应设置为ASM。
cluster_database:指定是否是数据库集群,true表示是ASM集群。
DB_UNIQUE_NAME:指定ASM实例的名称,默认是+ASM。
ASM_POWER_LIMIT:该参数用来控制ASM中数据的负载均衡速度。
large_pool_size:设置大池的大小,由于ASM文件的分配单元映射是从LARGE_POOL分配的,因此LARGE_POOL_SIZE至少要8M,建议越大越好。
asm_diskgroups:指定实例启动时可用的ASM磁盘组,ASM实例将在启动时自动挂载这些磁盘组。
asm_diskstring:用于限制ASM实例可用于创建磁盘组的磁盘设备。如果该值为NULL,则ASM实例可见的所有磁盘都可以成为创建磁盘组的可选磁盘。
3、 管理ASM实例
(3)创建密码文件
[oracle@node1 ~]$su - oracle
[oracle@node1 ~]$ cd $ORACLE_HOME/dbs
[oracle@node1 ~]$orapwd file=orapw+ASM password=oracle
(4)创建目录结构
[oracle@node 1~]$su – oracle
[oracle@node1 ~]$cd $ORACLE_HOME/dbs
[oracle@node1 ~]$mkdir –p $ORALCE_BASE/admin/+ASM/udump
[oracle@node1 ~]$ mkdir –p $ORALCE_BASE/admin/+ASM/bdump
[oracle@node1 ~]$mkdir –p $ORALCE_BASE/admin/+ASM/adump
[oracle@node1~]$ mkdir –p $ORALCE_BASE/admin/+ASM/cdump
启动ASM实例
无论在RAC环境中还是单实例环境,ASM实例都需要用到CSS进程,在RAC环境中,启动CRS后CSS已经运行,而在单实例环境下,需要以root用户运行脚本,进行初始化CSS服务,否则,在启动ASM实例时会报如下错误:
ORA-29701: unable to connect to Cluster Manager
启动ASM实例:
[oracle@node1 ~]$export ORACLE_SID=+ASM
[oracle@node1 ~]$sqlplus / as sysdba
SQL> startup
col B.NAME for a10
col T.name for a15
col T.path for a20
select B.NAME, T.name, T.path
from v$asm_disk t, v$asm_diskgroup b
where T.GROUP_NUMBER = B.GROUP_NUMBER
and b.name='ARCH'
order BY B.NAME,T.name;
select GROUP_NUMBER,name,state,total_mb/1024/1024,free_mb/1024/1024,usable_file_mb/1024/1024 from v$asm_diskgroup;
select * from v$asm_diskgroup;
select * from v$asm_disk t where t."GROUP_NUMBER"=2 order by name ;
create diskgroup ARCH external redundancy
disk '/dev/mapper/asm-disk0040' name ORADATA_0000;
以sysadm身份登录Oracle
$ sqlplus / as sysasm
alter diskgroup ARCH add disk '/dev/mapper/asm-disk0039' name ORADATA_0001;
select * from v$asm_file t where t."FILE_NUMBER" in(309,441,283);
select * from v$asm_volume;
select name,path,os_mb/1024/1024,total_mb/1024/1024,free_mb/1024/1024 from v$asm_disk_stat order by name;
select sum(total_mb)/1024/1024 from v$asm_disk_stat;
select * from v$asm_disk_stat t where t."GROUP_NUMBER"=3 and t."DISK_NUMBER" in(2,4) order by name ;
select name,total_mb from v$asm_diskgroup;
select sum(bytes)/1024/1024/1024 from SYS.DBA_DATA_FILES t
select * from SYS.DBA_DATA_FILES t where t.FILE_ID in(1579,1518,1582,1441,1599,1700,1467,1522,1593,1439,1550,1578,1514,1663,1697);
select * from dba_tablespaces t where t.TABLESPACE_NAME in ('BUSEXP_DATA','DT_IMG_TMP')
select * from dba_users;
--asm 自动挂载
alter system asm_diskgroups='ORADATA,ORAFLASH,ORAIMAGE1,ORAIMAGE2,ORAIMAGE,VOT01' scope=spfile;
alter system set asm_diskstring='/dev/asm*' scope=spfile;
select B.NAME, T.name, T.path, T.total_mb/1024/1024
from v$asm_disk t, v$asm_diskgroup b
where T.GROUP_NUMBER = B.GROUP_NUMBER
order BY B.NAME, T.name;
select name,state,total_mb/1024/1024,free_mb/1024/1024,usable_file_mb/1024/1024 from v$asm_diskgroup;
select * from v$asm_diskgroup;
select * from v$asm_disk t where t."GROUP_NUMBER"=3 order by name ;
select BYTES/1024/1024/1024 from v$asm_file t where t."FILE_NUMBER" = '1439';--in(309,441,283);
select * from v$asm_volume;
select name,path,os_mb/1024/1024,total_mb/1024/1024,free_mb/1024/1024 from v$asm_disk_stat order by name;
select sum(total_mb)/1024/1024 from v$asm_disk_stat;
select * from v$asm_disk_stat t where t."GROUP_NUMBER"=3 and t."DISK_NUMBER" in(2,4) order by name ;
select name,total_mb,free_mb from v$asm_diskgroup;
select sum(bytes)/1024/1024/1024 from SYS.DBA_DATA_FILES t
select * from SYS.DBA_DATA_FILES t where t.FILE_ID in(1579,1518,1582,1441,1599,1700,1467,1522,1593,1439,1550,1578,1514,1663,1697);
select * from dba_tablespaces t where t.TABLESPACE_NAME in ('BUSEXP_DATA','DT_IMG_TMP')
select * from dba_users;
--asm 自动挂载
alter system asm_diskgroups='ORADATA,ORAFLASH,ORAIMAGE1,ORAIMAGE2,ORAIMAGE,VOT01' scope=spfile;
alter system set asm_diskstring='/dev/oracleasm/disks/*' scope=spfile;