[20190213]学习bbed-恢复删除的数据.txt
[20190213]学习bbed-恢复删除的数据.txt
--//以前也做过类似测试,当时在用bbed做verify时错误都不处理,当时的想法就是能读出就ok了.
--//而且当时也做成功,纯粹是依葫芦画瓢,按照别人的blog重复操作,一点不理解为什么这样做.
--//重复测试:
1.环境:
SCOTT@book> @ ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
SCOTT@book> create table dept1 as select * from dept ;
Table created.
SCOTT@book> select rowid,dept1.* from dept1;
ROWID DEPTNO DNAME LOC
------------------ ---------- -------------- -------------
AAAWPyAAEAAAAILAAA 10 ACCOUNTING NEW YORK
AAAWPyAAEAAAAILAAB 20 RESEARCH DALLAS
AAAWPyAAEAAAAILAAC 30 SALES CHICAGO
AAAWPyAAEAAAAILAAD 40 OPERATIONS BOSTON
SCOTT@book> @ rowid AAAWPyAAEAAAAILAAA
OBJECT FILE BLOCK ROW ROWID_DBA DBA TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
91122 4 523 0 0x100020B 4,523 alter system dump datafile 4 block 523 ;
SCOTT@book> delete from dept1 where deptno=10;
1 row deleted.
SCOTT@book> commit ;
Commit complete.
SCOTT@book> alter system checkpoint ;
System altered.
2.使用bbed恢复测试:
BBED> set dba 4,523
DBA 0x0100020b (16777739 4,523)
BBED> x /rncc *kdbr[1]
rowdata[44] @8140
-----------
flag@8140: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8141: 0x00
cols@8142: 3
col 0[2] @8143: 20
col 1[8] @8146: RESEARCH
col 2[6] @8155: DALLAS
BBED> x /rncc *kdbr[0]
rowdata[66] @8162
-----------
flag@8162: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
lock@8163: 0x02
cols@8164: 0
--//可以看出删除的flag=0x3c(正常没有发生行链接或者迁移的情况下).
BBED> assign offset 8162=0x2c;
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
ub1 rowdata[0] @8162 0x2c
BBED> x /rncc *kdbr[0]
rowdata[66] @8162
-----------
flag@8162: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8163: 0x02
cols@8164: 3
col 0[2] @8165: 10
col 1[10] @8168: ACCOUNTING
col 2[8] @8179: NEW YORK
--//OK,现在已经正常读出.
BBED> sum apply
Check value for File 4, Block 523:
current = 0x8dc2, required = 0x8dc2
BBED> verify
DBVERIFY - Verification starting
FILE = /mnt/ramdisk/book/users01.dbf
BLOCK = 523
Block Checking: DBA = 16777739, Block Type = KTB-managed data block
data header at 0x7f9b8221527c
kdbchk: the amount of space used is not equal to block size
used=118 fsc=24 avsp=7946 dtl=8064
Block 523 failed with check code 6110
--//以前verify出错,我基本不做修复,因为这些数值不是很好理解.
--//实际上计算公司是
--//dtl-used-fsc=avsp 或者 used+fsc+avsp=dtl.
--//8064-118-24 = 7922
--//前面显示(lock@8163: 0x02)事务使用ITL槽是1(从0开始记数).
BBED> p ktbbh.ktbbhitl[1]
struct ktbbhitl[1], 24 bytes @68
struct ktbitxid, 8 bytes @68
ub2 kxidusn @68 0x000a
ub2 kxidslt @70 0x0007
ub4 kxidsqn @72 0x000058bf
struct ktbituba, 8 bytes @76
ub4 kubadba @76 0x00c001e4
ub2 kubaseq @80 0x11ad
ub1 kubarec @82 0x1d
ub2 ktbitflg @84 0x2001 (KTBFUPB)
union _ktbitun, 2 bytes @86
sb2 _ktbitfsc @86 24
ub2 _ktbitwrp @86 0x0018
ub4 ktbitbas @88 0x1775b85d
--//_ktbitfsc,_ktbitwrp类似C语言的union,当设置提交标识时,表示scn_wrap.其它表示dml操作回收的空间(不包括flag,lock标识).
--//如果insert或者update需要空间比原来大,记录是0.
BBED> x /rncc *kdbr[0]
rowdata[66] @8162
-----------
flag@8162: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8163: 0x02
cols@8164: 3
col 0[2] @8165: 10
col 1[10] @8168: ACCOUNTING
col 2[8] @8179: NEW YORK
--//1+1+2+1+10+1+8 = 24,正好等于回收空间.注意每个字段前有1个长度指示器(如果字符串长度大于250,需要3个字节)
BBED> assign ktbbh.ktbbhitl[1]._ktbitun._ktbitfsc=0;
sb2 _ktbitfsc @86 0
BBED> sum apply
Check value for File 4, Block 523:
current = 0x8dda, required = 0x8dda
BBED> verify
DBVERIFY - Verification starting
FILE = /mnt/ramdisk/book/users01.dbf
BLOCK = 523
Block Checking: DBA = 16777739, Block Type = KTB-managed data block
data header at 0x1a98e7c
kdbchk: space available on commit is incorrect
tosp=7972 fsc=0 stb=0 avsp=7946
Block 523 failed with check code 6111
--//计算公式是tosp=fsc+stb+avsp,stb 标识什么不理解.
BBED> p kdbh
struct kdbh, 14 bytes @124
ub1 kdbhflag @124 0x00 (NONE)
sb1 kdbhntab @125 1
sb2 kdbhnrow @126 4
sb2 kdbhfrre @128 -1
sb2 kdbhfsbo @130 26
sb2 kdbhfseo @132 7972
sb2 kdbhavsp @134 7946
sb2 kdbhtosp @136 7972
BBED> assign kdbhtosp=kdbhavsp;
sb2 kdbhtosp @136 7946
BBED> assign kdbh.kdbhtosp=kdbh.kdbhavsp;
sb2 kdbhtosp @136 7946
--//两者写法都支持.
BBED> sum apply
Check value for File 4, Block 523:
current = 0x8df4, required = 0x8df4
BBED> verify
DBVERIFY - Verification starting
FILE = /mnt/ramdisk/book/users01.dbf
BLOCK = 523
--//OK.
SCOTT@book> alter system flush buffer_cache;
System altered.
SCOTT@book> select rowid,dept1.* from dept1;
ROWID DEPTNO DNAME LOC
------------------ ---------- -------------- -------------
AAAWPyAAEAAAAILAAA 10 ACCOUNTING NEW YORK
AAAWPyAAEAAAAILAAB 20 RESEARCH DALLAS
AAAWPyAAEAAAAILAAC 30 SALES CHICAGO
AAAWPyAAEAAAAILAAD 40 OPERATIONS BOSTON
--//随便说一下,不要再使用modify修改信息,这样非常容易出错(要考虑大小头问题).使用assign简单快捷,很少出错.
--//简直就像小时候玩变形金刚的游戏.
[20190213]学习bbed-恢复删除的数据.txt的更多相关文章
- Node.js学习之TCP/IP数据通讯
Node.js学习之TCP/IP数据通讯 1.使用net模块实现基于TCP的数据通讯 提供了一个net模块,专用于实现TCP服务器与TCP客户端之间的通信 1.1创建TCP服务器 在Node.js利用 ...
- Pandas学习(一)——数据的导入
欢迎加入python学习交流群 667279387 学习笔记汇总 Pandas学习(一)–数据的导入 pandas学习(二)–双色球数据分析 pandas学习(三)–NAB球员薪资分析 pandas学 ...
- ios网络学习------6 json格式数据的请求处理
ios网络学习------6 json格式数据的请求处理 分类: IOS2014-06-30 20:33 471人阅读 评论(3) 收藏 举报 #import "MainViewContro ...
- Java学习-028-JSON 之二 -- 数据读取
JSON数据由 JSONObject.JSONArray.key_value 组合而成.通常来说,JSONObject 可以包含 JSONObject.JSONArray.key_value:JSON ...
- 导入表数据 txt
导入表数据 txt mysql> load data infile "D:/import.txt" into table shop;输出: Query OK, rows af ...
- [20190213]测试服务端打开那些端口.txt
[20190213]测试服务端打开那些端口.txt --//前几天测试使用发送信息到/dev/tcp/ip_address/port,测试端口是否打开.写简单写一个脚本验证看看. $ seq 1 65 ...
- [20170623]利用传输表空间恢复部分数据.txt
[20170623]利用传输表空间恢复部分数据.txt --//昨天我测试使用传输表空间+dblink,上午补充测试发现表空间设置只读才能执行impdp导入原数据,这个也很好理解.--//这样的操作模 ...
- 微信小程序开发:学习笔记[9]——本地数据缓存
微信小程序开发:学习笔记[9]——本地数据缓存 快速开始 说明 本地数据缓存是小程序存储在当前设备上硬盘上的数据,本地数据缓存有非常多的用途,我们可以利用本地数据缓存来存储用户在小程序上产生的操作,在 ...
- springmvc学习笔记(18)-json数据交互
springmvc学习笔记(18)-json数据交互 标签: springmvc springmvc学习笔记18-json数据交互 springmvc进行json交互 环境准备 加入json转换的依赖 ...
随机推荐
- Java多线程之二(Synchronized)
常用API method 注释 run() run()方法是我们创建线程时必须要实现的方法,但是实际上该方法只是一个普通方法,直接调用并没有开启线程的作用. start() start()方法作用为使 ...
- 32位汇编第五讲,逆向实战干货,(OD)快速定位扫雷内存.
32位第五讲,逆向实战干货,快速定位扫雷内存. 首先,在逆向之前,大家先对OD有一个认识. 一丶OD的使用 标号1: 反汇编窗口 (显示代码的地址,二进制指令,汇编代码,注释) 标号2: 寄存器窗口( ...
- [机器学习]回归--Decision Tree Regression
CART决策树又称分类回归树,当数据集的因变量为连续性数值时,该树算法就是一个回归树,可以用叶节点观察的均值作为预测值:当数据集的因变量为离散型数值时,该树算法就是一个分类树,可以很好的解决分类问题. ...
- 编码(1)学点编码知识又不会死:Unicode的流言终结者和编码大揭秘
学点编码知识又不会死:Unicode的流言终结者和编码大揭秘 http://www.freebuf.com/articles/web/25623.html 如果你是一个生活在2003年的程序员,却不了 ...
- 使用3D Slicer对图像进行配准
在进行深度学习之前,我们需要图像进行一些预处理操作,其中配准是很重要的一环,以下将介绍使用软件3D Slicer来进行图像配准 3D Slicer是(1)一个软件平台,用以图像分析(包括配准和实时编辑 ...
- 痞子衡嵌入式:恩智浦LPC系列MCU开发那些事 - 索引
大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是恩智浦LPC系列微控制器相关知识. 恩智浦半导体最早于2003年便开始推出LPC系列MCU,但早期的产品LPC2000/3000系列属 ...
- com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver
com.mysql.jdbc.Driver 是 mysql-connector-java 5中的,com.mysql.cj.jdbc.Driver 是 mysql-connector-java 6中的 ...
- SHELL脚本--简介
bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 脚本都以#!/bin/bash开头,“#”称为sharp,“! ...
- ORA-00257 archiver error的处理
ORA-00257 archiver error的处理 检查flash recovery area的使用情况 SQL> set linesize 100 SQL> col paramete ...
- 建了个QQ群,不定期分享一些资料,欢迎加入
技术源于生活,大家一起进阶 Java学习交流QQ群:603654340 大数据学习交流QQ群:217770236 感谢您的来访,不妨关注一下我吧……