案例:Oracle非常规恢复 ASM磁盘组diskgroup被删除使用kfed进行完美恢复

Oracle RAC环境ASM磁盘组被强制删除,使用kfed工具完美恢复误删除磁盘组案例

在某些情况下,可能因为误操作,不小先drop diskgroup,这个时候千万别紧张,出现此类故障,可以通过kfed进行完美恢复(数据0丢失).如果进一步损坏了相关asm disk,那后续恢复就很麻烦了,可能需要使用dul扫描磁盘来进行抢救性恢复,而且可能导致数据丢失.

1.创建Oracle环境中的测试磁盘组

[[email protected] ~]$ sqlplus / as sysasm

SQL*Plus: Release 11.2.0.4.0 Production on Thu Apr 30 15:12:08 2015

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Automatic Storage Management option

SQL>  select name,path,header_status from v$asm_disk;

NAME                           PATH                           HEADER_STATU
------------------------------ ------------------------------ ------------
                               /dev/asm-disk3                 CANDIDATE
DATA_0000                      /dev/asm-disk1                 MEMBER
DATA_0001                      /dev/asm-disk2                 MEMBER

SQL> create diskgroup oracleplus external redundancy disk ‘/dev/asm-disk3‘;

Diskgroup created.

SQL> select name,path,header_status from v$asm_disk;

NAME                           PATH                           HEADER_STATU
------------------------------ ------------------------------ ------------
oracleplus_0000                  /dev/asm-disk3                 MEMBER
DATA_0000                      /dev/asm-disk1                 MEMBER
DATA_0001                      /dev/asm-disk2                 MEMBER

使用/dev/asm-disk3这个磁盘创建磁盘组oracleplus

创建表,存储在oracleplus磁盘组中

[[email protected] ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Thu Apr 30 15:14:55 2015

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

SQL> create tablespace oracleplus datafile ‘+oracleplus‘ size 100M;

Tablespace created.

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
+DATA/oracleplus/datafile/system.256.878224279
+DATA/oracleplus/datafile/sysaux.257.878224279
+DATA/oracleplus/datafile/undotbs1.258.878224279
+DATA/oracleplus/datafile/users.259.878224279
+oracleplus/oracleplus/datafile/oracleplus.256.878397315

SQL> create table t_oracleplus tablespace oracleplus
  2  as select * from dba_objects;

Table created.

SQL> select count(*) from t_oracleplus;

  COUNT(*)
----------
     86259

通过在磁盘组中创建表空间,从而实现表oracleplus存放在测试磁盘组中

2.尝试删除磁盘组oracleplus

SQL> drop diskgroup oracleplus;
drop diskgroup oracleplus
*
ERROR at line 1:
ORA-15039: diskgroup not dropped
ORA-15053: diskgroup "oracleplus" contains existing files

SQL> drop diskgroup oracleplus  including contents;
drop diskgroup oracleplus  including contents
*
ERROR at line 1:
ORA-15039: diskgroup not dropped
ORA-15027: active use of diskgroup "oracleplus" precludes its dismount

[[email protected] ~]$ asmcmd
ASMCMD> lsof
DB_Name   Instance_Name  Path
oracleplus  oracleplus       +data/oracleplus/controlfile/current.260.878224379
oracleplus  oracleplus       +data/oracleplus/datafile/sysaux.257.878224279
oracleplus  oracleplus       +data/oracleplus/datafile/system.256.878224279
oracleplus  oracleplus       +data/oracleplus/datafile/undotbs1.258.878224279
oracleplus  oracleplus       +data/oracleplus/datafile/users.259.878224279
oracleplus  oracleplus       +data/oracleplus/onlinelog/group_1.261.878224381
oracleplus  oracleplus       +data/oracleplus/onlinelog/group_2.262.878224383
oracleplus  oracleplus       +data/oracleplus/onlinelog/group_3.263.878224385
oracleplus  oracleplus       +data/oracleplus/tempfile/temp.264.878224395
oracleplus  oracleplus       +oracleplus/oracleplus/datafile/oracleplus.256.878397315

由于oracleplus磁盘组被实例使用,因此磁盘组无法删除,报ORA-15027错误
由于oracleplus磁盘组中有文件,因此磁盘组无法删除,报ORA-15053错误
如果这两个阻止你误删除磁盘组的警告依然不能救你,那我也不好多说啥了,只能向我一样继续往下

3.关闭数据库实例,删除磁盘组

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> drop diskgroup oracleplus;
drop diskgroup oracleplus
*
ERROR at line 1:
ORA-15039: diskgroup not dropped
ORA-15053: diskgroup "oracleplus" contains existing files

SQL> drop diskgroup oracleplus  including contents;

Diskgroup dropped.

SQL>  select name,path,header_status from v$asm_disk;

NAME                           PATH                           HEADER_STATU
------------------------------ ------------------------------ ------------
                               /dev/asm-disk3                 FORMER
DATA_0000                      /dev/asm-disk1                 MEMBER
DATA_0001                      /dev/asm-disk2                 MEMBER

SQL> alter diskgroup oracleplus mount;
alter diskgroup oracleplus mount
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15017: diskgroup "oracleplus" cannot be mounted
ORA-15063: ASM discovered an insufficient number of disks for diskgroup
"oracleplus"

磁盘组被drop之后,无法正常mount,mount之时报ORA-15063凑无

4.使用kfed工具恢复删除磁盘组

[[email protected] ~]$ kfed read /dev/asm-disk3 >/tmp/disk3-0-0
[[email protected] ~]$ kfed  read /dev/asm-disk3  blkn=1 >/tmp/disk3-0-1
[[email protected] ~]$ kfed  read /dev/asm-disk3  aun=1 >/tmp/disk3-1-0
通过vi修改这些/tmp/disk3-*中的部分值
[[email protected] ~]$ kfed merge /dev/asm-disk3 text=/tmp/disk3-0-0
[[email protected] ~]$ kfed merge /dev/asm-disk3  blkn=1 text=/tmp/disk3-0-1
[[email protected] ~]$ kfed merge /dev/asm-disk3 aun=1 text=/tmp/disk3-1-0

查询修复后的asm disk

SQL> col path for a30
SQL> set lines 150
SQL> select name,path,header_status from v$asm_disk;

NAME                           PATH                           HEADER_STATU
------------------------------ ------------------------------ ------------
                               /dev/asm-disk3                 MEMBER
DATA_0000                      /dev/asm-disk1                 MEMBER
DATA_0001                      /dev/asm-disk2                 MEMBER

5.尝试mount oracleplus 磁盘组

SQL> alter diskgroup oracleplus mount;

Diskgroup altered.

SQL> select name,path,header_status from v$asm_disk;

NAME                           PATH                           HEADER_STATU
------------------------------ ------------------------------ ------------
oracleplus_0000                  /dev/asm-disk3                 MEMBER
DATA_0000                      /dev/asm-disk1                 MEMBER
DATA_0001                      /dev/asm-disk2                 MEMBER

测试恢复后磁盘组

SQL> startup
ORACLE instance started.

Total System Global Area  952020992 bytes
Fixed Size                  2258960 bytes
Variable Size             306186224 bytes
Database Buffers          637534208 bytes
Redo Buffers                6041600 bytes
Database mounted.
Database opened.
SQL>  select count(*) from t_oracleplus;

  COUNT(*)
----------
     86259

这里证明,当磁盘组被误删除后,立即停止进一步损坏,可以通过kfed进行完美恢复

--------------------------------------ORACLE-DBA----------------------------------------

最权威、专业的Oracle案例资源汇总之案例:Oracle非常规恢复 ASM磁盘组diskgroup被删除使用kfed进行完美恢复

原文唯一网址:http://www.oracleplus.net/arch/oracle-20160602-265.html

Oracle研究中心

关键词:

Oracle非常规恢复

ASM磁盘组diskgroup被删除使用kfed进行完美恢复

时间: 2024-08-02 15:13:12

案例:Oracle非常规恢复 ASM磁盘组diskgroup被删除使用kfed进行完美恢复的相关文章

AMDU恢复ASM磁盘组数据(测)

--umount ASMCMD> umoung -a asmdg commands: md_backup, md_restor lsattr, setattr cd, cp, du, find, help, ls, lsct, lsdg, lsof, mkalias mkdir, pwd, rm, rmalias chdg, chkdg, dropdg, iostat, lsdsk, lsod, mkdg, mount offline, online, rebal, remap, umount

ORACLE 11G RAC ASM磁盘组全部丢失后的恢复

一.环境描述(1)Oracle 11.2.0.3 RAC ON Oracle Linux 6 x86_64,只有一个ASM外部冗余磁盘组--DATA:(2)OCR,VOTEDISK,DATAFILE,CONTROLFILE,SPFILE全部位于这个磁盘组上:二.故障描述(1)存储故障导致ASM磁盘丢失.(2)CRS因为OCR和VOTEDISK的丢失,除了OHAS还联机外,CLUSTERWARE服务都已经停止.三.备份情况(1)RMAN备份:包括controlfile,database,spfil

Oracle 11g在ASM磁盘组上添加控制文件

控制文件(Control File)是Oracle的物理文件之一,它记录了数据库的名字.数据文件的位置等信息.控制文件的重要性在于,一旦控制文件损坏,数据库将会宕机.如果没有数据库的备份和归档日志文件,数据库将无法恢复.因此,我们应该多路镜像控制文件(Multiplex Control Files),并把每个镜像的控制文件分布在不同的物理磁盘.根据经验,控制文件多路镜像以后,几个控制文件同时坏掉的可能性几乎为零.控制文件管理的重心是重在预防,而不是亡羊补牢! 今天做在测试环境为control f

案例:Oracle非常规恢复ODU恢复PACKAGE/VIEW/DBLINK等数据脚本操作

Oracle非常规恢复,通过ODU工具恢复包,过程,函数,视图,触发器等数据 当数据库不能拉起来时候,我们可以通过odu找回丢失的数据,今天客户出要求,需要我帮忙找回不能起来库中的包,过程,函数,视图,触发器等之类东西.这些东西都是存在system空间中,存在一些系统的基表中,我们如果能够拿到这些基表的数据然后进行处理,原则上就可以得到客户需要的东西 一.恢复PROCEDURE/FUNCTION/PACKAGE/PACKAGE BODY/TRIGGER/TYPE/TYPE BODY中的数据 1.

11G ORACLE RAC DBCA 无法识别asm磁盘组

ASM磁盘无法识别几种现象: 1) gi家目录或者其子目录权限错误 2)asm磁盘的权限错误 3)asm实例未启动或者asm磁盘组没有mount上 4)asm磁盘组资源没有在线 5)oracle用户的权限错误 6)oracle($ORACLE_HOME/bin)可执行文件的权限错误 OK,那我就按照上面的分析结果进行逐一排查: 1) gi家目录或者其子目录权限错误 [[email protected] ~]# ls -ld /u01/app/11.2.0/grid/drwxr-x--- 66 r

LINUX 11G RAC ASM磁盘组在线增加磁盘扩容

[javascript] view plain copy LINUX 11G RAC ASM磁盘组在线增加磁盘扩容 1.操作系统版本 OEL 6.1 [[email protected] ~]# more /etc/redhat-release Red Hat Enterprise Linux Server release 6.1 (Santiago) 2.数据库版本 oracle 11g rac SQL> select * from v$version; BANNER ------------

ASM磁盘组异机迁移

环境: Source: OS:redhat 6.3 DB:Oralce RAC 11.2.4.0 destination: OS:redhat 6.3 DB:Oralce RAC 11.2.4.0 背景:客户的PC机上面有两个实例,压力太大,需要迁移出一个实例.数据量TB级别,因为同平台,同版本,外挂存储.所以这里采用直接迁移asm磁盘组 操作前需要注意的: 1.Voting Disk是单独的盘,不包含需要迁移的数据 话不多,这里模拟出来分享给大家(PS:我的原库和目标库的主机名是一样的,第三步

【翻译自mos文章】将expdp的dmp文件从asm磁盘组里边放到本地文件系统里边

将expdp的dmp文件从asm磁盘组里边放到本地文件系统里边 参考原文: How To Extract Datapump File From ASM Diskgroup To Local Filesystem? (Doc ID 566941.1) 适用于: Oracle Database - Enterprise Edition - Version 11.1.0.6 to 11.1.0.7 [Release 11.1] Information in this document applies

【翻译自mos文章】在rac中,使用asmcmd命令从 文件系统 move system datafile 到asm磁盘组的方法

在rac中,使用asmcmd命令从 文件系统  move system datafile 到asm磁盘组的方法. 参考原文: How to move a SYSTEM datafile from filesystem to the ASM diskgroup using ASMCMD on RAC. (Doc ID 1607292.1) 适用于: Oracle Database - Enterprise Edition - Version 11.2.0.1 to 11.2.0.3 [Releas