1. 首页 > Oracle教程 > 正文

Oracle教程FG433-DBVerify使用

本文档风哥主要介绍Oracle DBVerify工具使用相关知识,包括DBVerify的概念、DBVerify的参数说明、DBVerify的使用方法、DBVerify使用配置、DBVerify使用监控、DBVerify使用故障处理等内容,由风哥教程参考Oracle官方文档Troubleshooting内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 DBVerify的概念

Oracle DBVerify是Oracle数据库提供的一个外部命令行工具,用于验证数据文件的物理结构完整性。DBVerify可以检测数据文件中的损坏块,包括物理损坏和逻辑损坏。DBVerify不需要数据库实例运行,可以在数据库关闭状态下使用。更多视频教程www.fgedu.net.cn

Oracle DBVerify的特点:

  • 外部工具:独立于数据库实例运行
  • 物理验证:验证数据文件物理结构
  • 损坏检测:检测数据文件中的损坏块
  • 离线验证:可以在数据库关闭状态下使用
  • 快速检查:快速验证数据文件完整性

1.2 DBVerify的参数说明

Oracle DBVerify的常用参数:

  • FILE:要验证的数据文件名
  • START:开始验证的块号
  • END:结束验证的块号
  • BLOCKSIZE:数据块大小
  • LOGFILE:输出日志文件名
  • FEEDBACK:显示进度反馈
  • USERID:数据库用户名和密码
  • SEGMENT_ID:要验证的段ID
# DBVerify参数说明

FILE=filename
指定要验证的数据文件名
示例:FILE=/oracle/app/oracle/oradata/FGEDUDB/system01.dbf

START=block_number
指定开始验证的块号
默认值:1
示例:START=100

END=block_number
指定结束验证的块号
默认值:数据文件最后一个块
示例:END=1000

BLOCKSIZE=bytes
指定数据块大小
默认值:8192
示例:BLOCKSIZE=8192

LOGFILE=filename
指定输出日志文件名
默认值:标准输出
示例:LOGFILE=/home/oracle/dbv_system.log

FEEDBACK=n
指定显示进度反馈的间隔
默认值:0(不显示)
示例:FEEDBACK=1000

USERID=username/password
指定数据库用户名和密码(用于验证段)
示例:USERID=scott/tiger

SEGMENT_ID=tsn.segfile.segblock
指定要验证的段ID
示例:SEGMENT_ID=4.12345

1.3 DBVerify的使用方法

Oracle DBVerify的使用方法:

  • 验证整个数据文件:验证数据文件的所有块
  • 验证部分块:验证数据文件的指定块范围
  • 验证段:验证指定的表或索引段
  • 输出日志:将验证结果输出到日志文件
  • 进度显示:显示验证进度
风哥提示:DBVerify是验证数据文件完整性的重要工具,建议定期使用DBVerify验证数据文件。

Part02-生产环境规划与建议

2.1 DBVerify使用规划

Oracle DBVerify使用规划要点:

# DBVerify使用规划
– 验证频率:定期验证数据文件
– 验证范围:验证所有数据文件
– 验证时间:在低峰期进行验证
– 验证记录:记录验证结果

# 验证频率规划
– 每日验证:验证关键数据文件
– 每周验证:验证所有数据文件
– 每月验证:全面验证数据库

# 验证范围规划
– 系统表空间:验证SYSTEM和SYSAUX表空间
– 用户表空间:验证用户数据表空间
– Undo表空间:验证Undo表空间
– 临时表空间:验证临时表空间

# 验证时间规划
– 低峰期:在业务低峰期进行验证
– 维护窗口:在维护窗口进行验证
– 备份后:在备份后进行验证
– 迁移后:在数据迁移后进行验证

# 验证记录规划
– 记录方式:选择记录方式
– 记录格式:定义记录格式
– 记录保留:设置记录保留时间
– 记录备份:备份验证记录

2.2 DBVerify使用场景

Oracle DBVerify使用场景:

  • 定期检查:定期检查数据文件完整性
  • 备份验证:验证备份文件的完整性
  • 故障诊断:诊断数据损坏问题
  • 迁移验证:验证数据迁移后的完整性
  • 存储验证:验证存储系统的可靠性
# DBVerify使用场景

1. 定期检查
– 每周验证所有数据文件
– 每月验证数据库完整性
– 发现损坏及时修复

2. 备份验证
– 验证备份文件完整性
– 确保备份可用
– 验证恢复能力

3. 故障诊断
– 诊断数据损坏问题
– 定位损坏块位置
– 确定损坏范围

4. 迁移验证
– 验证数据迁移后完整性
– 确保数据一致
– 验证应用功能

5. 存储验证
– 验证存储系统可靠性
– 检测存储故障
– 预防数据损坏

2.3 DBVerify使用最佳实践

Oracle DBVerify使用最佳实践:

  • 定期验证:定期使用DBVerify验证数据文件
  • 记录结果:记录验证结果和发现的问题
  • 及时处理:及时处理发现的损坏块
  • 结合备份:结合备份策略使用DBVerify
  • 自动化:自动化DBVerify验证过程
生产环境建议:DBVerify使用需要建立完善的验证流程,建议定期验证、记录结果、及时处理。学习交流加群风哥微信: itpux-com

Part03-生产环境项目实施方案

3.1 DBVerify使用配置

3.1.1 配置DBVerify验证数据文件

# 1. 验证单个数据文件
$ dbv file=/oracle/app/oracle/oradata/FGEDUDB/system01.dbf

DBVERIFY: Release 19.0.0.0.0 – Production on Tue Mar 31 10:00:00 2026

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

DBVERIFY – Verification starting : FILE = /oracle/app/oracle/oradata/FGEDUDB/system01.dbf

DBVERIFY – Verification complete

Total Pages Examined : 51200
Total Pages Processed (Data) : 32768
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 8192
Total Pages Failing (Index): 0
Total Pages Processed (Other): 10240
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 0
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 12345678 (0.12345678)

# 2. 验证数据文件并显示进度
$ dbv file=/oracle/app/oracle/oradata/FGEDUDB/system01.dbf feedback=1000

DBVERIFY: Release 19.0.0.0.0 – Production on Tue Mar 31 10:00:00 2026

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

DBVERIFY – Verification starting : FILE = /oracle/app/oracle/oradata/FGEDUDB/system01.dbf
……….
DBVERIFY – Verification complete

Total Pages Examined : 51200
Total Pages Processed (Data) : 32768
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 8192
Total Pages Failing (Index): 0
Total Pages Processed (Other): 10240
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 0
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 12345678 (0.12345678)

# 3. 验证数据文件的指定块范围
$ dbv file=/oracle/app/oracle/oradata/FGEDUDB/users01.dbf start=1 end=1000

DBVERIFY: Release 19.0.0.0.0 – Production on Tue Mar 31 10:00:00 2026

DBVERIFY – Verification starting : FILE = /oracle/app/oracle/oradata/FGEDUDB/users01.dbf

DBVERIFY – Verification complete

Total Pages Examined : 1000
Total Pages Processed (Data) : 500
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 200
Total Pages Failing (Index): 0
Total Pages Processed (Other): 300
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 0
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 12345678 (0.12345678)

# 4. 验证数据文件并输出到日志文件
$ dbv file=/oracle/app/oracle/oradata/FGEDUDB/system01.dbf logfile=/home/oracle/dbv_system.log

$ cat /home/oracle/dbv_system.log

DBVERIFY: Release 19.0.0.0.0 – Production on Tue Mar 31 10:00:00 2026

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

DBVERIFY – Verification starting : FILE = /oracle/app/oracle/oradata/FGEDUDB/system01.dbf

DBVERIFY – Verification complete

Total Pages Examined : 51200
Total Pages Processed (Data) : 32768
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 8192
Total Pages Failing (Index): 0
Total Pages Processed (Other): 10240
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 0
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 12345678 (0.12345678)

# 5. 验证损坏的数据文件
$ dbv file=/oracle/app/oracle/oradata/FGEDUDB/users01.dbf

DBVERIFY: Release 19.0.0.0.0 – Production on Tue Mar 31 10:00:00 2026

DBVERIFY – Verification starting : FILE = /oracle/app/oracle/oradata/FGEDUDB/users01.dbf

Page 1024 is marked corrupt
Corrupt block relative dba: 0x01000400, file 4, block 1024
Completely zero block found during dbv:

DBVERIFY – Verification complete

Total Pages Examined : 12800
Total Pages Processed (Data) : 8192
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 2048
Total Pages Failing (Index): 0
Total Pages Processed (Other): 2559
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 0
Total Pages Marked Corrupt : 1
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 12345678 (0.12345678)

# 6. 验证指定块大小的数据文件
$ dbv file=/oracle/app/oracle/oradata/FGEDUDB/users01.dbf blocksize=8192

DBVERIFY: Release 19.0.0.0.0 – Production on Tue Mar 31 10:00:00 2026

DBVERIFY – Verification starting : FILE = /oracle/app/oracle/oradata/FGEDUDB/users01.dbf

DBVERIFY – Verification complete

Total Pages Examined : 12800
Total Pages Processed (Data) : 8192
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 2048
Total Pages Failing (Index): 0
Total Pages Processed (Other): 2559
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 0
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 12345678 (0.12345678)

# 7. 验证段
$ dbv userid=scott/tiger segment_id=4.12345

DBVERIFY: Release 19.0.0.0.0 – Production on Tue Mar 31 10:00:00 2026

DBVERIFY – Verification starting : SEGMENT_ID = 4.12345

DBVERIFY – Verification complete

Total Pages Examined : 100
Total Pages Processed (Data) : 80
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 20
Total Pages Failing (Index): 0
Total Pages Processed (Other): 0
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 0
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 12345678 (0.12345678)

# 8. 验证所有数据文件脚本
$ vi /home/oracle/scripts/dbv_all_datafiles.sh

#!/bin/bash
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 验证所有数据文件

export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
export ORACLE_SID=FGEDUDB
export PATH=$ORACLE_HOME/bin:$PATH

LOG_DIR=”/home/oracle/scripts/dbv_logs”
mkdir -p $LOG_DIR

# 获取所有数据文件
sqlplus -s / as sysdba < /tmp/datafiles.txt
set heading off
set feedback off
set linesize 200
select file_name from dba_data_files;
exit
EOF

# 验证每个数据文件
while read file_name; do
file_basename=$(basename $file_name)
echo “Verifying $file_name…”
dbv file=$file_name feedback=1000 > $LOG_DIR/${file_basename}.log 2>&1

# 检查是否有损坏
if grep -q “Total Pages Marked Corrupt” $LOG_DIR/${file_basename}.log; then
corrupt_count=$(grep “Total Pages Marked Corrupt” $LOG_DIR/${file_basename}.log | awk ‘{print $NF}’)
if [ “$corrupt_count” -gt 0 ]; then
echo “CORRUPTION FOUND in $file_name: $corrupt_count corrupt pages”
echo “$(date): CORRUPTION FOUND in $file_name: $corrupt_count corrupt pages” >> $LOG_DIR/corruption_alert.log
fi
fi
done < /tmp/datafiles.txt echo "DBVERIFY completed for all data files" # 执行验证脚本 $ chmod +x /home/oracle/scripts/dbv_all_datafiles.sh $ /home/oracle/scripts/dbv_all_datafiles.sh

3.1.2 配置DBVerify验证备份文件

# 1. 验证RMAN备份片
$ dbv file=/backup/FGEDUDB/backup_12345.bak

DBVERIFY: Release 19.0.0.0.0 – Production on Tue Mar 31 10:00:00 2026

DBVERIFY – Verification starting : FILE = /backup/FGEDUDB/backup_12345.bak

DBVERIFY – Verification complete

Total Pages Examined : 128000
Total Pages Processed (Data) : 0
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 0
Total Pages Failing (Index): 0
Total Pages Processed (Other): 128000
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 0
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 0 (0.0)

# 2. 验证数据泵导出文件
$ dbv file=/backup/FGEDUDB/expdp_full.dmp

DBVERIFY: Release 19.0.0.0.0 – Production on Tue Mar 31 10:00:00 2026

DBVERIFY – Verification starting : FILE = /backup/FGEDUDB/expdp_full.dmp

DBVERIFY – Verification complete

Total Pages Examined : 25600
Total Pages Processed (Data) : 0
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 0
Total Pages Failing (Index): 0
Total Pages Processed (Other): 25600
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 0
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 0 (0.0)

# 3. 验证冷备份文件
$ dbv file=/backup/FGEDUDB/cold_backup/system01.dbf

DBVERIFY: Release 19.0.0.0.0 – Production on Tue Mar 31 10:00:00 2026

DBVERIFY – Verification starting : FILE = /backup/FGEDUDB/cold_backup/system01.dbf

DBVERIFY – Verification complete

Total Pages Examined : 51200
Total Pages Processed (Data) : 32768
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 8192
Total Pages Failing (Index): 0
Total Pages Processed (Other): 10240
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 0
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 12345678 (0.12345678)

# 4. 验证所有备份文件脚本
$ vi /home/oracle/scripts/dbv_all_backups.sh

#!/bin/bash
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 验证所有备份文件

BACKUP_DIR=”/backup/FGEDUDB”
LOG_DIR=”/home/oracle/scripts/dbv_logs”
mkdir -p $LOG_DIR

# 验证所有备份文件
for backup_file in $BACKUP_DIR/*.bak; do
file_basename=$(basename $backup_file)
echo “Verifying $backup_file…”
dbv file=$backup_file > $LOG_DIR/${file_basename}.log 2>&1

# 检查是否有损坏
if grep -q “Total Pages Marked Corrupt” $LOG_DIR/${file_basename}.log; then
corrupt_count=$(grep “Total Pages Marked Corrupt” $LOG_DIR/${file_basename}.log | awk ‘{print $NF}’)
if [ “$corrupt_count” -gt 0 ]; then
echo “CORRUPTION FOUND in $backup_file: $corrupt_count corrupt pages”
fi
fi
done

echo “DBVERIFY completed for all backup files”

# 执行验证脚本
$ chmod +x /home/oracle/scripts/dbv_all_backups.sh
$ /home/oracle/scripts/dbv_all_backups.sh

3.2 DBVerify使用监控

3.2.1 配置DBVerify监控脚本

# 1. 创建DBVerify监控脚本
$ vi /home/oracle/scripts/monitor_dbverify.sh

#!/bin/bash
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# DBVerify监控脚本

export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
export ORACLE_SID=FGEDUDB
export PATH=$ORACLE_HOME/bin:$PATH

LOG_DIR=”/home/oracle/scripts/dbv_logs”
mkdir -p $LOG_DIR

# 获取所有数据文件
sqlplus -s / as sysdba < /tmp/datafiles.txt
set heading off
set feedback off
set linesize 200
select file_name from dba_data_files;
exit
EOF

# 验证每个数据文件
total_corrupt=0
while read file_name; do
file_basename=$(basename $file_name)
echo “$(date): Verifying $file_name…” >> $LOG_DIR/dbv_monitor.log

dbv file=$file_name feedback=1000 > $LOG_DIR/${file_basename}.log 2>&1

# 检查是否有损坏
if grep -q “Total Pages Marked Corrupt” $LOG_DIR/${file_basename}.log; then
corrupt_count=$(grep “Total Pages Marked Corrupt” $LOG_DIR/${file_basename}.log | awk ‘{print $NF}’)
if [ “$corrupt_count” -gt 0 ]; then
echo “$(date): CORRUPTION FOUND in $file_name: $corrupt_count corrupt pages” >> $LOG_DIR/dbv_monitor.log
total_corrupt=$((total_corrupt + corrupt_count))
fi
fi
done < /tmp/datafiles.txt # 汇总结果 echo "$(date): DBVERIFY completed. Total corrupt pages: $total_corrupt" >> $LOG_DIR/dbv_monitor.log

if [ “$total_corrupt” -gt 0 ]; then
# 发送告警邮件
echo “Data corruption detected. Total corrupt pages: $total_corrupt” | mail -s “DBVERIFY Alert” admin@fgedu.net.cn
fi

# 2. 设置脚本权限
$ chmod +x /home/oracle/scripts/monitor_dbverify.sh

# 3. 测试脚本
$ /home/oracle/scripts/monitor_dbverify.sh

# 4. 设置定期监控
$ crontab -e

# 每周日凌晨2点验证所有数据文件
0 2 * * 0 /home/oracle/scripts/monitor_dbverify.sh >> /home/oracle/scripts/dbv_monitor.log 2>&1

3.2.2 配置DBVerify结果分析

# 1. 创建DBVerify结果分析脚本
$ vi /home/oracle/scripts/analyze_dbverify_results.sh

#!/bin/bash
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# DBVerify结果分析脚本

LOG_DIR=”/home/oracle/scripts/dbv_logs”
REPORT_FILE=”/home/oracle/scripts/dbv_report.txt”

echo “DBVerify Results Analysis Report” > $REPORT_FILE
echo “Generated: $(date)” >> $REPORT_FILE
echo “========================================” >> $REPORT_FILE

# 统计验证结果
total_files=0
total_corrupt=0
corrupt_files=””

for log_file in $LOG_DIR/*.log; do
if [ -f “$log_file” ]; then
total_files=$((total_files + 1))

if grep -q “Total Pages Marked Corrupt” $log_file; then
corrupt_count=$(grep “Total Pages Marked Corrupt” $log_file | awk ‘{print $NF}’)
if [ “$corrupt_count” -gt 0 ]; then
total_corrupt=$((total_corrupt + corrupt_count))
file_name=$(basename $log_file .log)
corrupt_files=”$corrupt_files\n$file_name: $corrupt_count corrupt pages”
fi
fi
fi
done

echo “” >> $REPORT_FILE
echo “Summary:” >> $REPORT_FILE
echo “——–” >> $REPORT_FILE
echo “Total files verified: $total_files” >> $REPORT_FILE
echo “Total corrupt pages: $total_corrupt” >> $REPORT_FILE

if [ “$total_corrupt” -gt 0 ]; then
echo “” >> $REPORT_FILE
echo “Corrupt Files:” >> $REPORT_FILE
echo “————–” >> $REPORT_FILE
echo -e “$corrupt_files” >> $REPORT_FILE
else
echo “” >> $REPORT_FILE
echo “No corruption detected.” >> $REPORT_FILE
fi

echo “” >> $REPORT_FILE
echo “Recommendations:” >> $REPORT_FILE
echo “—————-” >> $REPORT_FILE
if [ “$total_corrupt” -gt 0 ]; then
echo “1. Use RMAN BLOCKRECOVER to fix corrupt blocks” >> $REPORT_FILE
echo “2. Check hardware and storage systems” >> $REPORT_FILE
echo “3. Review alert log for related errors” >> $REPORT_FILE
else
echo “1. Continue regular DBVerify checks” >> $REPORT_FILE
echo “2. Maintain backup strategy” >> $REPORT_FILE
fi

# 发送报告
cat $REPORT_FILE | mail -s “DBVerify Weekly Report” admin@fgedu.net.cn

# 2. 设置脚本权限
$ chmod +x /home/oracle/scripts/analyze_dbverify_results.sh

# 3. 测试脚本
$ /home/oracle/scripts/analyze_dbverify_results.sh

# 4. 查看报告
$ cat /home/oracle/scripts/dbv_report.txt

DBVerify Results Analysis Report
Generated: Tue Mar 31 10:00:00 CST 2026
========================================

Summary:
——–
Total files verified: 5
Total corrupt pages: 1

Corrupt Files:
————–
users01.dbf: 1 corrupt pages

Recommendations:
—————-
1. Use RMAN BLOCKRECOVER to fix corrupt blocks
2. Check hardware and storage systems
3. Review alert log for related errors

3.3 DBVerify使用故障处理

3.3.1 DBVerify验证损坏处理

# 问题现象
$ dbv file=/oracle/app/oracle/oradata/FGEDUDB/users01.dbf

DBVERIFY: Release 19.0.0.0.0 – Production on Tue Mar 31 10:00:00 2026

DBVERIFY – Verification starting : FILE = /oracle/app/oracle/oradata/FGEDUDB/users01.dbf

Page 1024 is marked corrupt
Corrupt block relative dba: 0x01000400, file 4, block 1024
Completely zero block found during dbv:

DBVERIFY – Verification complete

Total Pages Examined : 12800
Total Pages Processed (Data) : 8192
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 2048
Total Pages Failing (Index): 0
Total Pages Processed (Other): 2559
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 0
Total Pages Marked Corrupt : 1
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 12345678 (0.12345678)

# 分析步骤

# 1. 确认损坏块位置
# 文件号:4
# 块号:1024
# 损坏类型:ALL ZERO

# 2. 查看损坏块所属对象
SQL> select
segment_type,
owner,
segment_name
from dba_extents
where file_id = 4
and 1024 between block_id and block_id + blocks – 1;

SEGMENT_TYPE OWNER SEGMENT_NAME
————– ——- ————
TABLE SCOTT EMP

# 3. 查看备份可用性
RMAN> list backup of datafile 4;

List of Backup Sets
===================
BS Key Type LV Size Device Type Elapsed Time Completion Time
——- —- — ———- ———– ———— —————
123 Full 1024.00M DISK 00:05:00 2026-03-30 10:00:00

# 4. 解决方案:使用RMAN恢复损坏块
RMAN> blockrecover datafile 4 block 1024;

Starting blockrecover at 2026-03-31 10:10:00
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=150 device type=DISK
channel ORA_DISK_1: restoring block(s)
channel ORA_DISK_1: specifying block(s) to restore from backup set
restoring blocks of datafile 00004
channel ORA_DISK_1: reading from backup piece /backup/FGEDUDB/backup_12345.bak
channel ORA_DISK_1: restored block(s) from backup piece 1
channel ORA_DISK_1: block restore complete, elapsed time: 00:00:10
starting media recovery
media recovery complete, elapsed time: 00:00:05
Finished blockrecover at 2026-03-31 10:10:15

# 5. 验证修复结果
$ dbv file=/oracle/app/oracle/oradata/FGEDUDB/users01.dbf

DBVERIFY: Release 19.0.0.0.0 – Production on Tue Mar 31 10:15:00 2026

DBVERIFY – Verification starting : FILE = /oracle/app/oracle/oradata/FGEDUDB/users01.dbf

DBVERIFY – Verification complete

Total Pages Examined : 12800
Total Pages Processed (Data) : 8192
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 2048
Total Pages Failing (Index): 0
Total Pages Processed (Other): 2559
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 0
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 12345678 (0.12345678)

# 6. 验证数据完整性
SQL> select count(*) from scott.emp;

COUNT(*)
———-
14

3.3.2 DBVerify常见错误处理

# 1. 错误:DBV-00100: specified parameter invalid
# 原因:参数格式错误
# 解决:检查参数格式

$ dbv file=/oracle/app/oracle/oradata/FGEDUDB/system01.dbf blocksize=abc
DBV-00100: specified parameter invalid (blocksize)

$ dbv file=/oracle/app/oracle/oradata/FGEDUDB/system01.dbf blocksize=8192
DBVERIFY – Verification complete

# 2. 错误:DBV-00101: file not found
# 原因:文件不存在
# 解决:检查文件路径

$ dbv file=/oracle/app/oracle/oradata/FGEDUDB/notexist.dbf
DBV-00101: file not found (/oracle/app/oracle/oradata/FGEDUDB/notexist.dbf)

$ dbv file=/oracle/app/oracle/oradata/FGEDUDB/system01.dbf
DBVERIFY – Verification complete

# 3. 错误:DBV-00102: file is not a database file
# 原因:文件不是数据库文件
# 解决:检查文件类型

$ dbv file=/oracle/app/oracle/oradata/FGEDUDB/control01.ctl
DBV-00102: file is not a database file

$ dbv file=/oracle/app/oracle/oradata/FGEDUDB/system01.dbf
DBVERIFY – Verification complete

# 4. 错误:DBV-00103: block size mismatch
# 原因:块大小不匹配
# 解决:指定正确的块大小

$ dbv file=/oracle/app/oracle/oradata/FGEDUDB/system01.dbf blocksize=4096
DBV-00103: block size mismatch (expected 8192, found 4096)

$ dbv file=/oracle/app/oracle/oradata/FGEDUDB/system01.dbf blocksize=8192
DBVERIFY – Verification complete

# 5. 错误:DBV-00104: cannot open file
# 原因:文件权限不足
# 解决:检查文件权限

$ ls -l /oracle/app/oracle/oradata/FGEDUDB/system01.dbf
-rw-r—– 1 oracle oinstall 419430400 Mar 31 10:00 /oracle/app/oracle/oradata/FGEDUDB/system01.dbf

$ chmod 640 /oracle/app/oracle/oradata/FGEDUDB/system01.dbf
$ dbv file=/oracle/app/oracle/oradata/FGEDUDB/system01.dbf
DBVERIFY – Verification complete

风哥提示:DBVerify是验证数据文件完整性的重要工具,建议定期使用DBVerify验证数据文件,及时发现和处理损坏问题。学习交流加群风哥QQ113257174

Part04-生产案例与实战讲解

4.1 DBVerify使用分析案例

在生产环境中使用DBVerify的完整案例:

4.1.1 场景描述

某企业生产数据库需要定期验证数据文件完整性,使用DBVerify工具进行验证。

4.1.2 分析步骤

# 1. 创建DBVerify验证脚本
$ vi /home/oracle/scripts/weekly_dbverify.sh

#!/bin/bash
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 每周DBVerify验证脚本

export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
export ORACLE_SID=FGEDUDB
export PATH=$ORACLE_HOME/bin:$PATH

DATE=$(date +%Y%m%d)
LOG_DIR=”/home/oracle/scripts/dbv_logs/$DATE”
mkdir -p $LOG_DIR

echo “$(date): Starting weekly DBVerify check…” > $LOG_DIR/summary.log

# 获取所有数据文件
sqlplus -s / as sysdba < /tmp/datafiles.txt
set heading off
set feedback off
set linesize 200
select file_id || ‘,’ || file_name from dba_data_files order by file_id;
exit
EOF

# 验证每个数据文件
total_corrupt=0
while IFS=’,’ read -r file_id file_name; do
file_basename=$(basename $file_name)
echo “$(date): Verifying file $file_id: $file_name…” >> $LOG_DIR/summary.log

dbv file=$file_name feedback=1000 > $LOG_DIR/${file_id}_${file_basename}.log 2>&1

# 检查是否有损坏
if grep -q “Total Pages Marked Corrupt” $LOG_DIR/${file_id}_${file_basename}.log; then
corrupt_count=$(grep “Total Pages Marked Corrupt” $LOG_DIR/${file_id}_${file_basename}.log | awk ‘{print $NF}’)
if [ “$corrupt_count” -gt 0 ]; then
echo “$(date): CORRUPTION in file $file_id: $corrupt_count corrupt pages” >> $LOG_DIR/summary.log
total_corrupt=$((total_corrupt + corrupt_count))
else
echo “$(date): File $file_id: OK” >> $LOG_DIR/summary.log
fi
fi
done < /tmp/datafiles.txt # 汇总结果 echo "$(date): DBVERIFY completed. Total corrupt pages: $total_corrupt" >> $LOG_DIR/summary.log

if [ “$total_corrupt” -gt 0 ]; then
# 发送告警邮件
mail -s “DBVERIFY Alert: $total_corrupt corrupt pages found” admin@fgedu.net.cn < $LOG_DIR/summary.log else # 发送正常报告 mail -s "DBVERIFY Weekly Report: All files OK" admin@fgedu.net.cn < $LOG_DIR/summary.log fi echo "$(date): Weekly DBVerify check completed." >> $LOG_DIR/summary.log

# 2. 设置脚本权限
$ chmod +x /home/oracle/scripts/weekly_dbverify.sh

# 3. 测试脚本
$ /home/oracle/scripts/weekly_dbverify.sh

# 4. 查看验证结果
$ cat /home/oracle/scripts/dbv_logs/20260331/summary.log

Tue Mar 31 10:00:00 CST 2026: Starting weekly DBVerify check…
Tue Mar 31 10:00:05 CST 2026: Verifying file 1: /oracle/app/oracle/oradata/FGEDUDB/system01.dbf…
Tue Mar 31 10:00:10 CST 2026: File 1: OK
Tue Mar 31 10:00:15 CST 2026: Verifying file 2: /oracle/app/oracle/oradata/FGEDUDB/sysaux01.dbf…
Tue Mar 31 10:00:20 CST 2026: File 2: OK
Tue Mar 31 10:00:25 CST 2026: Verifying file 3: /oracle/app/oracle/oradata/FGEDUDB/undotbs01.dbf…
Tue Mar 31 10:00:30 CST 2026: File 3: OK
Tue Mar 31 10:00:35 CST 2026: Verifying file 4: /oracle/app/oracle/oradata/FGEDUDB/users01.dbf…
Tue Mar 31 10:00:40 CST 2026: File 4: OK
Tue Mar 31 10:00:45 CST 2026: DBVERIFY completed. Total corrupt pages: 0
Tue Mar 31 10:00:50 CST 2026: Weekly DBVerify check completed.

4.2 DBVerify使用故障处理

在DBVerify使用故障处理过程中的方法和技巧:

4.2.1 故障处理流程

# DBVerify使用故障处理流程

# 1. 故障识别
# – 运行DBVerify验证
# – 检查验证结果
# – 确认损坏位置

# 2. 故障分析
# – 查看损坏块信息
# – 确定损坏对象
# – 分析损坏原因

# 3. 故障处理
# – 使用RMAN恢复损坏块
# – 使用DBMS_REPAIR修复损坏
# – 重建损坏对象

# 4. 故障预防
# – 定期验证数据文件
# – 保持备份完整
# – 监控硬件状态

# 示例:DBVerify使用故障处理

# 1. 故障识别
$ dbv file=/oracle/app/oracle/oradata/FGEDUDB/users01.dbf

Page 1024 is marked corrupt
Corrupt block relative dba: 0x01000400, file 4, block 1024

# 2. 故障分析
SQL> select segment_type, owner, segment_name
from dba_extents
where file_id = 4 and 1024 between block_id and block_id + blocks – 1;

SEGMENT_TYPE OWNER SEGMENT_NAME
————– ——- ————
TABLE SCOTT EMP

# 3. 故障处理
RMAN> blockrecover datafile 4 block 1024;

Starting blockrecover at 2026-03-31 10:20:00
channel ORA_DISK_1: restoring block(s)
channel ORA_DISK_1: block restore complete, elapsed time: 00:00:10
Finished blockrecover at 2026-03-31 10:20:10

# 4. 验证处理结果
$ dbv file=/oracle/app/oracle/oradata/FGEDUDB/users01.dbf

DBVERIFY – Verification complete
Total Pages Marked Corrupt : 0

4.3 DBVerify使用优化

优化DBVerify使用配置的最佳实践:

4.3.1 优化DBVerify使用管理

# 1. 创建DBVerify优化管理脚本
$ vi /home/oracle/scripts/optimize_dbverify.sh

#!/bin/bash
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# DBVerify优化管理脚本

export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
export ORACLE_SID=FGEDUDB
export PATH=$ORACLE_HOME/bin:$PATH

LOG_DIR=”/home/oracle/scripts/dbv_logs”
mkdir -p $LOG_DIR

# 获取数据文件信息
sqlplus -s / as sysdba < /tmp/datafile_info.txt
set heading off
set feedback off
set linesize 200
select file_id || ‘,’ || file_name || ‘,’ || bytes/1024/1024 as size_mb
from dba_data_files
order by file_id;
exit
EOF

# 根据文件大小选择验证策略
while IFS=’,’ read -r file_id file_name size_mb; do
file_basename=$(basename $file_name)

if [ “$size_mb” -gt 10240 ]; then
# 大文件:分批验证
echo “$(date): Large file $file_id ($size_mb MB), verifying in batches…” >> $LOG_DIR/optimize.log

# 获取文件块数
total_blocks=$((size_mb * 1024 * 1024 / 8192))
batch_size=10000

for ((start=1; start<=total_blocks; start+=batch_size)); do end=$((start + batch_size - 1)) if [ $end -gt $total_blocks ]; then end=$total_blocks fi dbv file=$file_name start=$start end=$end feedback=1000 > $LOG_DIR/${file_id}_${start}_${end}.log 2>&1

# 检查损坏
if grep -q “Total Pages Marked Corrupt” $LOG_DIR/${file_id}_${start}_${end}.log; then
corrupt_count=$(grep “Total Pages Marked Corrupt” $LOG_DIR/${file_id}_${start}_${end}.log | awk ‘{print $NF}’)
if [ “$corrupt_count” -gt 0 ]; then
echo “$(date): CORRUPTION in file $file_id, blocks $start-$end: $corrupt_count corrupt pages” >> $LOG_DIR/optimize.log
fi
fi
done
else
# 小文件:完整验证
echo “$(date): Small file $file_id ($size_mb MB), verifying completely…” >> $LOG_DIR/optimize.log

dbv file=$file_name feedback=1000 > $LOG_DIR/${file_id}_${file_basename}.log 2>&1

# 检查损坏
if grep -q “Total Pages Marked Corrupt” $LOG_DIR/${file_id}_${file_basename}.log; then
corrupt_count=$(grep “Total Pages Marked Corrupt” $LOG_DIR/${file_id}_${file_basename}.log | awk ‘{print $NF}’)
if [ “$corrupt_count” -gt 0 ]; then
echo “$(date): CORRUPTION in file $file_id: $corrupt_count corrupt pages” >> $LOG_DIR/optimize.log
fi
fi
fi
done < /tmp/datafile_info.txt echo "$(date): DBVerify optimization completed." >> $LOG_DIR/optimize.log

# 2. 设置脚本权限
$ chmod +x /home/oracle/scripts/optimize_dbverify.sh

# 3. 测试脚本
$ /home/oracle/scripts/optimize_dbverify.sh

# 4. 查看优化结果
$ cat /home/oracle/scripts/dbv_logs/optimize.log

生产环境建议:DBVerify使用优化需要建立完善的验证流程,建议定期验证、记录结果、及时处理。更多学习教程公众号风哥教程itpux_com

Part05-风哥经验总结与分享

5.1 DBVerify使用总结

Oracle DBVerify是验证数据文件完整性的重要工具,具有以下特点:

  • 外部工具:独立于数据库实例运行
  • 物理验证:验证数据文件物理结构
  • 损坏检测:检测数据文件中的损坏块
  • 离线验证:可以在数据库关闭状态下使用
  • 快速检查:快速验证数据文件完整性

5.2 DBVerify使用检查清单

Oracle DBVerify使用检查清单:

  • 验证频率:定期验证数据文件
  • 验证范围:验证所有数据文件
  • 验证记录:记录验证结果
  • 损坏处理:及时处理发现的损坏
  • 预防措施:制定预防措施
  • 文档记录:记录验证过程

5.3 DBVerify使用工具推荐

Oracle DBVerify使用工具推荐:

  • DBVerify:验证数据文件完整性
  • RMAN:恢复损坏块
  • DBMS_REPAIR:修复损坏块
  • ANALYZE:验证对象结构
  • SQL*Plus:执行SQL命令
  • Shell脚本:自动化验证过程
风哥提示:DBVerify是验证数据文件完整性的重要工具,建议定期使用DBVerify验证数据文件,及时发现和处理损坏问题。from:www.itpux.com www.fgedu.net.cn

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息