签到成功

知道了

CNDBA社区CNDBA社区

坏块类型-NOLOGGING模拟及恢复

2018-03-19 20:14 3032 0 原创 数据坏块
作者: Marvinn

坏块类型-NOLOGGING模拟及恢复

corruption_type: 坏块类型

■ ALL ZERO  - 磁盘上的块头只包含0字节,在ORACLE 7,若它没有被修复,该块可能是有效的,在Oracle 8将会被格式话成标准空块.
■ FRACTURED - 数据块头看起来合理,但块头跟块后tailchk属于不同版本(值不同).
■ CHECKSUM  - 数据块的检查值不一致,不确定为什么检查值失败,但可能是数据块中间的扇区版本值不同
■ CORRUPT - 数据块被错误标识或者不是一个数据块(比如数据块地址丢失)
■ LOGICAL - 逻辑坏块
■ NOLOGGING - 数据块中没有重做日志存在(比如,主库上NOLOGGING操作可能在物理备库上产生这种类型的坏块)

前期重新创建测试环境步骤省略,详情请看文章 >>> 坏块类型-ALL ZERO模拟与修复

http://www.cndba.cn/Marvinn/article/2690
http://www.cndba.cn/Marvinn/article/2690
http://www.cndba.cn/Marvinn/article/2690

前期准备

http://www.cndba.cn/Marvinn/article/2690
http://www.cndba.cn/Marvinn/article/2690

备份测试表所在数据文件29号
backup as compressed backupset pluggable database pdb001 datafile 29;

模拟 NOLOGGINGhttp://www.cndba.cn/Marvinn/article/2690http://www.cndba.cn/Marvinn/article/2690

alter table jwt.marvin nologging;
insert /*+ append_values */ into  jwt.marvin  values(10001,'dd');     
commit;


alter system flush buffer_cache;


SYS@tstdb1-SQL> select * from v$database_block_corruption;


no rows selected


SYS@tstdb1-SQL> select count(*) from jwt.marvin;


  COUNT(*)
----------
     10001


设置数据文件offline
alter database datafile 29 offline;

--用之前备份的数据文件进行恢复
run
{
restore pluggable database pdb001 datafile 29
recover pluggable database pdb001;
}

设置数据文件在线online
alter database datafile 29 online;

JWT@PDB> select count(*) from jwt.marvin;
select count(*) from jwt.marvin;
                           *
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 29, block # 245)
ORA-01110: data file 29: '/data/datafile/ORCL/5A5847E139AF054EE05375B029ACCC94/datafile/jwt.dbf'
ORA-26040: Data block was loaded using the NOLOGGING option


JWT@PDB> select * from v$database_block_corruption;


no rows selected


RMAN> validate datafile 29;

Starting validate at 2018-03-19 20:01:30
using channel ORA_DISK_1
channel ORA_DISK_1: starting validation of datafile
channel ORA_DISK_1: specifying datafile(s) for validation
input datafile file number=00029 name=/data/datafile/ORCL/5A5847E139AF054EE05375B029ACCC94/datafile/jwt.dbf
channel ORA_DISK_1: validation complete, elapsed time: 00:00:01
List of Datafiles
=================
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
29   OK     1              6            1281            545450262 
  File Name: /data/datafile/ORCL/5A5847E139AF054EE05375B029ACCC94/datafile/jwt.dbf
  Block Type Blocks Failing Blocks Processed
  ---------- -------------- ----------------
  Data       0              183             
  Index      0              26              
  Other      0              1065            

Finished validate at 2018-03-19 20:05:30



JWT@PDB> select * from v$database_block_corruption;
          FILE#          BLOCK#          BLOCKS CORRUPTION_CHANGE# CORRUPTIO
--------------- --------------- --------------- ------------------ ---------
            29             245              1     545450262   NOLOGGING        

恢复方法

http://www.cndba.cn/Marvinn/article/2690
http://www.cndba.cn/Marvinn/article/2690
http://www.cndba.cn/Marvinn/article/2690

NOLOGGING 操作引起的坏块是不能修复的,比如"Media Recovery" 或 "RMAN blockrecover"都无法修复这种坏块

    可行的方法是在NOLOGGING 操作之后立刻备份对应的数据文件,对于除了索引以外的其他类型的段,为了修复这个问题,可以通过导出文件(exp/expdp)或者其他数据源来进行恢复。

    如果没有备份,可以采用下面的方法重建对象,找到坏块所在的对象:
        如果是索引,重新创建(drop/create)索引
        如果是表,使用DBMS_REPAIR包或者CTAS复制方式跳过坏块    (丢数据)
        如果是表中的 LOB 列对应的 LOB 段,请参考 [Note 293515.1]
        如果错误出现在物理 STANDBY 数据库, 从主库恢复被影响的数据文件 (只有当主库没有这个问题的情况下)

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
Marvinn

Marvinn

关注

路漫漫其修远兮、吾将上下而求索

  • 99
    原创
  • 0
    翻译
  • 2
    转载
  • 36
    评论
  • 访问:458459次
  • 积分:449
  • 等级:中级会员
  • 排名:第12名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ