189 8069 5689

检测数据块损坏(BlockCorruption)

数据块的损坏分两种情况,第一种是物理性的,第二种是逻辑性的。物理性一般指数据块头部不可以访问、数据块校验值不合法。逻辑性一般是在物理性结构完整的情况下,数据的内容在含义上不正确,比如保存了不允许的字段值。

下面分别用两种情况说明数据块的物理错误和数据的逻辑错误

一、数据块物理错误:  physical bad block,物理性一般指数据块头部不可以访问、数据块校验值不合法               
--创建表空间test                                                     

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/DBdb/system01.dbf
/u01/app/oracle/oradata/DBdb/sysaux01.dbf
/u01/app/oracle/oradata/DBdb/undotbs01.dbf
/u01/app/oracle/oradata/DBdb/users01.dbf
/u01/app/oracle/oradata/DBdb/example01.dbf

SQL> create tablespace test datafile '/u01/app/oracle/oradata/DBdb/test.dbf' size 10m;

Tablespace created.

--创建表test,使用表空间test
SQL> create table scott.test tablespace test as select * from dba_objects where rownum <=100;

Table created.  
  
SQL> col name for a70
SQL> set lines 200 pages 999
SQL> select f.file#,
  2         t.name tablespace,
  3         f.name,
  4         trunc(f.bytes / 1048576, 2) size_mb,
  5         to_char(f.creation_time, 'yyyy-mm-dd') creation_time,
  6         status
  7    from v$datafile f, v$tablespace t
  8   where f.ts# = t.ts#
  9   order by f.creation_time;
FILE# TABLESPACE NAME                                          SIZE_MB CREATION_T STATUS
----- ---------- ------------------------------------------ ---------- ---------- -------
    1 SYSTEM     /u01/app/oracle/oradata/DBdb/system01.dbf        2800 2013-08-24 SYSTEM
    2 SYSAUX     /u01/app/oracle/oradata/DBdb/sysaux01.dbf         710 2013-08-24 ONLINE
    4 USERS      /u01/app/oracle/oradata/DBdb/users01.dbf      3058.75 2013-08-24 ONLINE
    3 UNDOTBS1   /u01/app/oracle/oradata/DBdb/undotbs01.dbf       2965 2013-08-24 ONLINE
    5 EXAMPLE    /u01/app/oracle/oradata/DBdb/example01.dbf     338.75 2017-04-27 ONLINE
    6 TEST       /u01/app/oracle/oradata/DBdb/test.dbf              10 2018-01-26 ONLINE

6 rows selected.
                                                                        
--test表从数据块128号开始的8个块(128-135),数据文件是6号。    

SQL> set lines 200
SQL> col name for a50
SQL> select a.file_id,a.block_id,a.blocks,b.name fromdba_extents a,v$datafile b  where a.file_id=b.file# and a.owner='SCOTT' and a.segment_name='TEST';

   FILE_ID   BLOCK_ID     BLOCKS NAME
---------- ---------- ---------- --------------------------------------------------
         6        128          8 /u01/app/oracle/oradata/DBdb/test.dbf
                            
--test所有的行保存在131和132数据块中                             
SQL> select distinct dbms_rowid.rowid_block_number(rowid) from scott.test;   

DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
------------------------------------
132
131                                                                                                                                  
--改变132数据块的内容                                                
[oracle@wang ~]$ dd of=/u01/app/oracle/oradata/DBdb/test.dbf bs=8192 conv=notrunc seek=132 <> abcdefghijklmnopqrstuvwxyz
> EOF    
0+1 records in
0+1 records out
27 bytes (27 B) copied, 8.484e-05 s, 318 kB/s
[oracle@wang~]$     
                                                         
                                                                          

二、数据逻辑错误:logical bad block,逻辑性一般是在物理性结构完整的情况下,数据的内容在含义上不正确  
                                              

--创建range分区表                                                    
SQL> create table scott.emp1 (empno number(4),ename varchar2(10),deptno number(2)) partition by range (deptno)                                     
(partition p1 values less than (10) tablespace users,partition p2 values less than (20) tablespace users, partition p3 values less than (30)) tablespace users;

Table created. 

SQL> conn scott/tiger;
Connected.
SQL>         

SQL> select EMPNO,ENAME,DEPTNO from EMP;

     EMPNO ENAME          DEPTNO
---------- ---------- ----------
      7499 ALLEN              30
      7521 WARD               30
      7566 JONES              20
      7654 MARTIN             30
      7698 BLAKE              30
      7782 CLARK              10
      7788 SCOTT              20
      7839 KING               10
      7844 TURNER             30
      7876 ADAMS              20
      7900 JAMES              30

     EMPNO ENAME          DEPTNO
---------- ---------- ----------
      7902 FORD               20
      7934 MILLER             10

13 rows selected.
                
SQL> insert into scott.emp1 select  EMPNO,ENAME,DEPTNO from SCOTT.EMP where deptno<30;

7 rows created.

SQL> commit;

Commit
                                                       
--EMP1表从数据块40576号开始的1024个块(40576+1024=41600)以及从数据块41600号开始的1024个块(41600+1024=42624),数据文件是4号。

 
SQL>  select a.file_id,a.block_id,a.blocks,b.name from dba_extents a,v$datafile b  where a.file_id=b.file# and a.owner='SCOTT' and a.segment_name='EMP1';

   FILE_ID   BLOCK_ID     BLOCKS NAME
---------- ---------- ---------- --------------------------------------------------
         4      40576       1024 /u01/app/oracle/oradata/DBdb/users01.dbf
         4      41600       1024 /u01/app/oracle/oradata/DBdb/users01.dbf


--deptno是30的记录不能插入emp1表                                
SQL> insert into scott.emp1 values(1000,'SCOTT',30);  
insert into scott.emp1 values(1000,'SCOTT',30)
                  *
ERROR at line 1:
ORA-14400: inserted partition key does not map to any partition

                              
--使用交换分区的方式让emp1表接受deptno为30的行                     
SQL> create table scott.emp2 (empno number(4),ename varchar2(10),deptno number(2)) tablespace users;  

Table created.

SQL> insert into scott.emp2 values(1000,'SCOTT',30);

1 row created.

SQL> alter table scott.emp1 exchange partition p3 with table scott.emp2 without validation;

Table altered.

SQL>                                                                                                                                                     --deptno为30的记录已插入emp1表                                   
SQL> select * from scott.emp1 partition (p3);   

     EMPNO ENAME          DEPTNO
---------- ---------- ----------
      1000 SCOTT              30

SQL> select * from scott.emp1;

     EMPNO ENAME          DEPTNO
---------- ---------- ----------
      7782 CLARK              10
      7839 KING               10
      7934 MILLER             10
      1000 SCOTT              30
 
SQL> select * from scott.emp2;

     EMPNO ENAME          DEPTNO
---------- ---------- ----------
      7566 JONES              20
      7788 SCOTT              20
      7876 ADAMS              20
      7902 FORD               20
                                                                                                                           
三、oracle提供了很多工具用来检查数据块是否损坏,有的可以从物理层面上检查,有的可以从逻辑层面上检测 

1.1 DBVERIFY工具,数据块的物理错误可以通过DBV命令检查出来
DBVerify - Identify Datafile Block Corruptions
    DBVERIFY identifiesPhysical and Logical Intra Block Corruptionsby default. Dbverify cannot be run for the whole database in a single command. It does not need a database connection either:

[oracle@wang ~]$ dbv file=/u01/app/oracle/oradata/DBdb/test.dbfblocksize=8192

DBVERIFY: Release 11.2.0.4.0 - Production on Wed Nov 8 22:57:05 2017

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

DBVERIFY - Verification starting : FILE = /u01/app/oracle/oradata/DBdb/test.dbf
Page 132 is marked                                            ---检查test表空间的数据文件可以发现132块已经损坏。
Corrupt block relative dba: 0x01800084 (file 6, block 132)   --file 6, block 132,与我们自己手工破坏的块号匹配(scott.test表)
Bad header found during dbv:
Data in bad block:
 type: 97 format: 2 rdba: 0x68676665
 last change scn: 0x6e6d.6c6b6a69 seq: 0x6f flg: 0x70
 spare1: 0x63 spare2: 0x64 spare3: 0x7473
 consistency value in tail: 0x658b0602
 check value in block header: 0x7271
 block checksum disabled

DBVERIFY - Verification complete

Total Pages Examined         : 1280
Total Pages Processed (Data) : 1
Total Pages Failing   (Data) : 0
Total Pages Processed (Index): 0
Total Pages Failing   (Index): 0
Total Pages Processed (Other): 130
Total Pages Processed (Seg)  : 0
Total Pages Failing   (Seg)  : 0
Total Pages Empty            : 1148
Total Pages Marked Corrupt   : 1
Total Pages Influx           : 0
Total Pages Encrypted        : 0
Highest block SCN            : 4023695 (0.4023695)
[oracle@wang ~]$                                
                                                                                                                                                         --检查users表空间的数据文件没有发现逻辑错误
[oracle@wang ~]$dbv file=/u01/app/oracle/oradata/DBdb/users01.dbf blocksize=8192    


DBVERIFY: Release 11.2.0.4.0 - Production on Wed Nov 8 23:01:07 2017

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

DBVERIFY - Verification starting : FILE = /u01/app/oracle/oradata/DBdb/users01.dbf


DBVERIFY - Verification complete

Total Pages Examined         : 391520
Total Pages Processed (Data) : 290743
Total Pages Failing   (Data) : 0
Total Pages Processed (Index): 12935
Total Pages Failing   (Index): 0
Total Pages Processed (Other): 67340
Total Pages Processed (Seg)  : 0
Total Pages Failing   (Seg)  : 0
Total Pages Empty            : 20502
Total Pages Marked Corrupt   : 0
Total Pages Influx           : 0
Total Pages Encrypted        : 0
Highest block SCN            : 4024489 (0.4024489)
[oracle@wang~]$                                                                                                                                                                                              
1.2 RMAN的backup命令                                                 
RMAN - Identify Datafile Block Corruptions

To identify both Physical and Logical Block Corruptions use the "CHECK LOGICAL" option. The next command checks the complete database for both corruptionswithout actually doing a backup:
添加check logical选项可以检查逻辑坏块;

$ rman target /
RMAN>  backupcheck logicalvalidate

The next command checks the complete database for both corruptions in a backup:

$ rman target /
RMAN> backupcheck logical database

检查坏块,示例:
backup check logical validate datafile 6;
validate check logical datafile 6;

validate database;                                --验证整个数据库
validate backupset 22;                            --验证某个备份文件
validate tablespace users;                        --验证某个表空间
validate datafile 1;                              --验证某个数据文件
validate datafile 1 block 10;                     --验证某个数据文件中的某个块   
validate check logical datafile 1 BLOCK 5 TO 20;  --检查数据文件 1 中的数据块 5 到 20
                                                        
backup validate database;                         --验证所有文件,包括数据文件、控制文件、参数文件
backup validate datafile 6;                       --验证6号数据文件      
backup validate datafile 4;                       --验证4号数据文件

注意:这个命令只是检查数据库的坏块,而不会真正进行备份。从 11g 开始可以省略 backup 子句,而直接使用命令"validate check logical database"。
如果由于缺失文件导致命令失败,可以增加 'SKIP INACCESSIBLE' 子句来避免这个问题,为了加快检查速度,可以设置 PARALLELISM 指定多个通道:

坏块信息会被记录在视图 V$DATABASE_BLOCK_CORRUPTION 中。使用如上validate 子句检查数据文件等后 RMAN 会生成一个 trace 文件,详细描述坏块信息

或者备份数据文件,也可以检查出坏块。
v$database_block_corruption查看backup操作发现的损坏                             
V$DATABASE_BLOCK_CORRUPTION displays information about database blocks that were corrupted after the last backup.  此视图只显示上次备份后损坏的数据库块的信息。

参考:http://www.linuxidc.com/Linux/2014-08/105897.htm

1.2.1使用rman备份检查坏块:

[oracle@wang ~]$ rman target /

Recovery Manager: Release 11.2.0.4.0 - Production on Wed Nov 8 23:07:46 2017

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

connected to target database: DBDB (DBID=3282897732)

RMAN>backup datafile 6;

Starting backup at 08-NOV-17
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=31 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00006 name=/u01/app/oracle/oradata/DBdb/test.dbf
channel ORA_DISK_1: starting piece 1 at 08-NOV-17
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of backup command on ORA_DISK_1 channel at 11/08/2017 23:07:52
ORA-19566:exceeded limit of 0 corrupt blocks for file /u01/app/oracle/oradata/DBdb/test.dbf

RMAN>               

验证说明;备份test表空间数据文件时报错,备份要求数据块0错误。可以使用视图v$database_block_corruption查看backup操作发现的损坏的块。

V$DATABASE_BLOCK_CORRUPTION displays information about database blocks that were corrupted after the last backup.

查询如下;
SQL> select * fromv$database_block_corruption;

     FILE#     BLOCK#     BLOCKS CORRUPTION_CHANGE# CORRUPTIO
---------- ---------- ---------- ------------------ ---------
         6        132          1                  0 CORRUPT
 物理坏块被发现

RMAN> backup datafile 4;

Starting backup at 26-JAN-18
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00004 name=/u01/app/oracle/oradata/DBdb/users01.dbf
channel ORA_DISK_1: starting piece 1 at 26-JAN-18
channel ORA_DISK_1: finished piece 1 at 26-JAN-18
piece handle=/u01/app/oracle/fast_recovery_area/DBDB/newback/DBDB/backupset/2018_01_26/o1_mf_nnndf_TAG20180126T065941_f6nrbxnx_.bkp tag=TAG20180126T065941 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03
Finished backup at 26-JAN-18

RMAN>

--再次检查视图:
SQL> select * from v$database_block_corruption;

     FILE#     BLOCK#     BLOCKS CORRUPTION_CHANGE# CORRUPTIO
---------- ---------- ---------- ------------------ ---------
         6        132          1                  0 CORRUPT

逻辑坏块未被检测出来;

1.2.2 使用 validate check logical子句检查逻辑及物理坏块
RMAN> validate check logical datafile 6;

Starting validate at 26-JAN-18
using channel ORA_DISK_1
channel ORA_DISK_1: starting validation of datafile
channel ORA_DISK_1: specifying datafile(s) for validation
input datafile file number=00006 name=/u01/app/oracle/oradata/DBdb/test.dbf
channel ORA_DISK_1: validation complete, elapsed time: 00:00:01
List of Datafiles
=================
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
6    FAILED 0              1148         1280            4177988   
  File Name: /u01/app/oracle/oradata/DBdb/test.dbf
  Block Type Blocks Failing Blocks Processed
  ---------- -------------- ----------------
  Data       0              1               
  Index      0              0               
  Other      1              131             

validate found one or more corrupt blocks
See trace file /u01/app/oracle/diag/rdbms/dbdb/DBdb/trace/DBdb_ora_32387.trc for details
Finished validate at 26-JAN-18

RMAN> validate check logical datafile 4;

Starting validate at 26-JAN-18
using channel ORA_DISK_1
channel ORA_DISK_1: starting validation of datafile
channel ORA_DISK_1: specifying datafile(s) for validation
input datafile file number=00004 name=/u01/app/oracle/oradata/DBdb/users01.dbf
channel ORA_DISK_1: validation complete, elapsed time: 00:00:45
List of Datafiles
=================
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
4    OK     0              21386        391549          4178643   
  File Name: /u01/app/oracle/oradata/DBdb/users01.dbf
  Block Type Blocks Failing Blocks Processed
  ---------- -------------- ----------------
  Data       0              241463          
  Index      0              55618           
  Other      0              73053           

Finished validate at 26-JAN-18

RMAN> 
未检查出逻辑坏块。。。。。。。。。。。。。
                            

 1.3 exp/expdp命令 
exp/expdp命令导出数据库时会完全扫描每个数据块,所以也会检查出数据块的物理错误。
[oracle@wang ~]$ exp scott/tiger owner=scott


Export: Release 11.2.0.4.0 - Production on Thu Nov 9 00:16:08 2017

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


Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set

About to export specified users ...
. exporting pre-schema procedural objects and actions
. exporting foreign function library names for user SCOTT
. exporting PUBLIC type synonyms
. exporting private type synonyms
. exporting object type definitions for user SCOTT
About to export SCOTT's objects ...
. exporting database links
. exporting sequence numbers
. exporting cluster definitions
. about to export SCOTT's tables via Conventional Path ...
. . exporting table                          BONUS          0 rows exported
. . exporting table                           DEPT          4 rows exported
. . exporting table                            EMP         13 rows exported
. . exporting table                           EMP1
. . exporting partition                             P1          0 rows exported
. . exporting partition                             P2          3 rows exported
. . exporting partition                             P3          1 rows exported     --逻辑错误没检查出来。
. . exporting table                           EMP2          4 rows exported
. . exporting table                         GRADES          0 rows exported
. . exporting table                           JOBS         13 rows exported
. . exporting table                        STUDENT          0 rows exported
. . exporting table                           TEST
EXP-00056: ORACLE error 1578 encountered
ORA-01578: ORACLE data block corrupted (file # 6, block # 132)                  --检测出6号数据文件的132号块损坏
ORA-01110: data file 6: '/u01/app/oracle/oradata/DBdb/test.dbf'
. exporting synonyms
. exporting views
. exporting stored procedures
. exporting operators
. exporting referential integrity constraints
. exporting triggers
. exporting indextypes
. exporting bitmap, functional and extensible indexes
. exporting posttables actions
. exporting materialized views
. exporting snapshot logs
. exporting job queues
. exporting refresh groups and children
. exporting dimensions
. exporting post-schema procedural objects and actions
. exporting statistics
Export terminated successfully with warnings.
                                                   
1.4 ANALYZE语句 
analyze... validate staructure语句可以分析表和索引的逻辑完整性,所以能够检测出上面例子中分区表的逻辑错误。

检测数据块损坏(Block Corruption)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">

--analyze语句要求有一张保存分析结果的表,执行utlvalid.sql脚本建立invalid_rows表保存分析结果。
QL> @?/rdbms/admin/utlvalid.sql


Table creat
当前名称:检测数据块损坏(BlockCorruption)
标题链接:http://cdxtjz.cn/article/jhiehs.html

联系我们

您好HELLO!
感谢您来到成都网站建设公司,若您有合作意向,请您为我们留言或使用以下方式联系我们, 我们将尽快给你回复,并为您提供真诚的设计服务,谢谢。
  • 电话:028- 86922220 18980695689
  • 商务合作邮箱:631063699@qq.com
  • 合作QQ: 532337155
  • 成都网站设计地址:成都市青羊区锣锅巷31号五金站写字楼6楼

小谭建站工作室

成都小谭网站建设公司拥有多年以上互联网从业经验的团队,始终保持务实的风格,以"帮助客户成功"为已任,专注于提供对客户有价值的服务。 我们已为众企业及上市公司提供专业的网站建设服务。我们不只是一家网站建设的网络公司;我们对营销、技术、管理都有自己独特见解,小谭建站采取“创意+综合+营销”一体化的方式为您提供更专业的服务!

小谭观点

相对传统的成都网站建设公司而言,小谭是互联网中的网站品牌策划,我们精于企业品牌与互联网相结合的整体战略服务。
我们始终认为,网站必须注入企业基因,真正使网站成为企业vi的一部分,让整个网站品牌策划体系变的深入而持久。