坏块的模拟和查看
使用bbed工具修改数据文件的块,然后使用dbv和rman工具查看坏块。

1.创建数据:根据dbv查看没有坏块Total Pages Marked Corrupt : 0
create table bbed (id number,name varchar2(20)) tablespace MNT_TBS;
insert into bbed values(1,'zhaoxu');
insert into bbed values(1,'kingle');
commit;

[oracle@test bbed]$ dbv userid=sys/oracle file=/u02/app/oracle/oradata/test/mnt_tbs.dbf

DBVERIFY: Release 10.2.0.5.0 - Production on Tue Sep 28 15:46:52 2021

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

DBVERIFY - Verification starting : FILE = /u02/app/oracle/oradata/test/mnt_tbs.dbf
DBVERIFY - Verification complete

Total Pages Examined : 60672
Total Pages Processed (Data) : 43587
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 13993
Total Pages Failing (Index): 0
Total Pages Processed (Other): 1014
Total Pages Processed (Seg) : 228
Total Pages Failing (Seg) : 0
Total Pages Empty : 1850
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Highest block SCN : 1390345 (0.1390345)

2.寻找数据块位置:查看表中数据所在数据文件号和块
select id,name,dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block# from bbed;
ID NAME FILE# BLOCK#
---------- -------------------- ---------- ----------
1 zhaoxu 6 57244
1 kingle 6 57244

BBED连接数据库(bbed默认密码为blockedit)
/*bbed不能直接操作封装在ASM里面的数据文件,所以需要将对应的数据文件转存出来。
bbed password=blockedit parfile=bbed.par

vi bbed.par
blocksize=8192
listfile=/home/oracle/bbed/filelist.txt
mode=edit

vi filelist.txt
/u02/app/oracle/oradata/test/mnt_tbs.dbf
*/

[oracle@test bbed]$ bbed password=blockedit parfile=bbed.par

BBED: Release 2.0.0.0.0 - Limited Production on Tue Sep 28 15:44:58 2021

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

************* !!! For Oracle Internal Use only !!! ***************

BBED> set filename /u02/app/oracle/oradata/test/mnt_tbs.dbf
BBED-00202: invalid parameter (/)

BBED> set filename '/u02/app/oracle/oradata/test/mnt_tbs.dbf'
FILENAME /u02/app/oracle/oradata/test/mnt_tbs.dbf

BBED> map
File: /u02/app/oracle/oradata/test/mnt_tbs.dbf (0)
Block: 1 Dba:0x00000000
------------------------------------------------------------
Data File Header

struct kcvfh, 676 bytes @0

ub4 tailchk @8188

BBED> show all
FILE# 0
BLOCK# 1
OFFSET 0
DBA 0x00000000 (0 0,1)
FILENAME /u02/app/oracle/oradata/test/mnt_tbs.dbf
BIFILE bifile.bbd
LISTFILE /home/oracle/bbed/filelist.txt
BLOCKSIZE 8192
MODE Edit
EDIT Unrecoverable
IBASE Dec
OBASE Dec
WIDTH 80
COUNT 512
LOGFILE log.bbd
SPOOL No

BBED> set dba 6,57244
DBA 0x0180df9c (25223068 6,57244)

BBED> find /c kingle --这就是我们找到的字符位置
File: /u02/app/oracle/oradata/test/mnt_tbs.dbf (6)
Block: 57244 Offsets: 8169 to 8191 Dba:0x0180df9c
------------------------------------------------------------------------
6b696e67 6c652c01 0202c102 067a6861 6f787502 06bbde

<32 bytes per line>

3.更改数据,修改第6号数据文件的57244块
BBED> dump /v dba 6,57244 offset 8169 count 32
File: /u02/app/oracle/oradata/test/mnt_tbs.dbf (6)
Block: 57244 Offsets: 8169 to 8191 Dba:0x0180df9c
-------------------------------------------------------
6b696e67 6c652c01 0202c102 067a6861 l kingle,...ha
6f787502 06bbde l oxu..

<16 bytes per line>

BBED> modify 100 dba 6,57244;
File: /u02/app/oracle/oradata/test/mnt_tbs.dbf (6)
Block: 57244 Offsets: 8169 to 8191 Dba:0x0180df9c
------------------------------------------------------------------------
64696e67 6c652c01 0202c102 067a6861 6f787502 06bbde

<32 bytes per line>

BBED> dump /v dba 6,57244 offset 8169 count 32
File: /u02/app/oracle/oradata/test/mnt_tbs.dbf (6)
Block: 57244 Offsets: 8169 to 8191 Dba:0x0180df9c
-------------------------------------------------------
64696e67 6c652c01 0202c102 067a6861 l dingle,...ha
6f787502 06bbde l oxu..

<16 bytes per line>


exit

4.查看数据块
dbv userid=sys/oracle file=/u02/app/oracle/oradata/test/mnt_tbs.dbf
[oracle@test bbed]$ dbv userid=sys/oracle file=/u02/app/oracle/oradata/test/mnt_tbs.dbf

DBVERIFY: Release 10.2.0.5.0 - Production on Tue Sep 28 15:57:18 2021

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

DBVERIFY - Verification starting : FILE = /u02/app/oracle/oradata/test/mnt_tbs.dbf
Page 57244 is marked corrupt
Corrupt block relative dba: 0x0180df9c (file 6, block 57244)
Bad check value found during dbv:
Data in bad block:
type: 6 format: 2 rdba: 0x0180df9c
last change scn: 0x0000.0013debb seq: 0x2 flg: 0x06
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0xdebb0602
check value in block header: 0xf5f8
computed block checksum: 0xf00

DBVERIFY - Verification complete

Total Pages Examined : 60672
Total Pages Processed (Data) : 43586
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 13993
Total Pages Failing (Index): 0
Total Pages Processed (Other): 1014
Total Pages Processed (Seg) : 228
Total Pages Failing (Seg) : 0
Total Pages Empty : 1850
Total Pages Marked Corrupt : 1 --表示存在坏块
Total Pages Influx : 0
Highest block SCN : 1390345 (0.1390345)

5.查看数据库数据
SQL> select * from bbed;
ID NAME
---------- --------------------
1 zhaoxu
1 kingle
--查询正常,因为在buffer_cache中缓存了块,而修改的是文件中的块。两个块现在不一致,清空buffer cache后再次查询测试表。

SQL> alter system flush buffer_cache;

System altered.

SQL> select * from bbed;
select * from bbed
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 6, block # 57244)
ORA-01110: data file 6: '/u02/app/oracle/oradata/test/mnt_tbs.dbf'

6.校验坏块

SQL> analyze table bbed validate structure cascade online;
analyze table bbed validate structure cascade online
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 6, block # 57244)
ORA-01110: data file 6: '/u02/app/oracle/oradata/test/mnt_tbs.dbf'

7.rman校验坏块
[oracle@test ~]$ rman target /

Recovery Manager: Release 10.2.0.5.0 - Production on Tue Sep 28 16:01:19 2021

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

connected to target database: TEST (DBID=2286280424)

RMAN> backup check logical validate database;

Starting backup at 28-SEP-21
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=144 devtype=DISK
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00002 name=/u02/app/oracle/oradata/test/undotbs01.dbf
input datafile fno=00001 name=/u02/app/oracle/oradata/test/system01.dbf
input datafile fno=00006 name=/u02/app/oracle/oradata/test/mnt_tbs.dbf
input datafile fno=00003 name=/u02/app/oracle/oradata/test/sysaux01.dbf
input datafile fno=00005 name=/u02/app/oracle/oradata/test/example01.dbf
input datafile fno=00004 name=/u02/app/oracle/oradata/test/users01.dbf
channel ORA_DISK_1: backup set complete, elapsed time: 00:01:25
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
including current control file in backupset
including current SPFILE in backupset
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:05
Finished backup at 28-SEP-21

RMAN>

--RMAN的检查结果放在v$database_block_corruption
SQL> select file#,block#,blocks from v$database_block_corruption;

FILE# BLOCK# BLOCKS
---------- ---------- ----------
6 57244 1

拓展:

BV(DBVERIFY)是Oracle提供的一个命令行工具,它可以对数据文件物理和逻辑两种一致性检查。但是这个工具不会检查索引记录和数据记录的匹配关系,这种检查必须使用analyze validate structure命令。

这个工具有如下特点:
1.以只读的方式打开数据文件,在检查过程中不会修改数据文件的内容。
2.可以在线检查数据文件,而不需要关闭数据库。
3.不能检查控制文件和日志文件,只能检查数据文件。
4.这个工具可以检查ASM文件,但数据库必须Open状态,并且需要通过USERID指定用户,比如:dbv file=+DG1/ORCL/datafile/system01.dbf userid=system/sys
5.在许多UNIX平台下,DBV要求数据文件有扩展名,如果没有可以通过建立链接的方法,然后对链接的方法,然后对链接文件进行操作,比如:ls -n /dev/rdsk/mydevice /tmp/mydevice.dbf
6.某些平台,DBV工具不能检查超过2GB的文件,如果碰到DBV-100错误,请先检查文件大小,MOS Bug 710888对这个问题有描述。
7.DBV只会检查数据块的正确性,但不会关系数据块是否属于哪个对象。
8.对于祼设备建议指定END参数,避免超出数据文件范围。比如:dbv FILE=/dev/rdsk/r1.dbf END=<last_block_number>。可以在v$datafile视图中用bytes字段除以块大小来获得END值。

DBVERIFY - Verification starting : FILE = /u02/app/oracle/oradata/test/mnt_tbs.dbf
DBVERIFY - Verification complete

Total Pages Examined : 60672 --( 检查总页数)
Total Pages Processed (Data) : 43587 --(处理的总页数(数据))
Total Pages Failing (Data) : 0 --(总页数失败(数据))
Total Pages Processed (Index): 13993 --(处理的总页数(索引))
Total Pages Failing (Index) : 0 --(总页面失败(索引))
Total Pages Processed (Other): 1014 --(处理的总页数(其他))
Total Pages Processed (Seg) : 228 --(处理的总页数(Seg))
Total Pages Failing (Seg) : 0 --(总页数失败(Seg)
Total Pages Empty : 1850 --(总页数空)
Total Pages Marked Corrupt : 0 --(总页数标记为损坏)
Total Pages Influx : 0 --(总页面数量)
Highest block SCN : 1390345 (0.1390345) --(最高块SCN)

参考:

https://www.cnblogs.com/kingle-study/p/10857467.html

ORACLE 坏块的模拟和查看的更多相关文章

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

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

  2. Oracle - 坏块修复(一)

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

  3. oracle坏块问题的处理

    一.背景 今天有用户反映数据库连不上了,查看日志发现有数据库坏块. 查看数据库日志,有如下报错: ORA-01578: ORACLE , 93642) ORA-01110: 1: '/oracle/a ...

  4. oracle坏块处理记录

    1. 执行sql:select count(distinct id) from bw_fpzxx ,报错如下: ORA-01578: ORACLE 数据块损坏 (文件号 16, 块号 195428)O ...

  5. [Oracle]坏块处理:确认坏块的对象

    如果已经知道 FILE#,BLOCK#,则 可以通过如下查询来看: SQL> SELECT SEGMENT_TYPE,OWNER||'.'||SEGMENT_NAME FROM DBA_EXTE ...

  6. 12 oracle 数据库坏块--物理坏块-ORA-01578/ORA-01110

    oracle 数据库坏块--物理坏块 数据坏块的类型物理坏块:通常是由于硬件损坏如磁盘异常导致.内存有问题.存储链有问题. IO有问题.文件系统有问题. Oracle本身的问题等逻辑坏块:可能都是软件 ...

  7. 使用BBED模拟Oracle数据库坏块

    BBED(OracleBlockBrowerandEDitor Tool),用来直接查看和修改数据文件数据的一个工具,是Oracle一款内部工具,可以直接修改Oracle数据文件块的内容,在一些极端恢 ...

  8. ORACLE模拟一个数据文件坏块并使用RMAN备份来恢复

    1.创建一个实验用的表空间并在此表空间上创建表 create tablespace blocktest datafile '/u01/oradata/bys1/blocktest.dbf' size ...

  9. Oracle:通过dbv查看数据文件是否有坏块

    我们备份的数据文件,可以通过oacle自带的dbv工具来查看是否是好的. 下面实验如下: 环境:oracle10.2.0.1 1.检查数据文件是否有坏块 [oracle@app orcl]$ dbv ...

随机推荐

  1. IO流(File类--递归--过滤器--IO字节流--IO字符流--Properties集合--缓冲流--转换流--序列化流--打印流)

    一.File类 1.1概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 1.1.1相对路径与绝对路径 相对路径从盘符开始的路径,这是一个完整 ...

  2. JDBC中的元数据——2.参数元数据

    package metadata; import java.sql.Connection; import java.sql.ParameterMetaData; import java.sql.Pre ...

  3. 多线程编程<二>

    wait()与notify(): 1 public class ThreadComDemo { 2 public static void main(String[] args) { 3 try { 4 ...

  4. 【SpringMVC】域对象共享数据

    使用ModelAndView向request域对象共享数据 index.html <a th:href="@{/testModelAndView}">使用ModelAn ...

  5. 刷题-力扣-518. 零钱兑换 II

    518. 零钱兑换 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/coin-change-2/ 著作权归领扣网络所有.商业转载 ...

  6. Ubuntu 16.04 NVidia显卡 输入密码后 重复出现登录界面

    问题根源:显卡驱动 解决办法: CTRL+ALT+F1 # 切换到命令行 sudo service lightdm stop  # 关闭桌面显示管理器 sudo apt-get remove --pu ...

  7. 备忘:Linux内核编程的几个注意事项

    虚拟地址转物理地址要用__pa 内核程序创建的一段地址连续的共享内存,通过内存映射可以让用户态进程存取.之前在RHEL/CentOS的x86_64架构上工作正常.后来在aarch64架构的银河麒麟(L ...

  8. Spring Cloud Eureka 实践(二)

    接上一篇的内容,Eureka服务已经启动成功后,可以尝试开发服务的提供者与消费者,并注册到Eureka来实现服务的发现与调用. 首先,在父工程中继续创建服务提供者的Module,最新的目录结构如下图所 ...

  9. SpringBoot 如何生成接口文档,老鸟们都这么玩的!

    大家好,我是飘渺. SpringBoot老鸟系列的文章已经写了两篇,每篇的阅读反响都还不错,果然大家还是对SpringBoot比较感兴趣.那今天我们就带来老鸟系列的第三篇:集成Swagger接口文档以 ...

  10. 计算机基础知识以及java JDK、JRE

    计算机 计算机(Computer)全称:电子计算机,是一种能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备.由硬件和软件所组成,没有安装任何软件的计算机称为裸机.常见的形式有台式计算机.笔 ...