Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1106556
  • 博文数量: 159
  • 博客积分: 3063
  • 博客等级: 中校
  • 技术积分: 2703
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-01 01:51
文章分类

全部博文(159)

文章存档

2013年(48)

2012年(111)

分类: Oracle

2013-07-05 10:53:26

这个事件中,不能mount ASM磁盘组,也就不能启动使用这些磁盘组的数据库,可能在mount ASM磁盘组的时候报下列错误:

SQL> startup mount
ORA-15032: not all alterations performed
ORA-15063: diskgroup "" lacks quorum of 2 PST disks; 0 found

错误可能由于下列原因导致:

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.ora' FROM SPFILE='/+DATA/V10FJ/spfile.ora';

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.ora

2). 使用RMAN还原控制文件和数据库,例如:
$>rman target /
RMAN> restore controlfile from '/u03/backup/ctrlf_'; -- where is the unique string generated

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.ora改变control_files参数指向 ASM v$asm_alias视图中的name标识。
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。

阅读(2203) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~