[20250513]建立完善finddoid.sh脚本3.txt --//从原来扫描数据文件取数据记录的脚本分离出来,写一个根据数据段号确定文件号以及块号的脚本,并增加确定数据段号的最大行 --//号的情况,前面改写感觉文件命名不合理再做一些修改。 $ cat finddoid.sh #!/bin/bash # argv1=file_number argv2=begin_block argvs3=end_block argv4=data_object_id file_number=$1 begin_block=$2 end_block=$3 data_object_id=$4 # scan begin_block to end_block,define search scope. /bin/rm scan1.txt 2>/dev/null #seq -f "%-1.0f" $begin_block $end_block | xargs -IQ echo -e "host echo $file_number,Q \np /d dba $file_number,Q ktbbh.ktbbhsid.ktbbhod1" | \ #rlbbed | grep "^BBED" | egrep "$file_number,|ub4 ktbbhod1" | awk '{print $NF}' | paste -d" " - - | awk -v a=$data_object_id '$2==a {print $1}' >| scan1.txt /bin/seq -f "%-1.0f" $begin_block $end_block | xargs -IQ echo -e "host echo -n $file_number,Q \np /d dba $file_number,Q ktbbh.ktbbhsid.ktbbhod1" | \ rlbbed | grep -B1 --no-group-separator "ub4 ktbbhod1" | awk '{print $NF}' | paste -d" " - - | awk -v a=$data_object_id '$2==a {print $1}' >| scan1.txt /bin/cp scan1.txt ${data_object_id}_scan.txt # scan begin_block to end_block,obtain max row. /bin/rm scan2.txt 2>/dev/null /bin/cat ${data_object_id}_scan.txt | xargs -IQ echo p dba Q kdbt[0].kdbtnrow | rlbbed | grep kdbtnrow | awk '{print $NF}' >| scan2.txt max_row=$(sort -nr scan2.txt | head -1) echo $data_object_id max_row = $max_row /bin/cp scan2.txt ${data_object_id}_max_rowsnum.txt echo echo scan result in ${data_object_id}_scan.txt, scan max rows num result in ${data_object_id}_max_rowsnum.txt echo --//顺便测试看看: 1.环境: SCOTT@book01p> @ ver2 ============================== PORT_STRING : x86_64/Linux 2.4.xx VERSION : 21.0.0.0.0 BANNER : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production BANNER_FULL : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production Version 21.3.0.0.0 BANNER_LEGACY : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production CON_ID : 0 PL/SQL procedure successfully completed. 2.测试: SCOTT@book01p> select * from dba_extents where segment_name='EMP' 2 @ pr ============================== OWNER : SCOTT SEGMENT_NAME : EMP PARTITION_NAME : SEGMENT_TYPE : TABLE TABLESPACE_NAME : USERS EXTENT_ID : 0 FILE_ID : 12 BLOCK_ID : 144 BYTES : 65536 BLOCKS : 8 RELATIVE_FNO : 12 PL/SQL procedure successfully completed. $ . finddoid.sh 12 144 $((144+8-1)) 76193 76193 max_row = 28 scan result in 76193_scan.txt, scan max rows num result in 76193_max_rowsnum.txt --//最大行号是28,emp表14条记录,该表里面记录删除再重新插入,这样的情况导致行号是28. $ paste 76193_scan.txt 76193_max_rowsnum.txt 12,147 12 12,148 0 12,149 0 12,150 28 12,151 0 SCOTT@book01p> select rowid from emp where rownum=1; ROWID ------------------ AAASmhAAMAAAACWAAN SCOTT@book01p> @ rowid AAASmhAAMAAAACWAAN DATA_OBJECT_ID FILE BLOCK ROW ROWID_DBA DBA TEXT -------------- ---------- ---------- ---------- -------------------- -------------------- -------------------------------------------------- 76193 12 150 13 0x3000096 12,150 alter system dump datafile 12 block 150 ; --//通过bbed观察可以发现: BBED> p dba 12,150 kdbt[0].kdbtnrow sb2 kdbtnrow @116 28 BBED> p dba 12,150 kdbr sb2 kdbr[0] @118 1 sb2 kdbr[1] @120 2 sb2 kdbr[2] @122 3 sb2 kdbr[3] @124 4 sb2 kdbr[4] @126 5 sb2 kdbr[5] @128 6 sb2 kdbr[6] @130 7 sb2 kdbr[7] @132 8 sb2 kdbr[8] @134 9 sb2 kdbr[9] @136 10 sb2 kdbr[10] @138 11 sb2 kdbr[11] @140 12 sb2 kdbr[12] @142 24 sb2 kdbr[13] @144 6505 sb2 kdbr[14] @146 6462 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sb2 kdbr[15] @148 6419 sb2 kdbr[16] @150 6378 sb2 kdbr[17] @152 6333 sb2 kdbr[18] @154 6292 sb2 kdbr[19] @156 6251 sb2 kdbr[20] @158 6211 sb2 kdbr[21] @160 6173 sb2 kdbr[22] @162 6130 sb2 kdbr[23] @164 6092 sb2 kdbr[24] @166 -1 sb2 kdbr[25] @168 6054 sb2 kdbr[26] @170 6015 sb2 kdbr[27] @172 5976 --//最后1列是记录是相对偏移,绝对偏移需要加+kdbh的偏移。 --//偏移小于kdbt[0].kdbtnrow的情况记录的是可以重新使用的行目录链表,数值指向下1个行目录,-1表示结尾。 BBED> p dba 12,150 kdbh struct kdbh, 14 bytes @100 ub1 kdbhflag @100 0x00 (NONE) sb1 kdbhntab @101 1 sb2 kdbhnrow @102 28 sb2 kdbhfrre @104 0 sb2 kdbhfsbo @106 74 sb2 kdbhfseo @108 5976 sb2 kdbhavsp @110 7447 sb2 kdbhtosp @112 7447 --//kdbh的偏移 是100. SCOTT@book01p> @ bbedcol12 scott emp DISPLAY BBED EXAMINE(X) FORMAT C80 -------------------------------------------------------------------------------- nccntnnn BBED> x /rnccntnnn dba 12,150 *kdbr[14] rowdata[486] @6562 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ------------ flag@6562: 0x2c (KDRHFL, KDRHFF, KDRHFH) lock@6563: 0x00 cols@6564: 8 col 0[3] @6565: 7499 col 1[5] @6569: ALLEN col 2[8] @6575: SALESMAN col 3[3] @6584: 7698 col 4[7] @6588: 1981-02-20 00:00:00 col 5[2] @6596: 1600 col 6[2] @6599: 300 col 7[2] @6602: 30 --//下划线记录的是绝对偏移 6462+100 = 6562。 --//看看dba 12,147的情况: BBED> p dba 12,147 kdbt[0].kdbtnrow sb2 kdbtnrow @116 12 BBED> p dba 12,147 kdbr sb2 kdbr[0] @118 8050 sb2 kdbr[1] @120 8007 sb2 kdbr[2] @122 7964 sb2 kdbr[3] @124 7923 sb2 kdbr[4] @126 7878 sb2 kdbr[5] @128 7837 sb2 kdbr[6] @130 7796 sb2 kdbr[7] @132 7758 sb2 kdbr[8] @134 7715 sb2 kdbr[9] @136 7677 sb2 kdbr[10] @138 7638 sb2 kdbr[11] @140 7599 BBED> x /rnccntnnn dba 12,147 *kdbr[0] rowdata[451] @8150 ------------ flag@8150: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH) lock@8151: 0x02 cols@8152: 0 --//已经删除了。 $ . /home/oracle/sqllaji/bbed/fffext.sh 12 147 150 76193 nccntnnn 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-07-13 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-07-13 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 --//读取没有问题。 3.继续: SCOTT@book01p> create table t4 (id number ,text clob); Table created. SCOTT@book01p> insert into t4 select rownum,to_char(rownum)||lpad('x',3964,'x') from dual connect by level <=1e4; 10000 rows created. SCOTT@book01p> @ o2 t4 SCOTT@book01p> @ pr ============================== O_OWNER : SCOTT O_OBJECT_NAME : T4 O_OBJECT_TYPE : TABLE SEG_PART_NAME : O_STATUS : VALID OID : 128574 D_OID : 128574 CREATED : 2025-05-13 08:55:49 LAST_DDL_TIME : 2025-05-13 08:55:49 PL/SQL procedure successfully completed. $ . finddoid.sh 12 128 32640 128574 128574 max_row = 153 scan result in 128574_scan.txt , scan max rows num result in 128574_max_rowsnum.txt $ paste 128574_scan.txt 128574_max_rowsnum.txt | head -6 12,171 151 12,172 151 12,173 151 12,174 151 12,175 153 12,216 151 --//这样在使用恢复脚本时最大行号不用采用很大的值,减少不必要的扫描。实际上行号从0开始计数,输入值采用152就可以了。
[20250513]建立完善finddoid.sh脚本3.txt
来源:这里教程网
时间:2026-03-03 21:57:01
作者:
编辑推荐:
- [20250513]建立完善finddoid.sh脚本3.txt03-03
- 评测揭秘!同一份外卖,拼好饭为什么更有性价比?03-03
- [20250513]bbed读取数据块8 fffext.sh.txt03-03
- [20250509]建立完善hidez.sql脚本.txt03-03
- [20250514]21c使用dbms_metadata.get_ddl参看临时表定义问题(整理).txt03-03
- 大表归档,要注意哪些坑?稍有不慎造成业务宕机!03-03
- 京东敢烧钱做外卖,原来是因为电商赚麻了03-03
- [20250514]truncare table相关数据段的确定与恢复.txt03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 评测揭秘!同一份外卖,拼好饭为什么更有性价比?
评测揭秘!同一份外卖,拼好饭为什么更有性价比?
26-03-03 - 京东敢烧钱做外卖,原来是因为电商赚麻了
京东敢烧钱做外卖,原来是因为电商赚麻了
26-03-03 - 深入浅出 Rust 并发:RwLock 与 Mutex 在 Tauri 项目中的实践
- 创新靶点与双机制策略崛起,AACR揭幕ADC治疗新纪元
创新靶点与双机制策略崛起,AACR揭幕ADC治疗新纪元
26-03-03 - Robotaxi新消息密集释放,量产元年来临谁在领跑?
Robotaxi新消息密集释放,量产元年来临谁在领跑?
26-03-03 - Oracle集群+ACFS竟让OGG故障率归零,太不可思议了!
Oracle集群+ACFS竟让OGG故障率归零,太不可思议了!
26-03-03 - 刘强东上街送外卖,美团王兴还睡得着吗?
刘强东上街送外卖,美团王兴还睡得着吗?
26-03-03 - 【KWDB 创作者计划】_KWDB引领数据库技术革新的璀璨之星
【KWDB 创作者计划】_KWDB引领数据库技术革新的璀璨之星
26-03-03 - 全娱乐生态驱动增长,从财报看阿里影业穿越周期的发展韧性
全娱乐生态驱动增长,从财报看阿里影业穿越周期的发展韧性
26-03-03 - 被问能不能不还钱,周鸿祎称360借条“不是我公司”!真相来了
被问能不能不还钱,周鸿祎称360借条“不是我公司”!真相来了
26-03-03
