本文共 4648 字,大约阅读时间需要 15 分钟。
ningoo有两篇bbed的文章不错,按此做了下实验,也遇到了些问题至今无解。
介绍bbed: http://www.ningoo.net/html/2009/how_to_link_oracle_bbed_tools.html 查块结构:http://www.ningoo.net/html/tag/bbedbbed的使用及案例看这个:http://orafaq.com/papers/dissassembling_the_data_block.pdf
[@more@]在9i/10g中连接生成bbed: cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed 在11g中生成bbed,需要先从10g中复制如下文件到相应目录,然后再执行上述连接命令: $ORACLE_HOME/rdbms/lib/ssbbded.o $ORACLE_HOME/rdbms/lib/sbbdpt.o $ORACLE_HOME/rdbms/mesg/bbedus.msb bbed parfile=bbed.par 密码blockedit 下面是个修改block的实验: SQL> select * from adult; USERNAME USERPWD ------------------------------ ------------------------------ hello world cccgw 22596 SQL> select rowid from adult where username='cccgw'; ROWID ------------------ AAAFEdAAEAAAAEfAAC 用DBMS_ROWID获得dba SQL> create or replace function get_rowid 2 (l_rowid in varchar2) 3 return varchar2 4 is 5 ls_my_rowid varchar2(200); 6 rowid_type number; 7 object_number number; 8 relative_fno number; 9 block_number number; 10 row_number number; 11 begin 12 dbms_rowid.rowid_info(l_rowid,rowid_type,object_number,relative_fno, block_number,row_number); 13 ls_my_rowid := 'Object# is :'||to_char(object_number)||chr(10)|| 14 'Relative_fno is :'||to_char(relative_fno)||chr(10)|| 15 'Block number is :'||to_char(block_number)||chr(10)|| 16 'Row number is :'||to_char(row_number); 17 return ls_my_rowid ; 18 end; 19 / Function created. SQL> select get_rowid('AAAFEdAAEAAAAEfAAC') from dual; GET_ROWID('AAAFEDAAEAAAAEFAAC') -------------------------------------------------------------------------------- Object# is :20765 Relative_fno is :4 Block number is :287 Row number is :2 BBED> set dba 4,287 DBA 0x0100011f (16777503 4,287) BBED> find /c cccgw File: /u01/oracle/oradata/test/tbs_cccgw_dat_01.dbf (4) Block: 287 Offsets: 8141 to 8191 Dba:0x0100011f ------------------------------------------------------------------------ 63636367 77053232 3539362c 01020568 656c6c6f 05776f72 6c643c01 020a6c61 6f67616f 33323332 06333231 34353601 06fdba <32 bytes per line> BBED> dump /v dba 4,287 offset 8141 count 128 File: /u01/oracle/oradata/test/tbs_cccgw_dat_01.dbf (4) Block: 287 Offsets: 8141 to 8191 Dba:0x0100011f ------------------------------------------------------- 63636367 77053232 3539362c 01020568 l cccgw.22596,...h 656c6c6f 05776f72 6c643c01 020a6c61 l ello.world<...la> 6f67616f 33323332 06333231 34353601 l ogao3232.321456. 06fdba l ... <16 bytes per line> BBED> modify /c tiany dba 4,287 offset 8141 Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y File: /u01/oracle/oradata/test/tbs_cccgw_dat_01.dbf (4) Block: 287 Offsets: 8141 to 8191 Dba:0x0100011f ------------------------------------------------------------------------ 7469616e 79053232 3539362c 01020568 656c6c6f 05776f72 6c643c01 020a6c61 6f67616f 33323332 06333231 34353601 06fdba <32 bytes per line> BBED> dump /v dba 4,287 offset 8141 count 64 File: /u01/oracle/oradata/test/tbs_cccgw_dat_01.dbf (4) Block: 287 Offsets: 8141 to 8191 Dba:0x0100011f ------------------------------------------------------- 7469616e 79053232 3539362c 01020568 l tiany.22596,...h 656c6c6f 05776f72 6c643c01 020a6c61 l ello.world<...la> 6f67616f 33323332 06333231 34353601 l ogao3232.321456. 06fdba l ... <16 bytes per line> BBED> sum dba 4,287 Check value for File 4, Block 287: current = 0x2d86, required = 0x3685 BBED> sum dba 4,287 apply Check value for File 4, Block 287: current = 0x3685, required = 0x3685 BBED> dump /v dba 4,287 offset 8141 count 64 File: /u01/oracle/oradata/test/tbs_cccgw_dat_01.dbf (4) Block: 287 Offsets: 8141 to 8191 Dba:0x0100011f ------------------------------------------------------- 7469616e 79053232 3539362c 01020568 l tiany.22596,...h 656c6c6f 05776f72 6c643c01 020a6c61 l ello.world<...la> 6f67616f 33323332 06333231 34353601 l ogao3232.321456. 06fdba l ... SQL> select * from adult; USERNAME USERPWD ------------------------------ ------------------------------ hello world cccgw 22596 重启数据库后 SQL> select * from adult; USERNAME USERPWD ------------------------------ ------------------------------ hello world tiany 22596 我们再找tiany的Rowid SQL> select rowid from adult where username='tiany'; no rows selected 再找cccgw的rowid SQL> select rowid from adult where username='cccgw'; ROWID ------------------ AAAFEdAAEAAAAEfAAC 是很奇怪。 SQL> select rowid,username,userpwd from adult; ROWID USERNAME USERPWD ------------------ ------------------------------ ------------------------------ AAAFEdAAEAAAAEfAAB hello world AAAFEdAAEAAAAEfAAC tiany 22596 估计是bug了。来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/668365/viewspace-1029243/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/668365/viewspace-1029243/