[20210831]bbed读取数据块6.txt[通俗易懂]

[20210831]bbed读取数据块6.txt[通俗易懂][20210831]bbed读取数据块6.txt–//前一段时间使用自己写的脚本读取数据块,遇到1个小问题,就是字段串超长就仅仅显示1段。–//实际上bbed最大显示宽度是300,我测试最大显示2

[20210831]bbed读取数据块6.txt

[20210831]bbed读取数据块6.txt

–//前一段时间使用自己写的脚本读取数据块,遇到1个小问题,就是字段串超长就仅仅显示1段。
–//实际上bbed最大显示宽度是300,我测试最大显示275个字符.

1.问题提出:
BBED> set width 300
        WIDTH           300

BBED> set width 301
BBED-00208: out of range WIDTH (301)

$ . fff.sh 1 521 523 59 rnnc | grep -ni undo
8:15 |15|CREATE TABLE UNDO$(“US#” NUMBER NOT NULL,”NAME” VARCHAR2(30) NOT NULL,”USER#” NUMBER NOT NULL,”FILE#” NUMBER NOT NULL,”BLOCK#” NUMBER NOT NULL,”SCNBAS” NUMBER,”SCNWRP” NUMBER,”XACTSQN” NUMBER,”UNDOSQN” NUMBER,”INST#” NUMBER,”STATUS$” NUMBER NOT NULL,”TS#” NUMBER,”UGRP#” NUMB
9:34 |34|CREATE UNIQUE INDEX I_UNDO1 ON UNDO$(US#) PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE (  INITIAL 64K NEXT 1024K MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 OBJNO 34 EXTENTS (FILE 1 BLOCK 320))
10:35 |35|CREATE INDEX I_UNDO2 ON UNDO$(NAME) PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE (  INITIAL 64K NEXT 1024K MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 OBJNO 35 EXTENTS (FILE 1 BLOCK 328))
32:16 |16|CREATE TABLE TS$(“TS#” NUMBER NOT NULL,”NAME” VARCHAR2(30) NOT NULL,”OWNER#” NUMBER NOT NULL,”ONLINE$” NUMBER NOT NULL,”CONTENTS$” NUMBER NOT NULL,”UNDOFILE#” NUMBER,”UNDOBLOCK#” NUMBER,”BLOCKSIZE” NUMBER NOT NULL,”INC#” NUMBER NOT NULL,”SCNWRP” NUMBER,”SCNBAS” NUMBER,”DFLMI
–//太长看不出完整语句.不过从前面的行号可以推断在dba=1,521块的行7。”

BBED> x /rnnc dba 1,521 *kdbr[7]
rowdata[4739]                               @6029
————-
flag@6029: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@6030: 0x01
cols@6031:    3

col    0[2] @6032: 15
col    1[2] @6035: 15
col  2[600] @6038: CREATE TABLE UNDO$(“US#” NUMBER NOT NULL,”NAME” VARCHAR2(30) NOT NULL,”USER#” NUMBER NOT NULL,”FILE#” NUMBER NOT NULL,”BLOCK#” NUMBER NOT NULL,”SCNBAS” NUMBER,”SCNWRP” NUMBER,”XACTSQN” NUMBER,”UNDOSQN” NUMBER,”INST#” NUMBER,”STATUS$” NUMBER NOT NULL,”TS#” NUMBER,”UGRP#” NUMB
ER,”KEEP” NUMBER,”OPTIMAL” NUMBER,”FLAGS” NUMBER,”SPARE1″ NUMBER,”SPARE2″ NUMBER,”SPARE3″ NUMBER,”SPARE4″ VARCHAR2(1000),”SPARE5″ VARCHAR2(1000),”SPARE6″ DATE) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE (  INITIAL 64K NEXT 1024K MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 OBJNO
15 EXTENTS (FILE 1 BLOCK 224))

2.问题解决:

–//花一点点时间改善这个问题,实际上还有许多麻烦事情,比如即使解决了显示宽度问题,还可能遇到半个汉字的问题,还有如果字符
–//串含有回车换行等字符时,情况更加复杂。这种情况暂时不考虑.
–//注意:sed 命令如果里面含$,要使用单引号,调式时在这里浪费许多时间.

$ cat fff.sh
#! /bin/bash -x
# argv1=file_number argv2=begin_block argvs3=end_block argv4=data_object_id argv5=bbed /x format
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

# scan1 begin_block to end_block,define Scope.
/bin/rm scan1.txt 2>/dev/null
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 ))
        then
            #echo -n “x $ff dba $dba *kdbr[$begin]” | rlbbed  | grep “^col ” | cut -c20- | sed -f ff.sed | paste -sd”|”
            #echo -n “x $ff dba $dba *kdbr[$begin]” | rlbbed | sed -n “/^col /,${s/^col .{13}: //;p;}” | sed “/^BBED/,$d” | tr -d ” ” | sed “1s///” |tr “” ” “| sed -f ff.sed| paste -sd”|”
            echo -n “x $ff dba $dba *kdbr[$begin]” | rlbbed | sed -n “/^col /,${s/^col .{13}: /^G/;p;}” | sed “/^BBED/,$d” | tr -d ” ” | sed “1s/^G//” |tr “^G” ” “| sed -f ff.sed| paste -sd”|”
        fi
        begin=$[ begin + 1 ]
    done
done

–//^G 表示 ascii(7).
–//在linux下vim的输入模式,使用如下方法输入,windows下使用ctrl+q代替ctrl+v
ascii(7) 使用ctrl+v ctrl+g 输入。
ascii(6) 使用ctrl+v ctrl+f 输入。

3.测试:
–//改写后的执行结果如下:
$ . fff.sh 4 151 151 87108 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-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

$ . fff.sh 1 521 523 59 nnc | grep -ni undo
8:15|15|CREATE TABLE UNDO$(“US#” NUMBER NOT NULL,”NAME” VARCHAR2(30) NOT NULL,”USER#” NUMBER NOT NULL,”FILE#” NUMBER NOT NULL,”BLOCK#” NUMBER NOT NULL,”SCNBAS” NUMBER,”SCNWRP” NUMBER,”XACTSQN” NUMBER,”UNDOSQN” NUMBER,”INST#” NUMBER,”STATUS$” NUMBER NOT NULL,”TS#” NUMBER,”UGRP#” NUMBER,”KEEP” NUMBER,”OPTIMAL” NUMBER,”FLAGS” NUMBER,”SPARE1″ NUMBER,”SPARE2″ NUMBER,”SPARE3″ NUMBER,”SPARE4″ VARCHAR2(1000),”SPARE5″ VARCHAR2(1000),”SPARE6″ DATE) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE (  INITIAL 64K NEXT 1024K MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 OBJNO 15 EXTENTS (FILE 1 BLOCK 224))
9:34|34|CREATE UNIQUE INDEX I_UNDO1 ON UNDO$(US#) PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE (  INITIAL 64K NEXT 1024K MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 OBJNO 34 EXTENTS (FILE 1 BLOCK 320))
10:35|35|CREATE INDEX I_UNDO2 ON UNDO$(NAME) PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE (  INITIAL 64K NEXT 1024K MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 OBJNO 35 EXTENTS (FILE 1 BLOCK 328))
32:16|16|CREATE TABLE TS$(“TS#” NUMBER NOT NULL,”NAME” VARCHAR2(30) NOT NULL,”OWNER#” NUMBER NOT NULL,”ONLINE$” NUMBER NOT NULL,”CONTENTS$” NUMBER NOT NULL,”UNDOFILE#” NUMBER,”UNDOBLOCK#” NUMBER,”BLOCKSIZE” NUMBER NOT NULL,”INC#” NUMBER NOT NULL,”SCNWRP” NUMBER,”SCNBAS” NUMBER,”DFLMINEXT” NUMBER NOT NULL,”DFLMAXEXT” NUMBER NOT NULL,”DFLINIT” NUMBER NOT NULL,”DFLINCR” NUMBER NOT NULL,”DFLMINLEN” NUMBER NOT NULL,”DFLEXTPCT” NUMBER NOT NULL,”DFLOGGING” NUMBER NOT NULL,”AFFSTRENGTH” NUMBER NOT NULL,”BITMAPPED” NUMBER NOT NULL,”PLUGGED” NUMBER NOT NULL,”DIRECTALLOWED” NUMBER NOT NULL,”FLAGS” NUMBER NOT NULL,”PITRSCNWRP” NUMBER,”PITRSCNBAS” NUMBER,”OWNERINSTANCE” VARCHAR2(30),”BACKUPOWNER” VARCHAR2(30),”GROUPNAME” VARCHAR2(30),”SPARE1″ NUMBER,”SPARE2″ NUMBER,”SPARE3″ VARCHAR2(1000),”SPARE4″ DATE) STORAGE (  OBJNO 16 TABNO 2) CLUSTER C_TS#(TS#)

–//顺便测试半个汉字的问题.

SCOTT@book> create table tx (id number ,vc varchar2(30),vx varchar2(400));
Table created.

SCOTT@book> insert into tx values (3,”测试x”,lpad(“测试”,300,”文”));
1 row created.

SCOTT@book> commit ;
Commit complete.

SCOTT@book> select rowid from tx;
ROWID
——————
AAAW1lAAEAAAALkAAA

SCOTT@book> @ rowid AAAW1lAAEAAAALkAAA
    OBJECT       FILE      BLOCK        ROW ROWID_DBA            DBA                  TEXT
———- ———- ———- ———- ——————– ——————– —————————————-
     93541          4        740          0  0x10002E4           4,740                alter system dump datafile 4 block 740 ;

SCOTT@book> alter system checkpoint ;
System altered.

$ export NLS_LANG=AMERICAN_AMERICA.US7ASCII
$ rlbbed
BBED: Release 2.0.0.0.0 – Limited Production on Wed Sep 1 09:47:04 2021
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************

BBED> set count 64
        COUNT           64

BBED> set width 300
        WIDTH           300

BBED> x /rncc dba 4,740  *kdbr[0]
rowdata[0]                                  @7873
———-
flag@7873: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@7874: 0x01
cols@7875:    3

col    0[2] @7876: 3
col    1[5] @7879: 测试x
col  2[300] @7885: 文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文?
奈奈奈奈奈奈奈奈奈奈牟馐?
–//显示乱码.bbed设置width 300,每行最大显示275,这样出现半个汉字的情况.

–//如果设置 width 299,显示正常.
BBED> set width 299
        WIDTH           299

BBED> x /rncc dba 4,740  *kdbr[0]
rowdata[0]                                  @7873
———-
flag@7873: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@7874: 0x01
cols@7875:    3

col    0[2] @7876: 3
col    1[5] @7879: 测试x
col  2[300] @7885: 文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文
文文文文文文文文文文文测试

$ . fff.sh 4 740 740 93541 ncc > /tmp/aa1.txt
–//使用vim编辑器打开显示正常,太长不贴出了.

$ cut -c201- /tmp/aa1.txt
文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文测试
–//这也验证了显示正常.

4.收尾:
–//测试完成注意收尾.不然字符集不对导致插入的中文乱码问题.
$ export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5899.html

(0)
上一篇 2023-04-21 16:00
下一篇 2023-04-21

相关推荐

  • PostgreSQL的同步流复制配置

    PostgreSQL的同步流复制配置1.PostgreSQL主备数据库的同步设置主要涉及如下文件: 1. pg_hba.conf postgresql 主库访问规则文件 2. postgresql.conf postgresql 主库…

    2022-12-21
    176
  • Oracle入门学习六「终于解决」

    Oracle入门学习六「终于解决」事务:把一组操作看做一个工作单元,要么都执行,要么都不执行。dml操作才有事务,查询没有事务。 开始事务:从上一次的事务结束之后,从第一次dml操作,就自动开启了事务 提交事务:commit 回滚事务

    2023-02-24
    156
  • 以Python为中心

    以Python为中心Python是一种高级动态类型编程语言。它具有简单易学、代码可读性高、易于维护、支持多种编程范式等优点,因此在广泛的应用领域中具有很高的人气。本文将从不同的方面阐述Python的优点和应用。

    2024-06-27
    52
  • Python实现的洗牌算法

    Python实现的洗牌算法洗牌算法,也叫 Fisher–Yates shuffle,是一种用来将有限个元素随机排序的算法。该算法因 Ronald Fisher 和 Frank Yates 在 1938 年的一篇论文中提出,并于 1964 年被 Richard Durstenfeld 修改成现在使用的形式。

    2024-03-13
    85
  • 如何开启MySQL慢查询日志[通俗易懂]

    如何开启MySQL慢查询日志[通俗易懂]一、开启慢查询日志首先需要了解四个参数: slow_query_log # 是否开启慢查询日志,默认OFF,开启则设置为 ON。 slow_query_log_file # 慢查询日志文件存储位置。

    2022-12-17
    160
  • plsql编程教程_pl/sql developer怎么执行sql语句

    plsql编程教程_pl/sql developer怎么执行sql语句结构化查询语言(SQL)是第四代编程语言的典型,这种命令式的语言更像一种指令,使用它,你只需要告诉计算机“做什么”,而不用告诉计算机“怎么做”。第四代编程语言普遍具有简单、易学、能更快的投入生产等优点

    2023-03-09
    134
  • cassandra配置文件详解_cassandra使用场景

    cassandra配置文件详解_cassandra使用场景Cassandra的JMX服务的配置和开启

    2023-03-03
    142
  • dpsir框架_AI少女框架

    dpsir框架_AI少女框架DB4AI这个方向中,数据库通过集成AI能力,在用户进行AI计算时就可以避免数据搬运的问题。不同于其他的DB4AI框架,本次openGauss开源的原生框架是通过添加AI算子的方式完成数据库中的AI计

    2023-06-17
    134

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注