[20210318]bbed读取数据块.txt --//昨天同事一个小错误,本来是dml操作错误,需要恢复部分数据,然后导入,结果操作顺序出现错误,同事先做了truncate。 --//导致执行select * from ... as of timestamp 时报错表定义已经改变。我估计应该是先执行了select * from ... as of timestamp, --//发现需要恢复的信息,然后在选择truncate,再次执行时报错。当然最后是有惊无险,dg是打开闪回的,恢复到特定时间,在恢复就 --//ok了。 --//我再想truncate后如果没有覆盖,读取原来的数据块信息还是可行的,我尝试bbed看看是否能读取数据,然后再导入数据。 --//仔细想想还是不行,主要会遇到会遇到各种无法预知的情况,比如行链接以及迁移,恢复表很大都是因素。不过我先那emp表来练习看看。 --//读取数据块信息再导入看看是否可行。 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 2.准备: SCOTT@book> select rowid from emp where rownum=1; ROWID ------------------ AAAVREAAEAAAACXAAA SCOTT@book> @ rowid AAAVREAAEAAAACXAAA OBJECT FILE BLOCK ROW ROWID_DBA DBA TEXT ---------- ---------- ---------- ---------- -------------------- -------------------- ---------------------------------------- 87108 4 151 0 0x1000097 4,151 alter system dump datafile 4 block 151 ; --//就拿dba=4,151的数据块来测试。 3.测试: $ cat fff.sh #! /bin/bash dba=4,151 kdbr_size=$(echo map dba $dba | rlbbed | grep "sb2 kdbr" | sed -e "s/^.*\[//;s/].*$//") #echo $kdbr_size begin=0 end=$[ kdbr_size -1 ] while [ $begin -le $end ] do kdbr_off=$(echo p dba $dba offset 0 kdbr | rlbbed | grep "sb2 kdbr\[$begin\]" | awk '{print $NF'}) #echo $kdbr_off # if [ $kdbr_off -gt $kdbr_size ] # if [[ $kdbr_off > $kdbr_size ]] if (( $kdbr_off > $kdbr_size )) then echo -n "x /rnccntnnn dba $dba *kdbr[$begin]" | rlbbed | grep "^col " | cut -c20- | paste -sd'|' fi begin=$[ begin + 1 ] done --//补充说明一些细节: $ echo p dba $dba offset 0 kdbr | rlbbed | grep "sb2 kdbr\[0\]" BBED> sb2 kdbr[0] @118 8050 $ echo p dba $dba offset 0 kdbr | rlbbed | grep "sb2 kdbr\[1\]" sb2 kdbr[1] @120 8007 --//过滤输出sb2 kdbr[0]时有一点点问题,多了1个BBED>开头,awk 只能改为awk '{print $NF'}。 --//这样保证不会出错,bbed如何规避这个问题呢? --//我以前写的tab$脚本是否会遇到类似的问题呢? $ . fff.sh 7369 |SMITH|CLERK|7902 |1980-12-17 00:00:00 |800 |*NULL*|20 7499 |ALLEN|SALESMAN|7698 |1981-02-20 00:00:00 |1600 |300 |30 7521 |WARD|SALESMAN|7698 |1981-02-22 00:00:00 |1250 |500 |30 7566 |JONES|MANAGER|7839 |1981-04-02 00:00:00 |2975 |*NULL*|20 7654 |MARTIN|SALESMAN|7698 |1981-09-28 00:00:00 |1250 |1400 |30 7698 |BLAKE|MANAGER|7839 |1981-05-01 00:00:00 |2850 |*NULL*|30 7782 |CLARK|MANAGER|7839 |1981-06-09 00:00:00 |2450 |*NULL*|10 7788 |SCOTT|ANALYST|7566 |1987-04-19 00:00:00 |3000 |*NULL*|20 7839 |KING|PRESIDENT|*NULL*|1981-11-17 00:00:00 |5000 |*NULL*|10 7844 |TURNER|SALESMAN|7698 |1981-09-08 00:00:00 |1500 |0 |30 7876 |ADAMS|CLERK|7788 |1987-05-23 00:00:00 |1100 |*NULL*|20 7900 |JAMES|CLERK|7698 |1981-12-03 00:00:00 |950 |*NULL*|30 7902 |FORD|ANALYST|7566 |1981-12-03 00:00:00 |3000 |*NULL*|20 7934 |MILLER|CLERK|7782 |1982-01-23 00:00:00 |1300 |*NULL*|10 --//注意一些细节bbed取出的数据字符串后面没有空格外,其它都有1个空格在结尾,并且NULL使用*NULL*表示。 --//另外分割符可以使用ascii(7),对应ctrl+g,在linux下可以通过ctrl+v ,ctrl+g输入,避免冲突。我的测试使用|作为分隔符。 4.导入看看: SCOTT@book> create table empx as select * from emp where 1=2; Table created. --//整理本文如下,使用vim的替换功能: --//:%s+ |+|+g --//:%s+ $++g --//:%s+|\*NULL\*|++g 7369|SMITH|CLERK|7902|1980-12-17 00:00:00|800||20 7499|ALLEN|SALESMAN|7698|1981-02-20 00:00:00|1600|300|30 7521|WARD|SALESMAN|7698|1981-02-22 00:00:00|1250|500|30 7566|JONES|MANAGER|7839|1981-04-02 00:00:00|2975||20 7654|MARTIN|SALESMAN|7698|1981-09-28 00:00:00|1250|1400|30 7698|BLAKE|MANAGER|7839|1981-05-01 00:00:00|2850||30 7782|CLARK|MANAGER|7839|1981-06-09 00:00:00|2450||10 7788|SCOTT|ANALYST|7566|1987-04-19 00:00:00|3000||20 7839|KING|PRESIDENT||1981-11-17 00:00:00|5000||10 7844|TURNER|SALESMAN|7698|1981-09-08 00:00:00|1500|0|30 7876|ADAMS|CLERK|7788|1987-05-23 00:00:00|1100||20 7900|JAMES|CLERK|7698|1981-12-03 00:00:00|950||30 7902|FORD|ANALYST|7566|1981-12-03 00:00:00|3000||20 7934|MILLER|CLERK|7782|1982-01-23 00:00:00|1300||10 --//导入细节略,我是使用toad自带的import功能实现的。 SCOTT@book> select * from empx minus select * from emp; no rows selected SCOTT@book> select * from emp minus select * from empx; no rows selected 4.总结: --//不实用,问题多多,权当做练习吧。 --//有机会再完成更加复杂的情况,总之遇到特殊情况不好处理通过bbed,特别行迁移以及链接的情况。
[20210318]bbed读取数据块.txt
来源:这里教程网
时间:2026-03-03 16:32:35
作者:
编辑推荐:
- [20210318]bbed读取数据块.txt03-03
- 【TUNE_ORACLE】Oracle数据库与HugePages(一)HugePages概念和优势03-03
- 关于SCN需要知道的事03-03
- RMAN备份异机恢复03-03
- 需要了解的Data Guard理论知识(一)03-03
- [20210318]bbed读取数据块2.txt03-03
- [20210319]bbed读取数据块3.txt03-03
- 利用vmware创建rac共享磁盘03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 利用vmware创建rac共享磁盘
利用vmware创建rac共享磁盘
26-03-03 - awr-----一份经典的负载很高的awr报告
awr-----一份经典的负载很高的awr报告
26-03-03 - ORACLE dbca执行到40%报错之ORA-12154
ORACLE dbca执行到40%报错之ORA-12154
26-03-03 - 【/proc/文件浅析】另类办法恢复数据文件和控制文件
【/proc/文件浅析】另类办法恢复数据文件和控制文件
26-03-03 - 使用sql tuning advisor优化sql
使用sql tuning advisor优化sql
26-03-03 - Oracle监听日志清除
Oracle监听日志清除
26-03-03 - Oracle 19C RAC open_links_per_instance参数问题
- read by other session 等待事件分析
read by other session 等待事件分析
26-03-03 - Oracle sqlldr工具功能测试
Oracle sqlldr工具功能测试
26-03-03 - SQLServer 2012复制订阅数据订阅过程
SQLServer 2012复制订阅数据订阅过程
26-03-03
