[20251113]建立完善fffext.sh脚本.txt

来源:这里教程网 时间:2026-03-03 22:51:52 作者:

[20251113]建立完善fffext.sh脚本.txt --//以前写过一个通过bbed查看数据块的bash shell脚本,别人使用发现存在问题。 $ . fffext.sh 9 225 225 15 ncnnnnnnnnnnnnnnnnncct| head -4 0|SYSTEM|0|1|128|0|0|0|0|0|3|0|||||0 1|_SYSSMU1_274027410$|1|21|128|63392027|0|11318|1269|0|3|2|||||2 2|_SYSSMU2_3565078997$|1|21|144|63392033|0|11251|1776|0|3|2|||||2 col    0[2] @737: 3 col   1[18] @740: _SYSSMU3_69012697$col    2[2] @759: 1 col    3[2] @762: 21 col    4[3] @765: 160 col    5[5] @769: 63392035 col    6[1] @775: 0 col    7[4] @777: 11427 col    8[3] @782: 1008 col    9[1] @786: 0 col   10[2] @788: 3 col   11[2] @791: 2 col   12[0] @794: *NULL*col   13[0] @795: *NULL*col   14[0] @796: *NULL*col   15[0] @797: *NULL*col   16[2] @798: 2 --//取第4条记录时出现问题。使用bbed查看: BBED> x /rncnnnnnnnnnnnnnnnnncct dba 9,225 *kdbr[3] rowdata[0]                                  @734 ---------- flag@734:  0x2c (KDRHFL, KDRHFF, KDRHFH) lock@735:  0x00 cols@736:    17 col    0[2] @737: 3 col   1[18] @740: _SYSSMU3_69012697$ col    2[2] @759: 1 col    3[2] @762: 21 col    4[3] @765: 160 col    5[5] @769: 63392035 col    6[1] @775: 0 col    7[4] @777: 11427 col    8[3] @782: 1008 col    9[1] @786: 0 col   10[2] @788: 3 col   11[2] @791: 2 col   12[0] @794: *NULL* col   13[0] @795: *NULL* col   14[0] @796: *NULL* col   15[0] @797: *NULL* col   16[2] @798: 2 BBED> x /rncnnnnnnnnnnnnnnnnncct dba 9,225 *kdbr[0] rowdata[7412]                               @8146 ------------- flag@8146: 0x2c (KDRHFL, KDRHFF, KDRHFH) lock@8147: 0x00 cols@8148:   17 col    0[1] @8149: 0 col    1[6] @8151: SYSTEM col    2[1] @8158: 0 col    3[2] @8160: 1 col    4[3] @8163: 128 col    5[1] @8167: 0 col    6[1] @8169: 0 col    7[1] @8171: 0 col    8[1] @8173: 0 col    9[1] @8175: 0 col   10[2] @8177: 3 col   11[1] @8180: 0 col   12[0] @8182: *NULL* col   13[0] @8183: *NULL* col   14[0] @8184: *NULL* col   15[0] @8185: *NULL* col   16[1] @8186: 0 --//发现有问题的偏移仅仅百位,才发现自己的代码写死了,限制仅仅13个字符,修改如下13改为11,14,这样就没有问题了: --//注:里面的^G在vim的linux的插入模式下按ctrl+v ctrl+G 输入,实际上单个字符。windows按ctrl+q,ctrl+g。 --//还有^F类似。 --//补充说明脚本里面rlbbed。我定义为函数,修改为别名应该也可以。 --//执行的前面要加入点或者使用source开头。也可以先执行如下,在直接执行。 --//export -f rlbbed. --//或者 --//declare -x -f NAME $ which $BBED /u01/app/oracle/product/21.0.0/dbhome_1/bin/bbed $ export RLWRAP=$(which rlwrap) $ type rlbbed rlbbed is a function rlbbed () {     cd /home/oracle/bbed;     $RLWRAP -s 9999 -c -r -i -f /usr/local/share/rlwrap/bbed $BBED parfile=bbed.par cmdfile=cmd.par } $ cat bbed.par blocksize=8192 listfile=filelist.txt mode=edit PASSWORD=blockedit SPOOL=Y $ cat cmd.par set count 64 set width 160 --//filelist.txt文本可以通过如下输出建立。 select lpad(file#,6,' ')||'  '||name filelist from v$dbfile order by file#; --//fffext.sh代码如下: $ cat -v fffext.sh #! /bin/bash # argv1=file_number argv2=begin_block argvs3=end_block argv4=data_object_id argv5=bbed /x format #set -x file_number=$1 begin_block=$2 end_block=$3 data_object_id=$4 ff="/r"${5} # create sed script. a=$5 len=$( echo ${#a} ) seq $len | xargs -IQ expr substr $a Q 1 | grep -n '[nt]' | sed  's+:.$+s/ $//+' >| ff.sed echo 's+^\*NULL\*$++g' >> ff.sed # 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 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 # scan2 kdbr and display record. cat scan1.txt |while read dba do     #echo $dba     kdbr_size=$(echo p dba $dba kdbt[0].kdbtnrow | rlbbed| grep kdbtnrow | awk '{print $NF}')     #echo $kdbr_size     begin=0     end=$[ kdbr_size -1 ]     #echo $begin $end     #echo set dba $dba     IFSOLD=$IFS     echo p dba $dba offset 0 kdbr | rlbbed | grep "sb2 kdbr" | sed "1s/^BBED> //" | awk -F"[][ ]+" -v a=$kdbr_size '$NF > a {print $3}' | \     sed "s+^+x $ff dba $dba *kdbr[+;s+$+]+"| rlbbed | sed -n '/^col /,/^BBED> /{s/^col .\{11,14\}: /^G/;/^$/d;/^BBED> /s/^.*$/^F/;p;}'| tr -d "\n\r" | \     awk 'BEGIN{RS="^F"} {print $0}' | while read line     do        echo "$line" | sed "s/^G//" | tr "^G" "\n" | sed -f ff.sed| paste -sd"|"     done done $ . fffext.sh 9 225 225 15 ncnnnnnnnnnnnnnnnnncct| head -4 0|SYSTEM|0|1|128|0|0|0|0|0|3|0|||||0 1|_SYSSMU1_274027410$|1|21|128|63392027|0|11318|1269|0|3|2|||||2 2|_SYSSMU2_3565078997$|1|21|144|63392033|0|11251|1776|0|3|2|||||2 3|_SYSSMU3_69012697$|1|21|160|63392035|0|11427|1008|0|3|2|||||2 --//现在就没有问题了。

相关推荐

热文推荐