原因
在以下情况下可能会发生此错误:
a) ASM 磁盘在操作系统上不可见。
b) 未在 ASM 实例上正确设置 asm_diskstring 参数
c) 磁盘中的 ASM 元数据被覆盖或者损坏
如果我们看到此错误或者其他指示 ASM 元数据损坏的错误,并且已验证磁盘在操作系统上具有正确权限且正确设置,并且 asm_diskstring 参数设置正确,则 ASM 元数据可能已损坏。
如果是这种情况,我们可能需要重新创建 ASM 实例和磁盘组。
欢迎来到之路教程(on itroad-com)
重建步骤
- 确保我们有一个使用 ASM 的所有数据库的预先 RMAN 备份
- 关闭你的 ASM 实例
- 重新创建 ASM 磁盘组
- 恢复数据库
步骤 1:确保我们有一个使用 ASM 的所有数据库的先前 RMAN 备份
我们可以从 ASM 元数据损坏中恢复的唯一方法是在不受 ASM 实例中断影响的区域中进行数据库的预先 RMAN 备份。
RMAN 备份示例:
- 将RMAN连接到目标数据库进行备份
$ rman nocatalog target /
- 现在备份数据库、存档日志和控制文件。
例子:
RMAN> backup device type disk format '/home/oracle/backup/%U' database plus archivelog; RMAN> backup device type disk format '/home/oracle/backup/ctrlf_%U' current controlfile;
- 手动制作 spfile 的副本。
例子:
$ export ORACLE_SID=mydb SQL> CREATE PFILE='/home/oracle/initmydb.ora' FROM SPFILE='/+DATA/MYDB/PARAMETERFILE/spfile.ora';
如果我们没有对所有数据库(数据文件、控制文件、重做日志、存档日志)进行良好的备份,请不要继续步骤 1!
步骤2:关闭 ASM 实例
使用 sqlplus 或者 srvctl (RAC) 停止数据库实例和 ASM 实例
SQLPLUS 示例:
$ export ORACLE_SID=+ASM $ sqlplus '/ as sysdba' SQL> shutdown immediate
$ export ORACLE_SID=mydb $ sqlplus '/ as sysdba' SQL> shutdown immediate
SRVCTL (RAC) 示例:
$ srvctl stop asm -n [node name 1] $ srvctl stop asm -n [node name 2] $ srvctl stop database -d [DB_NAME]
步骤 3:重新创建 ASM 磁盘组
将 ORACLE_SID 设置为 ASM 实例并创建一个新的磁盘组。
例子:
$ export ORACLE_SID=+ASM $ sqlplus '/ as sysdba' SQL> startup nomount SQL> create diskgroup data external redundancy disk '/dev/rdsk/c1t4d0s4' force; SQL> shutdown immediate SQL> startup mount
步骤4:恢复数据库
- 使用步骤 1 中 pfile 的本地副本启动实例。
$ export ORACLE_SID=mydb $ sqlplus '/ as sysdba' SQL> startup nomount pfile=initmydb.ora
- 使用 RMAN 恢复控制文件和数据库。
例子:
$ rman target / RMAN> restore controlfile from '/home/oracle/backup/ctrlf_[string]'; -- where [string] is the unique string generated by %U. RMAN> alter database mount; RMAN> restore database; RMAN> recover database; RMAN> alter database open resetlogs;
- 连接到 ASM 实例并获取控制文件名。
例子:
$ export ORACLE_SID=+ASM $ sqlplus '/ as sysdba' SQL> select name, alias_directory from v$asm_alias;
在 CONTROLFILE 目录下查找控制文件名,例如:Current.256.1
编辑 init[sid].ora 并将 control_files 参数更改为指向从 ASM v$asm_alias 视图中标识的参数。
重新创建 spfile。
例子:
SQL> create spfile='+DATA/MYDB/PARAMETERFILE/spfilemydb.ora' from pfile='/home/oracle/initmydb.ora';
关闭并重新启动实例以使用新创建的 spfile。
对其他数据库重复“步骤 5”部分。
如果我们无法挂载 ASM 磁盘组,我们将无法使用这些磁盘组启动任何数据库。
以下是挂载 ASM 磁盘组时报告的可能错误:
SQL> startup mount ORA-15032: not all alterations performed ORA-15063: diskgroup "[DISK GROUP NAME]"" lacks quorum of 2 PST disks; 0 found
日期:2020-09-17 00:11:23 来源:oir作者:oir