ASM(自动存储管理)是oracle10g后引入的一种存储手段,是oracle自己开发的一种卷管理器,可以使多个裸设备以卷组的形式组织在一起,实现了利用oracle进程管理的系统级别的vg的管理。用ASM使得我们使用裸设备更加灵活,
我们查看ASM实例信息(这里我们用grid用户)
[grid@RHEL6 ~]$ sqlplus / as sysasm
SQL*Plus: Release 11.2.0.1.0 Production on Fri May 25 06:18:08 2018
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Automatic Storage Management option
SQL>
SQL> show parameter instance;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cluster_database_instances integer 1
instance_name string +ASM
instance_number integer 1
instance_type string asm
SQL>
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string +DATA/asm/asmparameterfile/reg
istry.253.974077643
SQL> create pfile='/home/grid/init.ora' from spfile;
File created.
SQL> !cat /home/grid/init.ora
+ASM.__oracle_base='/u01/app/grid'#ORACLE_BASE set from in memory value
+ASM.asm_diskgroups='FLASH'#Manual Mount
*.asm_power_limit=1
*.diagnostic_dest='/u01/app/grid'
*.instance_type='asm'
*.large_pool_size=12M
*.remote_login_passwordfile='EXCLUSIVE'
ASM实例的启动和停止
我们停止ASM实例,注意:由于ASM实例运行在RDBMS实例下层,要求在停ASM实例时要讲RDBMS实例先停掉。
查看是否有数据库实例连接到ASM实例下
SQL> desc v$asm_client
Name Null? Type
----------------------------------------- -------- ----------------------------
GROUP_NUMBER NUMBER
INSTANCE_NAME VARCHAR2(64)
DB_NAME VARCHAR2(8)
STATUS VARCHAR2(12)
SOFTWARE_VERSION VARCHAR2(60)
COMPATIBLE_VERSION VARCHAR2(60)
SQL> col INSTANCE_NAME for a30
SQL> select GROUP_NUMBER,INSTANCE_NAME,DB_NAME from v$asm_client;
GROUP_NUMBER INSTANCE_NAME DB_NAME
------------ ------------------------------ --------
1 +ASM +ASM
1 orcl orcl
2 orcl orcl
SQL> select group_number,name,state from v$asm_diskgroup;
GROUP_NUMBER NAME STATE
------------ ------------------------------ -----------
1 DATA MOUNTED
2 FLASH MOUNTED
这时发现有数据库实例挂载磁盘组,因此无法停止ASM实例
SQL> shutdown
ORA-15097: cannot SHUTDOWN ASM instance with connected client
我们先停掉数据库后再停ASM实例,这里注意用户切换
[oracle@RHEL6 ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Fri May 25 23:46:00 2018
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
SYS@ orcl>shut immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> shutdown
ASM diskgroups dismounted
ASM instance shutdown
重新启动ASM实例
SQL> startup
ASM instance started
Total System Global Area 283930624 bytes
Fixed Size 2212656 bytes
Variable Size 256552144 bytes
ASM Cache 25165824 bytes
ASM diskgroups mounted
下面我们用命令行的方式对磁盘组进行管理
首先在主机环境下查看ASM磁盘组文件
[oracle@RHEL6 ~]$ ll /dev/raw
total 0
crw-rw----. 1 grid asmadmin 162, 1 Jul 22 18:47 raw1
crw-rw----. 1 grid asmadmin 162, 2 Jul 22 18:46 raw2
crw-rw----. 1 grid asmadmin 162, 3 Jul 22 18:47 raw3
crw-rw----. 1 grid asmadmin 162, 5 Jul 22 18:41 raw5
crw-rw----. 1 grid asmadmin 162, 6 Jul 22 18:38 raw6
crw-rw----. 1 grid asmadmin 162, 7 Jul 22 18:38 raw7
crw-rw----. 1 grid asmadmin 162, 8 Jul 22 18:47 raw8
crw-rw----. 1 root disk 162, 0 Jul 22 18:38 rawctl
[oracle@RHEL6 ~]$
在ASM中查看
SYS@ orcl>col path for a50
SYS@ orcl>select group_number,path from v$asm_disk order by path;
GROUP_NUMBER PATH
------------ --------------------------------------------------
1 /dev/raw/raw1
1 /dev/raw/raw2
2 /dev/raw/raw3
2 /dev/raw/raw5
0 /dev/raw/raw6
0 /dev/raw/raw7
2 /dev/raw/raw8
7 rows selected.
Elapsed: 00:00:00.08
这里如果磁盘组的编号是0,说明还没有被使用,如果磁盘组的编号不是0,说明已经被使用
创建新的磁盘组
SQL> select group_number,name,state from v$asm_diskgroup;
GROUP_NUMBER NAME STATE
------------ ------------------------------ -----------
1 DATA MOUNTED
2 FLASH MOUNTED
SQL> create diskgroup dg1 external redundancy disk '/dev/raw/raw6';
Diskgroup created.
SQL> select group_number,name,state from v$asm_diskgroup;
GROUP_NUMBER NAME STATE
------------ ------------------------------ -----------
1 DATA MOUNTED
2 FLASH MOUNTED
3 DG1 MOUNTED
查看磁盘组信息
SQL> select group_number,path from v$asm_disk order by path;
GROUP_NUMBER PATH
------------ --------------------------------------------------
1 /dev/raw/raw1
1 /dev/raw/raw2
2 /dev/raw/raw3
2 /dev/raw/raw5
3 /dev/raw/raw6
0 /dev/raw/raw7
2 /dev/raw/raw8
7 rows selected.
使用命令将磁盘加入到磁盘组中
SQL> alter diskgroup dg1 add disk '/dev/raw/raw7';
Diskgroup altered.
SQL> select group_number,path from v$asm_disk order by path;
GROUP_NUMBER PATH
------------ --------------------------------------------------
1 /dev/raw/raw1
1 /dev/raw/raw2
2 /dev/raw/raw3
2 /dev/raw/raw5
3 /dev/raw/raw6
3 /dev/raw/raw7
2 /dev/raw/raw8
7 rows selected.
修改磁盘组状态
SQL> select group_number,name,state from v$asm_diskgroup;
GROUP_NUMBER NAME STATE
------------ ------------------------------ -----------
1 DATA MOUNTED
2 FLASH MOUNTED
3 DG1 MOUNTED
SQL> alter diskgroup DG1 dismount;
Diskgroup altered.
SQL> select group_number,name,state from v$asm_diskgroup;
GROUP_NUMBER NAME STATE
------------ ------------------------------ -----------
1 DATA MOUNTED
2 FLASH MOUNTED
0 DG1 DISMOUNTED
再次挂起磁盘组
SQL> alter diskgroup DG1 mount;
Diskgroup altered.
SQL> select group_number,name,state from v$asm_diskgroup;
GROUP_NUMBER NAME STATE
------------ ------------------------------ -----------
1 DATA MOUNTED
2 FLASH MOUNTED
3 DG1 MOUNTED
删除磁盘组
SQL> drop diskgroup dg1 including contents;
Diskgroup dropped.
SQL> select group_number,path from v$asm_disk order by path;
GROUP_NUMBER PATH
------------ --------------------------------------------------
1 /dev/raw/raw1
1 /dev/raw/raw2
2 /dev/raw/raw3
2 /dev/raw/raw5
0 /dev/raw/raw6
0 /dev/raw/raw7
2 /dev/raw/raw8
7 rows selected.
重新建立带有兼容版本信息的磁盘组
SQL> create diskgroup dg1 external redundancy disk '/dev/raw/raw6';
Diskgroup created.
查看兼容版本信息
SQL> col compatibility for a30
SQL> select name,compatibility from v$asm_diskgroup;
NAME COMPATIBILITY
------------------------------ ------------------------------
DATA 11.2.0.0.0
FLASH 11.2.0.0.0
DG1 10.1.0.0.0
由于兼容版本不一致会导致数据回写失败,所以我们尽量要保持磁盘组的版本信息一致
SQL> alter diskgroup dg1 set attribute 'compatible.asm'='11.2.0.0.0';
Diskgroup altered.
SQL> select name,compatibility from v$asm_diskgroup;
NAME COMPATIBILITY
------------------------------ ------------------------------
DATA 11.2.0.0.0
FLASH 11.2.0.0.0
DG1 11.2.0.0.0
下面我们检索下ASM磁盘组的数据
[grid@RHEL6 ~]$ asmcmd -p
ASMCMD [+] > ls
DATA/
DG1/
FLASH/
ASMCMD [+] > ls -l +data/orcl/controlfile
Type Redund Striped Time Sys Name
CONTROLFILE UNPROT FINE JUL 22 18:00:00 Y Current.260.982157551