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 ...
随机推荐
- 二、vue组件化开发(轻松入门vue)
轻松入门vue系列 Vue组件化开发 五.组件化开发 1. 组件注册 组件命名规范 组件注册注意事项 全局组件注册 局部组件注册 2. Vue调试工具下载 3. 组件间数据交互 父组件向子组件传值 p ...
- Java学习之 多态 Polymorphism
转自:http://www.cnblogs.com/mengdd/archive/2012/12/25/2832288.html 多态的概念 多态==晚绑定. 不要把函数重载理解为多态. 因为多态是一 ...
- 二级C语言题集
时间:2015-5-13 18:01 在131题之后是按考点分类的题集,有需要的朋友可以看一下 ---------------------------------------------------- ...
- 微信小程序学习笔记四 页面的生命周期
1. 生命周期 1.1 对应阶段说明 onLOad(Object query) 1.1 页面加载时触发, 一个页面只会调用一次, 可以在 onLoad的参数中获取打开当前页面路径中的参数 1.2 参数 ...
- mysql最强
MYSQL 与mysql第一次亲密接触 数据库相关概念 一.数据库的好处 二.数据库的常见概念 ★ 三.数据库存储数据的特点 四.常见的数据库管理系统 MYSQL的介绍 一.MySQL的背景 二.My ...
- Centos7部署Open-falcon 0.2.0
官方和github上都有教程,但是对于我来说有的部署内容较为陌生,有点错误官方也未在教程中说明,故在此记录方便以后快速部署,本文部署的时间是2018/10/10. 虽然open-falcon是采用了前 ...
- ES6扩展运算符(三点运算符)...的用法
1. 第一个叫做 展开运算符(spread operator),作用是和字面意思一样,就是把东西展开.可以用在array和object上都行. let a = [1,2,3]; let b = [0, ...
- 机械硬盘换到SSD后系统引导报错代码0xc000000e
由于机械硬盘IO不够用,系统使用起来非常的缓慢,特意购买了新的SSD进行了替换.机械硬盘的IO在70左右,SSD的IO在1000-4000左右指普通消费SSD. 由于不想安装系统,就直接把机械硬盘的数 ...
- Geode member发现机制
Geode member发现机制 Apache Geode 为集群和客户端服务器间提供了多种member 发现机制,具体如下: Peer Member Discovery Standalone Mem ...
- Spring AOP Aspect的简单实现(基于XML)
第一步:导包 第二步:实现类和切面类 Service("userService")public class IUserviceImpl implements IUserServic ...