RAC磁盘组
RAC磁盘组
ASM用来管理共享磁盘,也像ORACLE一样有自己的实例,通过实例管理磁盘。如果ASM实例启动不了,则数据库也无法
启动。
ASM实例就两种状态:NOMOUNT 和 MOUNT状态
启动到MOUNT时,把所有的磁盘都启动起来
*********************************************************************
在RAC1下查看实例信息
[root@rac1 oracle]# cd $ORACLE_HOME/dbs
[root@rac1 dbs]# ls
ab_+ASM1.dat hc_prod1.dat initdw.ora
initprod1.ora orapwprod1
hc_+ASM1.dat init+ASM1.ora init.ora orapw+ASM1
[root@rac1 dbs]# cat init+ASM1.ora
//init+ASM1.ora为ASM实例的pfile文件
*********************************************************************
启动ASM实例
[oracle@rac1 ~]$ export ORACLE_SID= +ASM1
[oracle@rac1 ~]$ sqlplus / as sysdba
SQL> show parameter name
查看磁盘组信息
视图v$asm_diskgroup用来记录磁盘组的状态
SQL> desc v$asm_diskgroup;
SQL> select GROUP_NUMBER, NAME ,STATE,TOTAL_MB,FREE_MB,type from v$asm_diskgroup;
*********************************************************************
建立磁盘组
建立磁盘组可以用DBCA建,也可以用命令建
磁盘组的冗余有三种HIGH 、 NORMAL |、EXTERNAL
HIGH至少要三块磁盘,NORMAL至少要两块磁盘,EXTERNAL一块磁盘就可以了
命令语法:
CREATE DISKGROUP diskgroup_name
[ { HIGH | NORMAL | EXTERNAL } REDUNDANCY ]
[ FAILGROUP failgroup_name ]
DISK [ NAME disk_name ] [ SIZE size_clause ] [ FORCE | NOFORCE ].;
SQL> create diskgroup dg2 external redundancy
disk '/dev/raw/raw9' ;
SQL> select GROUP_NUMBER, NAME ,STATE,TOTAL_MB,FREE_MB,type from v$asm_diskgroup;
如果没有MOUNT上,可以执行这个命令
SQL> alter diskgroup dg2 mount;
建立NORMAL磁盘组
SQL> create diskgroup dg2 normal redundancy
failgroup fg1 disk '/dev/raw/raw9'
failgroup fg2 disk '/dev/raw/raw10';
//建立NORMAL磁盘组至少要两块磁盘。
在DG2上创建文件
动态查看日志文件内容
[oracle@rac2 ~]$ tail -f /u01/app/oracle/admin/prod/bdump/alert_prod2.log
在DG2上面创建表空间
SQL> create tablespace cuug
2 datafile '+DG2';
ORA-01119: error in creating database file '+DG2'
ORA-17502: ksfdcre:4 Failed to create file +DG2
ORA-15001: diskgroup "DG2" does not exist or is not mounted
ORA-15001: diskgroup "DG2" does not exist or is not mounted
[oracle@rac2 ~]$ cat $ORACLE_HOME/dbs/init+ASM2.ora
解决方案:可以先手工MOUNT上DG2,然后DG2的信息注册到ASM的$ORACLE_HOME/dbs/init+ASM2.ora文件里
2、手工MOUNT DG2
[oracle@rac2 ~]$ export ORACLE_SID= +ASM2
[oracle@rac2 ~]$ sqlplus / as sysdba
SQL> alter diskgroup dg2 mount;
3、注册DG2到 $ORACLE_HOME/dbs/init+ASM2.ora
[oracle@rac2 ~]$ vi $ORACLE_HOME/dbs/init+ASM2.ora
更改asm_diskgroups='DG1', 'RECOVERY', 'DG2'
在rac1的init+ASM1.ora 文件里面也要注册一下。
MOUNT DG2后再在DG2上面建立表空间
[oracle@rac2 ~]$ export ORACLE_SID=prod2
[oracle@rac2 ~]$ sqlplus / as sysdba
SQL>create tablespace cuug 2 datafile '+DG2';
5、注意:如果数据库在启动状态下,ASM的实例也不能SHUTDOWN的,如下 所示
[oracle@rac1 dbs]$ export ORACLE_SID=+ASM1
[oracle@rac1 dbs]$ sqlplus / as sysdba
SQL> shutdown immediate
ORA-15097: cannot SHUTDOWN ASM instance with connected RDBMS instance
6、如果关闭数据库实例后,就可以SHUTDOWN ASM了
SQL> show parameter name
[oracle@rac1 dbs]$ srvctl stop database -d prod
[oracle@rac1 dbs]$ exit
在启动数据库实例的时候,要先启动ASM实例,然后再启动数据库实例。
查看上面的文件,在ASM的实例里面没有注册DG2的信息,所以ASM启动时不会MOUNT上DG2。