真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么計算出正確的checksum值?

1)創(chuàng)建一個測試表

公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出防城港免費做網(wǎng)站回饋大家。

SQL> create table test (id int, name varchar2(10));

 

Table created.

 

SQL> insert into test values(1,'AAAAA');

 

1 row created.

SQL> commit;

 

Commit complete.

 

SQL> select dbms_rowid.ROWID_RELATIVE_FNO(rowid) file#,dbms_rowid.ROWID_BLOCK_NUMBER(rowid) blk# from test;

 

     FILE#       BLK#

---------- ----------

         4        284

 

通過BBED查看當前的CHECKSUM值

[oracle@MySQL ~]$ bbed

 

BBED: Release 2.0.0.0.0 - Limited Production on Fri May 25 00:54:11 2018

 

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

 

************* !!! For Oracle Internal Use only !!! ***************

 

BBED> set file 4 block 284

        FILE#           4

        BLOCK#          284

 

BBED> sum

Check value for File 4, Block 284:

current = 0xf9ff, required = 0xf9ff

 

把284號數(shù)據(jù)塊dump出來。

[oracle@Mysql ~]$ dd if=/u01/app/oracle/oradata/dsidb/users01.dbf of=/tmp/test.dd count=1 skip=284 bs=8192

1+0 records in

1+0 records out

8192 bytes (8.2 kB) copied, 0.000435816 s, 18.8 MB/s

 

我們使用UE編輯器打開test.dd數(shù)據(jù)塊

然后把C1 02改成C1 03

 

然后把test.dd數(shù)據(jù)塊copy回去

[oracle@Mysql tmp]$ dd if=/tmp/test.dd of=/u01/app/oracle/oradata/dsidb/users01.dbf count=1 seek=284 bs=8192 conv=notrunc

1+0 records in

1+0 records out

8192 bytes (8.2 kB) copied, 0.000339993 s, 24.1 MB/s

 

 

然后重啟一下數(shù)據(jù)庫

SQL> startup force;

ORACLE instance started.

 

Total System Global Area  588746752 bytes

Fixed Size                  2230592 bytes

Variable Size             201328320 bytes

Database Buffers          377487360 bytes

Redo Buffers                7700480 bytes

Database mounted.

Database opened.

 

SQL> conn scott/oracle

Connected.

SQL> select * from test;

select * from test

              *

ERROR at line 1:

ORA-01578: ORACLE data block corrupted (file # 4, block # 284)

ORA-01110: data file 4: '/u01/app/oracle/oradata/dsidb/users01.dbf'

 

可以看到數(shù)據(jù)庫查詢表test報錯,我們再看一下數(shù)據(jù)庫日志。

2018-05-25 01:16:29.248000 +08:00

Errors in file /u01/app/oracle/diag/rdbms/dsidb/dsidb/trace/dsidb_ora_10666.trc  (incident=102183):

ORA-01578: ORACLE data block corrupted (file # 4, block # 284)

ORA-01110: data file 4: '/u01/app/oracle/oradata/dsidb/users01.dbf'

Incident details in: /u01/app/oracle/diag/rdbms/dsidb/dsidb/incident/incdir_102183/dsidb_ora_10666_i102183.trc

Sweep [inc][102182]: completed

Hex dump of (file 4, block 284) in trace file /u01/app/oracle/diag/rdbms/dsidb/dsidb/incident/incdir_102182/dsidb_m000_10668_i102182_a.trc

Corrupt block relative dba: 0x0100011c (file 4, block 284)

Bad check value found during validation

Data in bad block:

 type: 6 format: 2 rdba: 0x0100011c

 last change scn: 0x0000.003ffe2d seq: 0x1 flg: 0x06

 spare1: 0x0 spare2: 0x0 spare3: 0x0

 consistency value in tail: 0xfe2d0601

 check value in block header: 0xf9ff

 computed block checksum: 0x100

 

可以看到文件頭上的check value值為0xf9ff,計算的check sum值為0x100

 

然后我們再使用BBED去sum一下這個數(shù)據(jù)塊,可以看到,當前check value的值為f9ff,而需要的值為f8ff

[oracle@Mysql ~]$ bbed

 

BBED: Release 2.0.0.0.0 - Limited Production on Fri May 25 01:18:44 2018

 

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

 

************* !!! For Oracle Internal Use only !!! ***************

 

BBED> set file 4 block 284

        FILE#           4

        BLOCK#          284

 

BBED> sum

Check value for File 4, Block 284:

current = 0xf9ff, required = 0xf8ff

 

我們根據(jù) 0xf9ff與0x100計算一下當前block正常的checksum值應(yīng)該是多少。

F9FF= 1111 1001 1111 1111

100=  0000 0001 0000 0000

根據(jù)異或算法原理,這里很容易可以看出oracle計算出來的正確的checksum值應(yīng)該是:  1111 1000 1111 1111, 也就是f8ff

 

好了,我們這里如法炮制再改一次上述block的checksum值,即將上述block的checksum值改為f8 ff

 

我們先verify一下

BBED> verify

DBVERIFY - Verification starting

FILE = /u01/app/oracle/oradata/dsidb/users01.dbf

BLOCK = 284

 

Block 284 is corrupt

Corrupt block relative dba: 0x0100011c (file 0, block 284)

Bad check value found during verification

Data in bad block:

 type: 6 format: 2 rdba: 0x0100011c

 last change scn: 0x0000.003ffe2d seq: 0x1 flg: 0x06

 spare1: 0x0 spare2: 0x0 spare3: 0x0

 consistency value in tail: 0xfe2d0601

 check value in block header: 0xf9ff

 computed block checksum: 0x100

 

 

DBVERIFY - Verification complete

 

Total Blocks Examined         : 1

Total Blocks Processed (Data) : 0

Total Blocks Failing   (Data) : 0

Total Blocks Processed (Index): 0

Total Blocks Failing   (Index): 0

Total Blocks Empty            : 0

Total Blocks Marked Corrupt   : 1

Total Blocks Influx           : 0

 

 

BBED> sum

Check value for File 4, Block 284:

current = 0xf9ff, required = 0xf8ff

 

BBED> sum

Check value for File 4, Block 284:

current = 0xf9ff, required = 0xf8ff

 

BBED> modify /x 0xf8ff offset 16

Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y

 File: /u01/app/oracle/oradata/dsidb/users01.dbf (4)

 Block: 284              Offsets:   16 to  527           Dba:0x0100011c

------------------------------------------------------------------------

 f8ff0000 01000000 fa2a0100 2cfe3f00 00000000 02003200 18010001 1d000900

 a0000000 ba040002 4d001100 01200000 2dfe3f00 00000000 00000000 00000000

 00000000 00000000 00000000 00000000 00000000 00010100 ffff1400 8c1f781f

 781f0000 01008c1f ffff3200 a0046e04 6e040000 1000c01d 961c7b1b b9190418

 50167a14 9812f110 4b0f830d ba0bde09 29087606 a0040000 00000000 00000000

 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

 

 <32 bytes per line>

 

BBED> sum apply

Check value for File 4, Block 284:

current = 0xf8ff, required = 0xf8ff

 

 

然后再次verify,可以看到,已經(jīng)不報壞塊了。

BBED> verify

DBVERIFY - Verification starting

FILE = /u01/app/oracle/oradata/dsidb/users01.dbf

BLOCK = 284

 

 

DBVERIFY - Verification complete

 

Total Blocks Examined         : 1

Total Blocks Processed (Data) : 1

Total Blocks Failing   (Data) : 0

Total Blocks Processed (Index): 0

Total Blocks Failing   (Index): 0

Total Blocks Empty            : 0

Total Blocks Marked Corrupt   : 0

Total Blocks Influx           : 0

 

 

BBED> sum

Check value for File 4, Block 284:

current = 0xf8ff, required = 0xf8ff

 

數(shù)據(jù)也可以正常返回了。

SQL> select * from test;

 

        ID NAME

---------- ----------

         2 AAAAA

 

 

 

2.重現(xiàn)數(shù)據(jù)塊內(nèi)空間計算錯誤?(詳細的實驗操作步驟,BBED工具verify如下命令提示)

BBED>verify

 

kdbchk:the amount of space used is not equal to block size

Total Blocks Failing(Data)

 

SQL> create table t2 (id int,name varchar2(10));

 

Table created.

 

SQL> insert into t2 values(1,'AAAAA');

 

1 row created.

 

SQL> commit;

 

Commit complete.

 

 

SQL> alter system flush buffer_cache;

 

System altered.

 

SQL> select dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) blk# from t2;

 

     FILE#       BLK#

---------- ----------

         4        220

 

 

SQL> delete from t2;

 

1 row deleted.

 

SQL> alter system flush buffer_cache;

 

System altered.

 

 

BBED> set file 4 block 220

        FILE#           4

        BLOCK#          220

 

BBED> map

 File: /u01/app/oracle/oradata/dsidb/users01.dbf (4)

 Block: 220                                   Dba:0x010000dc

------------------------------------------------------------

 KTB Data Block (Table/Cluster)

 

 struct kcbh, 20 bytes                      @0      

 

 struct ktbbh, 72 bytes                     @20     

 

 struct kdbh, 14 bytes                      @100    

 

 struct kdbt[1], 4 bytes                    @114    

 

 sb2 kdbr[1]                                @118    

 

 ub1 freespace[8055]                        @120    

 

 ub1 rowdata[13]                            @8175   

 

 ub4 tailchk                                @8188   

 

 

BBED> p rowdata

ub1 rowdata[0]                              @8175     0x3c

ub1 rowdata[1]                              @8176     0x02

ub1 rowdata[2]                              @8177     0x02

ub1 rowdata[3]                              @8178     0x02

ub1 rowdata[4]                              @8179     0xc1

ub1 rowdata[5]                              @8180     0x02

ub1 rowdata[6]                              @8181     0x06

ub1 rowdata[7]                              @8182     0x41

ub1 rowdata[8]                              @8183     0x41

ub1 rowdata[9]                              @8184     0x41

ub1 rowdata[10]                             @8185     0x41

ub1 rowdata[11]                             @8186     0x41

ub1 rowdata[12]                             @8187     0x0a

 

BBED> modify /x 2c offset 8175

 File: /u01/app/oracle/oradata/dsidb/users01.dbf (4)

 Block: 220              Offsets: 8175 to 8191           Dba:0x010000dc

------------------------------------------------------------------------

 2c020202 c1020641 41414141 0a010621 59

 

 <32 bytes per line>

 

BBED> sum apply

Check value for File 4, Block 220:

current = 0x1f3f, required = 0x1f3f

 

BBED> verify

DBVERIFY - Verification starting

FILE = /u01/app/oracle/oradata/dsidb/users01.dbf

BLOCK = 220

 

Block Checking: DBA = 16777436, Block Type = KTB-managed data block

data header at 0x24d9064

kdbchk: the amount of space used is not equal to block size

        used=33 fsc=11 avsp=8055 dtl=8088

Block 220 failed with check code 6110

 

DBVERIFY - Verification complete

 

Total Blocks Examined         : 1

Total Blocks Processed (Data) : 1

Total Blocks Failing   (Data) : 1

Total Blocks Processed (Index): 0

Total Blocks Failing   (Index): 0

Total Blocks Empty            : 0

Total Blocks Marked Corrupt   : 0

Total Blocks Influx           : 0

Message 531 not found;  product=RDBMS; facility=BBED

 

 

BBED> p kdbh

struct kdbh, 14 bytes                       @100    

   ub1 kdbhflag                             @100      0x00 (NONE)

   sb1 kdbhntab                             @101      1

   sb2 kdbhnrow                             @102      1

   sb2 kdbhfrre                             @104     -1

   sb2 kdbhfsbo                             @106      20

   sb2 kdbhfseo                             @108      8075

   sb2 kdbhavsp                             @110      8055

   sb2 kdbhtosp                             @112      8068


本文標題:怎么計算出正確的checksum值?
URL鏈接:http://weahome.cn/article/ihhdsg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部