ORACLE 坏块的模拟和查看
坏块的模拟和查看
使用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 坏块的模拟和查看的更多相关文章
- 13 oracle数据库坏块-逻辑坏块(模拟/修复)
13 oracle数据库坏块-逻辑坏块 逻辑数据坏块的场景1)oracle bug也可能导致逻辑坏块的产生. 特别是parallel dml. 例如:Bug 5621677 Logical corru ...
- Oracle - 坏块修复(一)
一.概述 本文将介绍如何模拟坏块,以及出现坏块该如何修复.实验分为以下几个步骤. 1. 表出现坏块 2. 索引出现坏块 二.环境准备 本实验都是在oracle 11G归档模式下进行. 1. 准备相关表 ...
- oracle坏块问题的处理
一.背景 今天有用户反映数据库连不上了,查看日志发现有数据库坏块. 查看数据库日志,有如下报错: ORA-01578: ORACLE , 93642) ORA-01110: 1: '/oracle/a ...
- oracle坏块处理记录
1. 执行sql:select count(distinct id) from bw_fpzxx ,报错如下: ORA-01578: ORACLE 数据块损坏 (文件号 16, 块号 195428)O ...
- [Oracle]坏块处理:确认坏块的对象
如果已经知道 FILE#,BLOCK#,则 可以通过如下查询来看: SQL> SELECT SEGMENT_TYPE,OWNER||'.'||SEGMENT_NAME FROM DBA_EXTE ...
- 12 oracle 数据库坏块--物理坏块-ORA-01578/ORA-01110
oracle 数据库坏块--物理坏块 数据坏块的类型物理坏块:通常是由于硬件损坏如磁盘异常导致.内存有问题.存储链有问题. IO有问题.文件系统有问题. Oracle本身的问题等逻辑坏块:可能都是软件 ...
- 使用BBED模拟Oracle数据库坏块
BBED(OracleBlockBrowerandEDitor Tool),用来直接查看和修改数据文件数据的一个工具,是Oracle一款内部工具,可以直接修改Oracle数据文件块的内容,在一些极端恢 ...
- ORACLE模拟一个数据文件坏块并使用RMAN备份来恢复
1.创建一个实验用的表空间并在此表空间上创建表 create tablespace blocktest datafile '/u01/oradata/bys1/blocktest.dbf' size ...
- Oracle:通过dbv查看数据文件是否有坏块
我们备份的数据文件,可以通过oacle自带的dbv工具来查看是否是好的. 下面实验如下: 环境:oracle10.2.0.1 1.检查数据文件是否有坏块 [oracle@app orcl]$ dbv ...
随机推荐
- MySQL时间戳、字符串、日期
1.时间转字符串:date_format(date, format) SELECT date_format(now(), '%Y-%m-%d') 2.时间转时间戳:unix_timestamp() S ...
- Linux c高级
目录 一.Linux 1.1.嵌入式 1.2.什么是Linux 1.3.Linux发行版 1.4.Linux体系结构 1.5.虚拟4G内存 1.6.shell 命令 1.7.软件包的管理 1.8.图形 ...
- 使用Operator State方式
使用 operator state的方式有以下几种: 方式一: stateful function(RichFunction) 实现 CheckpointFunction 接口 必须实现两个方法:Vo ...
- vue@cli3 项目模板怎么使用public目录下的静态文件,找了好久都不对,郁闷!
作为图片最好放在static目录下,但是vue@cli3没有static,网上都说放在public目录下,行,那就放吧,可问题是图片放了怎么使用 第一次尝试 肯定用绝对路径这就不说了,用相对路径,we ...
- 2020最精细的Java学习路线图
在吾爱破解发布的Java学习路线图自我感觉良好,之后看到动力节点Java学院的这份学习路线图感觉专业的东西还得专业的人来做,这份专业的学路线图把我上次的Java学习路线图秒成渣,虽然内容差不多,上份是 ...
- Elasticsearch集群搭建教程及生产环境配置
Elasticsearch 是一个极其强大的搜索和分析引擎,其强大的部分在于能够对其进行扩展以获得更好的性能和稳定性. 本教程将提供有关如何设置 Elasticsearch 集群的一些信息,并将添加一 ...
- lsyncd替代inotify+rsync实现实时同步
因公司业务需要需要实时同步日志文件,刚一开始使用的是inotify+rsync来实现实时同步,但时间久而久之发现同步的速度越来越慢,往往延迟好几个小时.查了一下网上的inotify+rsync方案基本 ...
- thinkphp5.x在函数禁用的情况下绕过
描述 测试的时候发现一个thinkphp的网站,有tp5的漏洞但无法执行命令,但没机会进行后续测试,所有在这里自己搭建环境进行复现一下. 使用的是tp5.0.16 一开始使用网上的payload打一直 ...
- ELK+kafka+filebeat搭建生产ELFK集群
文章原文 ELK 架构介绍 集群服务版本 服务 版本 java 1.8.0_221 elasticsearch 7.10.1 filebeat 7.10.1 kibana 7.10.1 logstas ...
- 【良心保姆级教程】java手把手教你用swing写一个学生的增删改查模块
很多刚入门的同学,不清楚如何用java.swing去开发出一个系统? 不清楚如何使用java代码去操作数据库进行增删改查一些列操作,不清楚java代码和数据库(mysql.sqlserver)之间怎么 ...