ITPub博客

首页 > 数据库 > Oracle > [20210128]拼接数据块.txt

[20210128]拼接数据块.txt

原创 Oracle 作者:lfree 时间:2021-01-28 16:35:33 0 删除 编辑

[20210128]拼接数据块.txt

--//昨天测试[20210126]探究oracle内存分配4.txt,链接http://blog.itpub.net/267265/viewspace-2753605/
--//使用X$KSMMEM视图,实际上该视图可以看到共享内存段的全部信息,这样利用这个视图应该可以看到数据块的信息.
--//测试使用它拼接数据块看看.

1.环境:
SYS@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

2.测试:
SCOTT@book> select rowid,dept.* from dept;

ROWID                  DEPTNO DNAME          LOC
------------------ ---------- -------------- -------------
AAAVRCAAEAAAACHAAA         10 ACCOUNTING     NEW YORK
AAAVRCAAEAAAACHAAB         20 RESEARCH       DALLAS
AAAVRCAAEAAAACHAAC         30 SALES          CHICAGO
AAAVRCAAEAAAACHAAD         40 OPERATIONS     BOSTON

SCOTT@book> @ rowid AAAVRCAAEAAAACHAAB
    OBJECT       FILE      BLOCK        ROW ROWID_DBA            DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
     87106          4        135          1  0x1000087           4,135                alter system dump datafile 4 block 135 ;

SYS@book> set verify off
SYS@book> @ bh 4 135
   INST_ID HLADDR              DBARFIL     DBABLK      CLASS CLASS_TYPE         STATE             TCH CR_SCN_BAS CR_SCN_WRP CR_UBA_FIL CR_UBA_BLK CR_UBA_SEQ BA               LE_ADDR          OBJECT_NAME
---------- ---------------- ---------- ---------- ---------- ------------------ ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------- ---------------- --------------------
         1 0000000084D25320          4        135          1 data block         xcur                1          0          0          0          0          0 0000000074B6E000 00               DEPT

--//BA=0000000074B6E000.
--//8192 = 0x2000
--//0x0000000074B6E000+0x2000 = 1958150144 = 0x74b70000

--//说明一点,如果KSMMMVAL全部是0,该视图显示:
SYS@book> SELECT * FROM X$KSMMEM where addr=hextoraw('0000000074B6E1A0');
ADDR                   INDX    INST_ID KSMMMVAL
---------------- ---------- ---------- ----------------
0000000074B6E1A0   43441204          1 00

set head off
set feedback off
spool 4_135.txt
SELECT KSMMMVAL FROM X$KSMMEM WHERE addr >= hextoraw('0000000074B6E000') and  addr< hextoraw('0000000074B70000') and rownum<=1024;
spool off

--//感觉有点慢,加入rownum<=1024快一点点.仅仅等于可以使用内部索引.

3. 尝试观察:

$ sed 's/^00$/00000000/' 4_135.txt | tail -1
8F1706014B524F59

BBED> dump /v offset 8184
 File: /mnt/ramdisk/book/users01.dbf (4)
 Block: 135                               Offsets: 8184 to 8191                            Dba:0x01000087
-----------------------------------------------------------------------------------------------------------
 594f524b 0106178f                                                       l YORK....

--//1行8个字节,注意看由于CPU的大小头问题,完成是颠倒过来的.麻烦的是8个字节颠倒.od -t x8可以实现颠倒.

$ sed 's/^00$/0000000000000000/' 4_135.txt | xxd -r -p | od -t x8 | cut -c9-| xxd -r -p | xxd -c 16 -g 2 | tail
0001f60: 6574 2f55 524c 436c 6173 734c 6f61 6465  et/URLClassLoade
0001f70: 7224 3402 c102 ff02 c11e 0778 7108 180c  r$4.?.?.xq...
0001f80: 2e12 0778 7108 180c 2e12 0778 7108 180c  ...xq......xq...
0001f90: 2e12 02c1 02ff ff02 c149 ff02 c107 04c3  ...?.罥.?.?
0001fa0: 2c00 0302 c129 0a4f 5045 5241 5449 4f4e  ,...?.OPERATION
0001fb0: 5306 424f 5354 4f4e 2c00 0302 c11f 0553  S.BOSTON,...?.S
0001fc0: 414c 4553 0743 4849 4341 474f 2c00 0302  ALES.CHICAGO,...
0001fd0: c115 0852 4553 4541 5243 4806 4441 4c4c  ?.RESEARCH.DALL
0001fe0: 4153 2c02 0302 c10b 0a41 4343 4f55 4e54  AS,...?.ACCOUNT
0001ff0: 494e 4708 4e45 5720 594f 524b 0106 178f  ING.NEW YORK....

$ xxd -c16 -g 2 -s 1105920 -l 8192 /mnt/ramdisk/book/users01.dbf | tail
010ff60: 6574 2f55 524c 436c 6173 734c 6f61 6465  et/URLClassLoade
010ff70: 7224 3402 c102 ff02 c11e 0778 7108 180c  r$4.?.?.xq...
010ff80: 2e12 0778 7108 180c 2e12 0778 7108 180c  ...xq......xq...
010ff90: 2e12 02c1 02ff ff02 c149 ff02 c107 04c3  ...?.罥.?.?
010ffa0: 2c00 0302 c129 0a4f 5045 5241 5449 4f4e  ,...?.OPERATION
010ffb0: 5306 424f 5354 4f4e 2c00 0302 c11f 0553  S.BOSTON,...?.S
010ffc0: 414c 4553 0743 4849 4341 474f 2c00 0302  ALES.CHICAGO,...
010ffd0: c115 0852 4553 4541 5243 4806 4441 4c4c  ?.RESEARCH.DALL
010ffe0: 4153 2c02 0302 c10b 0a41 4343 4f55 4e54  AS,...?.ACCOUNT
010fff0: 494e 4708 4e45 5720 594f 524b 0106 178f  ING.NEW YORK....

--//上下对比完全一致.

$ diff <(sed 's/^00$/0000000000000000/' 4_135.txt | xxd -r -p | od -t x8 | cut -c9-| xxd -r -p | xxd -c 16 -g 2 | cut -c9-) <(xxd -c16 -g 2 -s 1105920 -l 8192 /mnt/ramdisk/book/users01.dbf| cut -c9- )

--//纯粹无聊,就算练习一些bash shell编程吧^_^.

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

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

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969436