--**********************
-- DBVERIFY 工具的使用
--**********************
Oracle 数据库运行过程中由于硬件故障或操作系统故障导致导致Oracle无法以Oracle格式来识别或所包含的内容即为出现数据块损坏
故障,这个坏块可以分为介质损坏以及逻辑损坏。下面给出了块的检查,以及使用DBVERIFY 工具实施块检查。
一、块检查
1.何时检查块
当一个数据块被读或写的时候,将对块的进行一致性检查,检查的内容包括
块的版本
比较块在cache与block buffer中的数据块地址
根据要求进行校验(checksum)
2.损坏的数据块的错误提示
可以从告警日志文件中找到该错误提示,以及在会话中发现损坏的数据块时也会给出类似的提示
ORA-01578: ORACLE data block corrupted (file # 6, block # 11)
ORA-01110: data file 6: '/u01/app/oracle/oradata/orcl/tbs01.dbf'
3.与块损坏的相关特性(几种检查工具)
------------------------------------------------------------------------------------------------
特性 坏块侦测类型 能否修复损坏块
------------------------------------------------------------------------------------------------
DBVERIFY 物理 否
ANALYZE 逻辑 否
DB_BLOCK_CHECKING 逻辑 否
DB_BLOCK_CHECKSUM 物理 否
exp 物理 否
FlashBack 逻辑 是
DBMS_REPAIR 逻辑 是
Block media recovery 未知 是
二、DBVERIFY工具介绍
特性
是一个运行于操作系统提示符下的外部程序,用于验证数据文件,检查块的一致性错误
仅仅针对数据文件,能够校验open阶段的数据文件以及shutdown状态下的数据文件
可以验证复制的数据文件,也可以验证备份的镜像副本
不支持联机日志文件,控制文件,归档日志,RMAN备份集验证
被验证的文件可以位于文件系统,ASM磁盘或原始设备
在Unix系统中位于:$ORACLE_HOME/bin/dbv
在Windows系统中位于:%ORACLE_HOME%/bin/dbv.exe
对于DBVERIFY工具,高版本可以自动识别低版本数据库,比如11g的dbv访问9i的数据库,但是低版本的dbv访问高版本会报错
三、DBVERIFY工具用法
1.获取dbv的帮助信息,直接在提示符下输入dbv即可 或者输入dbv help=y
[oracle@oradb orcl]$ dbv
DBVERIFY: Release 10.2.0.4.0 - Production on Tue Oct 26 18:21:09 2010
Copyright (c) 1982, 2007, Oracle. All rights reserved.
Keyword Description (Default)
----------------------------------------------------
FILE File to Verify (NONE)
START Start Block (First Block of File)
END End Block (Last Block of File)
BLOCKSIZE Logical Block Size (8192)--指定数据文件的尺寸,缺省值为8192,对于非8192块将收到DBV-00103错误
LOGFILE Output Log (NONE) --用于显示验证进度
FEEDBACK Display Progress (0)
PARFILE Parameter File (NONE) --可以指定参数文件
USERID Username/Password (NONE) --校验段、ASM文件需要使用
SEGMENT_ID Segment ID (tsn.relfile.block) (NONE) --校验段,需要表空间ID,数据文件ID,段的头部ID
HIGH_SCN Highest Block SCN To Verify (NONE)
(scn_wrap.scn_base OR scn)
2.校验online,offline数据文件,使用下面的方法
dbv file=<dir>
[oracle@oradb orcl]$ dbv file=$ORACLE_BASE/oradata/orcl/tbs01.dbf
DBVERIFY: Release 10.2.0.4.0 - Production on Tue Oct 26 18:29:39 2010
Copyright (c) 1982, 2007, Oracle. All rights reserved.
DBVERIFY - Verification starting : FILE = /u01/app/oracle/oradata/orcl/tbs01.dbf
DBVERIFY - Verification complete
Total Pages Examined : 128 --校验的总页面数,一个页面即是一个数据块
Total Pages Processed (Data) : 96 --已处理的数据页面数
Total Pages Failing (Data) : 0 --已处理数据页面的失败数
Total Pages Processed (Index): 1 --已处理的索引页面数
Total Pages Failing (Index): 0 --已处理索引页面失败数
Total Pages Processed (Other): 31 --已处理的其它页面数
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 0
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Highest block SCN : 1152518 (0.1152518)
注意:如果Total Pages Influx的值大于零,且未存在坏块的情况下,是由于针对open状态的文件运行dbv
程序遇到了一个当前正在被DBWn进程写入的数据块
[oracle@oradb orcl]$ dbv file=$ORACLE_BASE/oradata/orcl/tbs01.dbf feedback=1000
上面这句在执行时每验证1000个块将显示一个"."号
--下面的校验发现了I/O错误
[oracle@oradb orcl]$ dbv file=/u01/app/oracle/oradata/orcl/tbs01.dbf
DBVERIFY: Release 10.2.0.4.0 - Production on Tue Oct 26 18:26:21 2010
Copyright (c) 1982, 2007, Oracle. All rights reserved.
DBV-00102: File I/O error on FILE (/u01/app/oracle/oradata/orcl/tbs01.dbf)
during end read operation (-1)
3.验证指定段
该方法需要获得段所在表空间的ID,段所在数据文件的ID,段的头部ID
如下面的查询表空间的ID为7,文件ID为6,段的头部ID为35
sys@ORCL> select tablespace_id,tablespace_name,header_file,header_block
2 from sys_dba_segs
3 where segment_name='TB3';
TABLESPACE_ID TABLESPACE_NAME HEADER_FILE HEADER_BLOCK
------------- --------------- ----------- ------------
7 TBS1 6 35
注意:sys用户的段可以查询sys_user_segs,而普通用户的段信息,需要查询sys_dba_segs
[oracle@oradb orcl]$ dbv userid=scott/tiger segment_id=7.6.35
DBVERIFY: Release 10.2.0.4.0 - Production on Tue Oct 26 18:50:01 2010
Copyright (c) 1982, 2007, Oracle. All rights reserved.
DBVERIFY - Verification starting : SEGMENT_ID = 7.6.35
DBVERIFY - Verification complete
Total Pages Examined : 8
Total Pages Processed (Data) : 5
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 0
Total Pages Failing (Index): 0
Total Pages Processed (Other): 2
Total Pages Processed (Seg) : 1
Total Pages Failing (Seg) : 0
Total Pages Empty : 0
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Highest block SCN : 1152518 (0.1152518)
4.验证复制的数据文件或验证备份的镜像副本
RMAN> backup as copy datafile 6 --使用RMAN备份镜像副本
2> format='/u01/app/oracle/bk/rmbk/cp_dfile6'
3> tag='Copy_datafile6';
[oracle@oradb orcl]$ dbv file=/u01/app/oracle/bk/rmbk/cp_dfile6
DBVERIFY: Release 10.2.0.4.0 - Production on Tue Oct 26 18:59:17 2010
Copyright (c) 1982, 2007, Oracle. All rights reserved.
DBVERIFY - Verification starting : FILE = /u01/app/oracle/bk/rmbk/cp_dfile6
DBVERIFY - Verification complete
Total Pages Examined : 128
Total Pages Processed (Data) : 96
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 1
Total Pages Failing (Index): 0
Total Pages Processed (Other): 31
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 0
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Highest block SCN : 1152518 (0.1152518)
RMAN命令中的BACKUP VALIDATE DATABASE命令通常用于检查全库,该命令不产生任何备份集,可以通过
Validate命令来检查是否能备份,如数据文件是否存在,是否存在坏块不能被备份,查询视图
v$database_block_corruption,此视图将检查过程中存在的坏块
如使用下面的查询
RMAN> backup validate database;
RMAN> backup validate database archivelog all;
sys@ORCL> select * from v$database_block_corruption;
no rows selected
视图v$database_block_corruption将列出损坏的坏块所在的文件位置,损坏块的起始位置,损坏快的大
小以及损坏类型如果上述视图中发现了坏块,则可以通过SQL查询获得坏块所影响的范围,以及确定坏块
所影响的是索引段还是UNDO段
select owner,segment_name,segment_type from dba_extents where file_id=<F> and <B>
between block_id and block_id+blocks-1;
(<F>和<B>分别是ORA-01578报出的坏块出现的文件号和块号)
下面使用rman 来修复受损的数据块
RMAN> run{
2> allocate channel ch1 device type disk;
3> blockrecover datafile 6 block 37;
4> release channel ch1;}
released channel: ORA_DISK_1
allocated channel: ch1
channel ch1: sid=139 devtype=DISK
Starting blockrecover at 26-OCT-10
starting media recovery
media recovery complete, elapsed time: 00:00:00
Finished blockrecover at 26-OCT-10
released channel: ch1
flasher@ORCL> alter table tb3 add constraint empno_tb3_pk
2 primary key(empno);
四、其它
1.事实上使用dbv工具可以对控制文件进行验证(数据库处于OPEN状态),参见下面的例子
[oracle10g:oracle:orcl]$ dbv file=control01.ctl
DBVERIFY: Release 10.2.0.4.0 - Production on Sun Jun 5 14:56:31 2011
Copyright (c) 1982, 2007, Oracle. All rights reserved.
DBV-00103: Specified BLOCKSIZE (8192) differs from actual (16384) --根据提示知道blocksize的值为16384
[oracle@oradb orcl]$ dbv file=control01.ctl blocksize=16384
DBVERIFY: Release 10.2.0.4.0 - Production on Sun Jun 5 14:53:01 2011
Copyright (c) 1982, 2007, Oracle. All rights reserved.
DBVERIFY - Verification starting : FILE = control01.ctl
DBVERIFY - Verification complete
Total Pages Examined : 404
Total Pages Processed (Data) : 0
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 0
Total Pages Failing (Index): 0
Total Pages Processed (Other): 40
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 364
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Highest block SCN : 775 (65535.775)
2.对联机日志文件的验证(数据库处于OPEN状态),不支持
[oracle10g:oracle:orcl]$ dbv file=redo01.log
DBVERIFY: Release 10.2.0.4.0 - Production on Sun Jun 5 15:01:09 2011
Copyright (c) 1982, 2007, Oracle. All rights reserved.
DBV-00103: Specified BLOCKSIZE (8192) differs from actual (512)
[oracle10g:oracle:orcl]$ dbv file=redo01.log blocksize=512 --可以执行,但出现下面很多的提示(介质错误)
Page 88441 is influx - most likely media corrupt
Corrupt block relative dba: 0x00015979 (file 0, block 88441)
Fractured block found during dbv:
Data in bad block:
type: 1 format: 2 rdba: 0x00015979
last change scn: 0x8010.00000010 seq: 0x51 flg: 0x55
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0xc2037800
check value in block header: 0x108
computed block checksum: 0x0
五、 快捷参考
有关性能优化请参考
Oracle 硬解析与软解析
共享池的调整与优化(Shared pool Tuning)
Buffer cache 的调整与优化(一)
Oracle 表缓存(caching table)的使用
有关ORACLE体系结构请参考
Oracle 表空间与数据文件
Oracle 密码文件
Oracle 参数文件
Oracle 联机重做日志文件(ONLINE LOG FILE)
Oracle 控制文件(CONTROLFILE)
Oracle 归档日志
Oracle 回滚(ROLLBACK)和撤销(UNDO)
Oracle 数据库实例启动关闭过程
Oracle 10g SGA 的自动化管理
Oracle 实例和Oracle数据库(Oracle体系结构)
有关闪回特性请参考
Oracle 闪回特性(FLASHBACK DATABASE)
Oracle 闪回特性(FLASHBACK DROP & RECYCLEBIN)
Oracle 闪回特性(Flashback Query、Flashback Table)
Oracle 闪回特性(Flashback Version、Flashback Transaction)
有关基于用户管理的备份和备份恢复的概念请参考
Oracle 冷备份
Oracle 热备份
Oracle 备份恢复概念
Oracle 实例恢复
Oracle 基于用户管理恢复的处理(详细描述了介质恢复及其处理)
SYSTEM 表空间管理及备份恢复
SYSAUX表空间管理及恢复
有关RMAN的备份恢复与管理请参考
RMAN 概述及其体系结构
RMAN 配置、监控与管理
RMAN 备份详解
RMAN 还原与恢复
RMAN catalog 的创建和使用
基于catalog 创建RMAN存储脚本
基于catalog 的RMAN 备份与恢复
使用RMAN迁移文件系统数据库到ASM
RMAN 备份路径困惑(使用plus archivelog时)
有关ORACLE故障请参考
ORA-32004 的错误处理
ORA-01658 错误
CRS-0215 错误处理
ORA-00119,ORA-00132 错误处理
又一例SPFILE设置错误导致数据库无法启动
对参数FAST_START_MTTR_TARGET = 0 的误解及设定
SPFILE 错误导致数据库无法启动(ORA-01565)
有关ASM请参考
创建ASM实例及ASM数据库
ASM 磁盘、目录的管理
使用 ASMCMD 工具管理ASM目录及文件
有关SQL/PLSQL请参考
SQLPlus 常用命令
替代变量与SQL*Plus环境设置
使用Uniread实现SQLplus翻页功能
SQL 基础-->SELECT 查询
SQL 基础--> NEW_VALUE 的使用
SQL 基础--> 集合运算(UNION 与UNION ALL)
SQL 基础--> 常用函数
SQL 基础--> 视图(CREATE VIEW)
SQL 基础--> 创建和管理表
SQL 基础--> 多表查询
SQL 基础--> 过滤和排序
SQL 基础--> 子查询
SQL 基础--> 分组与分组函数
SQL 基础--> 层次化查询(START BY ... CONNECT BY PRIOR)
SQL 基础--> ROLLUP与CUBE运算符实现数据汇总
PL/SQL --> 游标
PL/SQL --> 异常处理(Exception)
PL/SQL --> 语言基础
PL/SQL --> 流程控制
PL/SQL --> PL/SQL记录
PL/SQL --> 包的创建与管理
PL/SQL --> 隐式游标(SQL%FOUND)
PL/SQL --> 包重载、初始化
PL/SQL --> DBMS_DDL包的使用
PL/SQL --> DML 触发器
PL/SQL --> INSTEAD OF 触发器
PL/SQL --> 存储过程
PL/SQL --> 函数
PL/SQL --> 动态SQL
PL/SQL --> 动态SQL的常见错误
有关ORACLE其它特性
Oracle 常用目录结构(10g)
使用OEM,SQL*Plus,iSQL*Plus 管理Oracle实例
日志记录模式(LOGGING 、FORCE LOGGING 、NOLOGGING)
表段、索引段上的LOGGING与NOLOGGING
Oralce OMF 功能详解
Oracle 用户、对象权限、系统权限
Oracle 角色、配置文件
Oracle 分区表
Oracle 外部表
使用外部表管理Oracle 告警日志(ALAERT_$SID.LOG)
簇表及簇表管理(Index clustered tables)
数据泵 EXPDP 导出工具的使用
数据泵 IMPDP 导入工具的使用
导入导出 Oracle 分区表数据
SQL*Loader使用方法
启用用户进程跟踪
配置非默认端口的动态服务注册
配置ORACLE 客户端连接到数据库
system sys,sysoper sysdba 的区别
ORACLE_SID、DB_NAME、INSTANCE_NAME、DB_DOMIAN、GLOBAL_NAME
Oracle 补丁全集 (Oracle 9i 10g 11g Path)
Oracle 10.2.0.1 升级到 10.2.0.4
Oracle 彻底 kill session