环境: Oracle 19c ADG(主库:单实例;备库:RAC)

1.主库新建测试文件

主库在AWR的PDB中做测试,为了不影响其他测试,创建一个新的测试表空间tbs_test及对应数据文件:

SQL> conn awr@awr
Enter password:
Connected.
SQL> create tablespace tbs_test datafile '/flash/oradata/DEMO/awr/tbs_test01.dbf' size 30m; Tablespace created.

2.主库创建测试表

主库在新建表空间上创建测试表awr.test:

SQL> create table awr.test tablespace tbs_test as select * from dba_users;

Table created.

SQL> select count(*) from awr.test;

  COUNT(*)
----------
37

3.查询表对应数据文件信息

通过dbms_rowid查看awr.test表对应行数据的文件号(rel_fno)、块号(blockno,)和行号(rowno):

select rowid,
dbms_rowid.rowid_relative_fno(rowid) rel_fno,
dbms_rowid.rowid_block_number(rowid) blockno,
dbms_rowid.rowid_row_number(rowid) rowno
from awr.test
order by rowid; ROWID REL_FNO BLOCKNO ROWNO
------------------ ---------- ---------- ----------
AAATR2AAdAAAACDAAA 29 131 0
AAATR2AAdAAAACDAAB 29 131 1
AAATR2AAdAAAACDAAC 29 131 2
AAATR2AAdAAAACDAAD 29 131 3
AAATR2AAdAAAACDAAE 29 131 4
AAATR2AAdAAAACDAAF 29 131 5
AAATR2AAdAAAACDAAG 29 131 6
AAATR2AAdAAAACDAAH 29 131 7
AAATR2AAdAAAACDAAI 29 131 8
AAATR2AAdAAAACDAAJ 29 131 9
AAATR2AAdAAAACDAAK 29 131 10
...

4.模拟数据文件物理坏块

使用dd模拟数据文件的物理坏块:

dd if=/dev/zero of=/flash/oradata/DEMO/awr/tbs_test01.dbf bs=8192 conv=notrunc seek=131 count=1

5.查询对应测试表

再次查询被破坏数据文件上的表awr.test,发现客户端只是卡顿一下就正常出了结果,并没有任何显示的报错:

ALTER SYSTEM Flush buffer_cache;
select count(*) from awr.test;

6.进一步查询日志信息

上面查询表没有报错,但是从主库的alert日志中可以看到:

2023-04-03T12:08:02.602504+08:00
AWR(6):create tablespace tbs_test datafile '/flash/oradata/DEMO/awr/tbs_test01.dbf' size 30m
AWR(6):Completed: create tablespace tbs_test datafile '/flash/oradata/DEMO/awr/tbs_test01.dbf' size 30m
2023-04-03T12:15:21.021834+08:00
AWR(6):ALTER SYSTEM: Flushing buffer cache inst=0 container=6 global
AWR(6):TABLE AUDSYS.AUD$UNIFIED: ADDED INTERVAL PARTITION SYS_P368 (106) VALUES LESS THAN (TIMESTAMP' 2023-05-01 00:00:00')
2023-04-03T12:15:24.751443+08:00
AWR(6):Hex dump of (file 29, block 131) in trace file /u01/app/oracle/diag/rdbms/demo/demo/trace/demo_ora_11735.trc
AWR(6):
AWR(6):Corrupt block relative dba: 0x07400083 (file 29, block 131)
AWR(6):Completely zero block found during multiblock buffer read
AWR(6):
AWR(6):Reading datafile '/flash/oradata/DEMO/awr/tbs_test01.dbf' for corrupt data at rdba: 0x07400083 (file 29, block 131)
AWR(6):Reread (file 29, block 131) found same corrupt data (no logical check)
AWR(6):Starting background process ABMR
2023-04-03T12:15:24.763408+08:00
Corrupt Block Found
TIME STAMP (GMT) = 04/03/2023 12:15:24
CONT = 6, TSN = 5, TSNAME = TBS_TEST
RFN = 29, BLK = 131, RDBA = 121634947
OBJN = 78966, OBJD = 78966, OBJECT = TEST, SUBOBJECT =
SEGMENT OWNER = AWR, SEGMENT TYPE = Table Segment
2023-04-03T12:15:24.766521+08:00
ABMR started with pid=132, OS id=11983
2023-04-03T12:15:24.767751+08:00
Automatic block media recovery service is active.
2023-04-03T12:15:24.767981+08:00
AWR(6):Automatic block media recovery requested for (file# 29, block# 131)
2023-04-03T12:15:27.096763+08:00
Automatic block media recovery successful for (file# 29, block# 131)
2023-04-03T12:15:27.097189+08:00
AWR(6):Automatic block media recovery successful for (file# 29, block# 131)

日志中显示自动启用了ABMR(Automatic block media recovery)成功修复了物理坏块。

7.确认当前参数设置

如果查询 db_block_checking 、 db_lost_write_protect 这些参数,会发现我这里并没有去特殊设置:

SQL> show parameter db_block

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_block_buffers integer 0
db_block_checking string FALSE
db_block_checksum string TYPICAL
db_block_size integer 8192
SQL> show parameter db_lost NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_lost_write_protect string NONE
SQL>

那么那些参数的意义呢?其实MOS文档:

  • Best Practices for Corruption Detection, Prevention, and Automatic Repair - in a Data Guard Configuration (Doc ID 1302539.1)

文档中有说明,物理坏块默认ADG就能检测,逻辑坏块要配合这些参数设置。包括上一步的日志信息中,在发现数据损坏时,也标注了(no logical check)非逻辑检查的提示。

当然,如果您想要获得更全面的保护,还是要按文档说明,额外设置这些参数。

验证ADG的坏块检测和自动修复的更多相关文章

  1. Oracle - 坏块修复(一)

    一.概述 本文将介绍如何模拟坏块,以及出现坏块该如何修复.实验分为以下几个步骤. 1. 表出现坏块 2. 索引出现坏块 二.环境准备 本实验都是在oracle 11G归档模式下进行. 1. 准备相关表 ...

  2. 13 oracle数据库坏块-逻辑坏块(模拟/修复)

    13 oracle数据库坏块-逻辑坏块 逻辑数据坏块的场景1)oracle bug也可能导致逻辑坏块的产生. 特别是parallel dml. 例如:Bug 5621677 Logical corru ...

  3. 使用badblocks检测坏块

    命令格式 badblocks [-svw][-b <区块大小>][-o <输出文件>][磁盘装置][磁盘区块数 [启始区块]] 典型的命令如下 # 写测试, 数据安全 -c - ...

  4. [转]RMAN检测数据库坏块

    backup validate check logical database; select * from v$database_block_corruption; RMAN> backup v ...

  5. Oracle corrupt block(坏块) 详解

    转自:http://blog.csdn.net/tianlesoftware/article/details/5024966 一. 坏块说明 1.1 相关链接 在看坏块之前,先看几个相关的链接,在后面 ...

  6. 使用 DBMS_REPAIR 修复坏块

    对于Oracle数据块物理损坏的情形,在我们有备份的情况下可以直接使用备份来恢复.对于通过备份恢复,Oracel为我们提供了很多种方式,冷备,基于用户管理方式,RMAN方式等等.对于这几种方式我们需要 ...

  7. Nand Flash基础知识与坏块管理机制的研究

    概述 Flash名称的由来,Flash的擦除操作是以block块为单位的,与此相对应的是其他很多存储设备,是以bit位为最小读取/写入的单位,Flash是一次性地擦除整个块:在发送一个擦除命令后,一次 ...

  8. ORA-01578和ORA-26040--NOLOGGING操作引起的坏块-错误解释和解决方案(文档ID 1623284.1)

    ORA-01578和ORA-26040--NOLOGGING操作引起的坏块-错误解释和解决方案(文档ID 1623284.1) (一)NOLOGGING操作引起的坏块(ORA-01578和ORA-26 ...

  9. 无备份时用dbms_repair恢复坏块的方法

    份的情况下可以直接使用备份来恢复. 对于通过备份恢复,Oracel为我们提供了很多种方式,冷备,基于用户管理方式,RMAN方式等等. 对于这几种方式我们需要实现基于数据库以及文件级别的恢复.RMAN同 ...

  10. Oracle 处理坏块

    本文主要介绍如何去处理在Oracle数据库中出现坏块的问题,对于坏块产生在不同的对象上,处理的方法会有所不同,本文将大致对这些方法做一些介绍.因为数据库运行时间长了,由于硬件设备的老化,出现坏块的几率 ...

随机推荐

  1. scala的运算符

    1.算数运算符 与java基本一样,只有个别细节不一样 (1).除法的区别:整数/整数 结果为整数(小数部分直接舍掉了):小数/整数 结果为小数: 例如:val result = 10.0 / 3 p ...

  2. 【逆向】HWP文档 分析调试技巧

    前言 HWP(Hangul Word Processor)文件是韩国主流文字处理软件Hangul Office(한글)专用的文档格式,Hangul 是一款由韩软公司(Hansoft)开发,在韩国人人皆 ...

  3. 二叉树系列之Treap树

            Treap是一棵拥有键值.优先级两种权值的树 struct node{ int size;//以这个结点为根的子树的结点总数量,用于名次树 int rank;//优先级 int key ...

  4. 【PyQt6】Python使用QtCharts画图修改背景色的问题

    问题 想在软件界面用PyQt6的QtChart新画一张饼图,自定义一个饼图类继承QChartView: class PyPieChart(QChartView): def __init__( self ...

  5. ceph 集群 健康状态报 clock skew detected on mon.tg-ceph-mon-2

    1.现象: health: HEALTH_WARN no active mgr mons are allowing insecure global_id reclaim clock skew dete ...

  6. 浅谈oracle连接远程数据库

    若是本地安装了oracle服务器 1 比较直接的方式是直接修改配置文件 去...\product\11.2.0\dbhome_1\NETWORK\ADMIN下面找三个.ora的配置文件:sqlnet. ...

  7. weblogic修改jdk版本方法

    首先,得知道JDk 的安装目录: /usr/local/ 第一种方法:weblogic控制台直接指定JDK 版本: 第二种方法:修改weblogic中默认的JDK版本: weblogic/Oracle ...

  8. resnet模型下载

    resnet模型下载: model_urls = { 'resnet18': 'https://s3.amazonaws.com/pytorch/models/resnet18-5c106cde.pt ...

  9. 设计模式 - 单例模式 Singleton Pattern - C#

    单例模式 Singleton Pattern 1.单例模式设计模式属于创建型模式 2.是单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建.这个类提供了一种访问其唯一的对象的方式,可以直接访 ...

  10. 关于SQLServer数据库DBCC CHECKIDENT命令

    在SQLServer输入数据时,碰到有主键ID需要维护时,可使用IDENT_CURRENT和CHECKIDENT命令来维护.   一般我们的用法如下: 1) 查看且如有必要更正当前标识值:       ...