ITPub博客

首页 > 数据库 > Oracle > [20210318]bbed读取数据块2.txt

[20210318]bbed读取数据块2.txt

原创 Oracle 作者:lfree 时间:2021-03-19 15:18:39 1 删除 编辑

[20210318]bbed读取数据块2.txt

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 t as select * from all_objects where rownum<=1000;
Table created.

SCOTT@book> select object_id,data_object_id from dba_objects where owner=user and object_name='T';
 OBJECT_ID DATA_OBJECT_ID
---------- --------------
     90967          90967

2.建立脚本,测试读取看看。

$ cat fff.sh
#! /bin/bash -x
# 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

# scan1 begin_block to end_block,define Scope.
/bin/rm scan1.txt
while [ $begin_block -le $end_block ]
do
    v_object_id=$(echo "p /d dba $file_number,$begin_block  ktbbh.ktbbhsid.ktbbhod1" | rlbbed | grep ktbbhod1 |awk '{print $NF}')
    if [ -z "$v_object_id" ]
    then
            v_object_id=0
    fi

    if (( $v_object_id == $data_object_id ))
    then
            echo $file_number,$begin_block >> scan1.txt
    fi
    begin_block=$[ begin_block + 1 ]
done

# scan2 kdbr and display record.

cat scan1.txt |while read dba
do
    #echo set dba $dba
    kdbr_size=$(echo map dba $dba | rlbbed | grep "sb2 kdbr" | sed -e "s/^.*\[//;s/].*$//")
    #echo $kdbr_size

    begin=0
    end=$[ kdbr_size -1 ]
    #echo $begin $end

    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 /rcccnncttcccccnc dba $dba *kdbr[$begin]" | rlbbed  | grep "^col " | cut -c20- |  paste -sd'|'
        fi
        begin=$[ begin + 1 ]
    done
done

3.恢复看看:
$ . fff.sh 4 731 800 90967 >|laji.txt

--//使用toad导入
--//整理本文如下,使用vim的替换功能:
--//:%s+ |+|+g
--//:%s+ $++g
--//:%s+|\*NULL\*|++g

4.测试恢复情况:
--//导入细节略,我是使用toad自带的import功能实现的,步骤有点烦锁。
SCOTT@book> create table ty as select * from all_objects where 1=2;
Table created.

SCOTT@book> select * from t minus select * from ty;
no rows selected

SCOTT@book> select * from ty minus select * from t;
no rows selected

5.总结:
--//不是很实用,如果delete记录,输出会出现空行。而且记录多,处理起来很慢。
--//无法解决行链接和行迁移问题。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2763810/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969578