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.oraASM实例的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

 

解决方案:可以先手工MOUNTDG2,然后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'

rac1init+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启动时不会MOUNTDG2

 

创建时间:2022-04-01 21:28
浏览量:0