分类: Oracle
2013-07-05 10:53:26
这个事件中,不能mount ASM磁盘组,也就不能启动使用这些磁盘组的数据库,可能在mount ASM磁盘组的时候报下列错误:
SQL> startup mount
ORA-15032: not all alterations performed
ORA-15063: diskgroup "
错误可能由于下列原因导致:
a)操作系统不能访问ASM磁盘。
b) ASM实例上没有正确设置asm_diskstring参数。
c)磁盘上的 ASM元数据被覆盖或者崩溃了。
如果已经验证了操作系统可以使用正确的权限访问磁盘,asm_diskstring参数也是正确设置的,仍看到这个错误或者其他的错误,意味着ASM元数据崩溃了。那么就需要重建ASM实例和磁盘组:
Step 1: 保证使用ASM的数据库事先已经用RMAN做了备份
Step 2: 关闭ASM实例
Step3: 使用dd命令清除ASM磁盘上的元数据
Step 4: 重建ASM磁盘组
Step 5: 恢复数据库
Step 1: 保证使用ASM的数据库事先已经用RMAN做了备份
RMAN备份的例子:
1). 连接到rman
rman nocatalog target /
2). 备份数据库、归档日志和控制文件,例如:
RMAN> backup device type disk format '/u03/backup/%U' database plus archivelog;
RMAN> backup device type disk format '/u03/backup/ctrlf_%U' current controlfile;
3). 手动拷贝spfile,例如:
CREATE PFILE='/u03/app/oracle/product/10.1.0/dbs/init
Step 2: 关闭ASM实例
使用sqlplus or srvctl (RAC)关闭数据库实例和ASM实例:
SQLPLUS Example:
export ORACLE_SID=+ASM
sqlplus '/ as sysdba'
SQL> shutdown immediate
export ORACLE_SID=orcl
sqlplus '/ as sysdba'
SQL> shutdown immediate
SRVCTL (RAC) Example:
srvctl stop asm -n
srvctl stop asm -n
srvctl stop database -d
Step3: 使用dd命令清除ASM磁盘上的元数据
在打算重建ASM实例和磁盘组之前,必须清除ASM的所有元数据,例如:
dd if=/dev/zero of=/dev/rdsk/c1t4d0s4 bs=8192 count=12800
or
dd if=/dev/zero of=/dev/rdsk/c1t4d0s4 bs=4096 count=12800
Step 4: 重建ASM磁盘组
例如:
export ORACLE_SID=+ASM
sqlplus '/ as sysdba'
SQL> startup nomount
SQL> create diskgroup data disk '/dev/rdsk/c1t4d0s4';
SQL> shutdown immediate
SQL> startup mount
Step 5: 恢复数据库
1). 使用step 1拷贝的pfile启动实例
export ORACLE_SID=orcl
sqlplus '/ as sysdba'
SQL> startup nomount pfile=init
2). 使用RMAN还原控制文件和数据库,例如:
$>rman target /
RMAN> restore controlfile from '/u03/backup/ctrlf_
by %U.
RMAN> alter database mount;
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open resetlogs;
3). 连接到ASM实例,得到controlfile文件名,例如:
export ORACLE_SID=+ASM
sqlplus '/ as sysdba'
SQL> select name, alias_directory from v$asm_alias;
4). 编辑 init
5). 重建spfile,例如:
SQL> create spfile='+DATA/V10FJ/spfileV10FJ.ora'
from pfile='/u03/app/oracle/product/10.1.0/dbs/pfile.out';
6).关闭、使用新创建的spfile重启实例。
7). 如果还有其他的数据库,重复STEP 5。