[20210401]使用bbed讀取資料塊恢復注意6.txt

lfree發表於2021-04-01

[20210401]使用bbed讀取資料塊恢復注意6.txt

--//昨天下午QQ竟然收到資訊,問一下bbed讀取資料塊恢復問題,我實際上那個指令碼意義不大,不實用,在實際的恢復過程中會遇到各種
--//無法預知的情況。比如行連結以及表中有lob型別等問題,不過在簡單指導下對方回覆竟然讀取恢復成功了。

--//除了上面提到的問題外,還可能遇到的問題。

1.中文字符集問題。

--//一般資料塊字符集ZHS16GBK,估計現在可能有一些使用UTF8之類的字元。bbed讀取轉換為中文。要設定:
--//export NLS_LANG=AMERICAN_AMERICA.US7ASCII

$ echo $NLS_LANG
AMERICAN_AMERICA.ZHS16GBK

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

SCOTT@book> insert into tx values (1,'為你文化','aaa');
1 row created.

SCOTT@book> commit ;
Commit complete.

SCOTT@book> select rowid from tx ;
ROWID
------------------
AAAWWsAAEAAAALXAAA

SCOTT@book> @ rowid AAAWWsAAEAAAALXAAA
    OBJECT       FILE      BLOCK        ROW ROWID_DBA            DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
     91564          4        727          0  0x10002D7           4,727                alter system dump datafile 4 block 727 ;

$ export NLS_LANG=AMERICAN_AMERICA.US7ASCII
$ . fff.sh 4 727 727 91564 ncc
1|為你文化|aaa

--//注完成後給修改回來。不要其它連線工具會顯示亂碼。
$ export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

2.顯示寬度問題。
--//bbed最大顯示寬度是300,我測試最大275.
BBED> set width 300
        WIDTH           300

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

SCOTT@book> insert into tx values (2,'測試',lpad('x',310,'Y'));
1 row created.

SCOTT@book> commit ;
Commit complete.

SCOTT@book> alter system checkpoint ;
System altered.

BBED> x /rncc dba 4,727  *kdbr[1]
rowdata[0]                                  @7845
----------
flag@7845: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@7846: 0x02
cols@7847:    3

col    0[2] @7848: 2
col    1[4] @7851: 測試
col  2[310] @7856: YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYx

$ . fff.sh 4 727 727 91564 ncc
1|為你文化|aaa
2|測試|YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

--//而我的指令碼就截斷了輸出。實際上僅僅顯示最大長度275.要解決這個問題指令碼還要修改完善。

3.半個漢字的問題:
--//即使解決了顯示寬度問題,還可能遇到半個漢字的問題,這個也是很麻煩的情況。
SCOTT@book> insert into tx values (3,'測試x',lpad('測試',310,'文'));
1 row created.

SCOTT@book> commit ;
Commit complete.

SCOTT@book> alter system checkpoint ;
System altered.

BBED> x /rncc dba 4,727  *kdbr[2]
rowdata[0]                                  @7520
----------
flag@7520: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@7521: 0x01
cols@7522:    3

col    0[2] @7523: 3
col    1[5] @7526: 測試x
col  2[310] @7532: 文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文文?
奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈牟饈?

4.分割符號問題,我指令碼使用|作為分隔符,可能會遇到衝突的問題,建議使用ascii(6)或者ascii(7)代替。
--//在linux下vim的輸入模式,使用如下方法輸入,windows下使用ctrl+q代替ctrl+v
ascii(7) 使用ctrl+v ctrl+g 輸入。
ascii(6) 使用ctrl+v ctrl+f 輸入。

5.最好做好備份才是最最重要的事情,備份大於一切。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2766050/,如需轉載,請註明出處,否則將追究法律責任。

相關文章