OBET-Oracle Block Editor Tool使用说明

联系:手机/微信(+86 17813235971) QQ(107644445)QQ咨询惜分飞

标题:OBET-Oracle Block Editor Tool使用说明

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

1. 概述

OBET 以 REPL 交互模式工作:启动后进入 OBET> 提示符,逐条执行命令。文件以 文件号 + 块号 的方式定位,可同时维护一份文件列表(来自 listfile.txt),方便在不同数据文件之间交叉读写。

功能概览

  • 十六进制查看 / 编辑数据块(自动维护 tailchk 和 checksum)
  • 打印 Oracle 内部结构(kcbh / kcvfh* / tailchk
  • 跨数据文件拷贝块 / 字节范围 / 文件头 SCN 信息
  • 整文件强制拷贝(forcecopy,绕过坏块)
  • 扩展数据文件(extend file N,按文件头记录大小补齐零块)
  • 坏块修复:corrupt / repair block / repair blkscn / merge
  • dbv 数据块物理一致性扫描(可指定文件/起始块/块数)
  • 导出 / 解析数据库元数据:get_dhr / parse_ctl / dump_undo
  • 解析 RDBA 编码(rdba / getrdba
  • 构造 Oracle 数据块(build block N,M
  • Linux 下 Patch Oracle 进程 SCN(patch_scn
授权说明写操作(modify / corrupt / repair / copy / merge / forcecopy / extend / patch_scn 等需要修改磁盘内容的命令)需要先 set mode edit 进入编辑模式,并在出现确认提示时输入 YYES 才会执行写入。 backup 仅复制块到本地目录,不需授权。未授权时仅允许只读命令。

2. 开发者信息

姓名 XiFenFei
电话 +86-17813235971
邮箱 dba@xifenfei
QQ 107644445
微信 17813235971
网站 https://www.xifenfei.com

反馈授权 / Bug / 功能建议可通过上述任一渠道联系。

3. 启动与会话

3.1 help

显示完整命令清单(与本手册对应的内嵌帮助)。

OBET> help

  [File / Block Setup]
  open          - Load file list (format:  )
  info                    - Show loaded file list
  set       - Configure: filename|file |blocksize|block|offset|count|mode|endian
  show                    - Display current settings
  listfile <path|remove|edit>  - Scan dir (path), remove, or edit listfile.txt (notepad/vi)

  [View Data]
  d/dump [file N] [block X] [offset Y] [count Z] - Display block data (default: current file/block)
  p/print <kcvfh[.field]|tailchk>  - Print Oracle structure (use 'p' alone for full list)

  [Verify / Calculate]
  sum [apply] [file N] [block X]       - Verify (or apply) block checksum
  tailchk [apply] [file N] [block X]   - Verify (or apply) block tailchk
  dbv [file N [block M [blocks X]]]    - Verify data blocks for corruption

  [Modify Data]
  m/modify  [file N] [block X] [offset Y]  - Modify bytes (with auto-checksum/tailchk)
  corrupt [file N] [block X]          - Mark block as corrupted
  backup [file N] [block X]           - Backup block to backup_blk/
  undo                                - Undo last modification

  [Repair]
  repair block [file N] [block X]         - Fix seq_kcbh / tailchk / checksum
  repair blkscn [file N] [block X]        - Fix block SCN lower than block CSC
  copy data  to               - Copy byte range between files
    / format: file[,block][,offset[,count]]
    Example: copy data 1,1,16,32 to 2,5,16
  copy block <file,block> to <file,block>  - Copy entire block between files
  copy chkscn file N to file M            - Copy datafile header checkpoint SCN info
  copy resetlogscn file N to file M       - Copy datafile header resetlogs info
  forcecopy file N to               - Force copy file ignoring bad blocks (damaged disks)
  extend file N                          - Check and extend datafile to match header record
  merge file N from M                    - Repair N's bad blocks using M's blocks at same RDBA
  build block N,M [to file X]           - Build block (N=file#, M=block#); write build_N_M.blk; 'to file X' patch after validation

  [Database Info / Diagnostics]
  get_dhr                - Extract DB info from file headers to dhr_*.txt
  parse_ctl        - Parse Oracle control file (DB name / datafiles / tablespaces)
  rdba              - Parse RDBA value to File# and Block# (e.g., rdba 0xFEDCBA12)
  getrdba <rfile#> <block#> - Calculate RDBA from rfile# and block# (e.g., getrdba 1 500)
  dump_undo [file N] [block M] - Dump UNDO$ segment: name + status$ (default: file 1 block 224)

  [Session]
  license              - Show / manage license
  version              - Show version and developer info
  spool |off    - Start/stop logging to file
  help                 - Show this help message
  quit/exit            - Exit OBET

3.2 version

显示 OBET 版本、构建时间、开发者信息。

OBET> version
=============================================
Welcome to Oracle Block Editor Tool (OBET)
=============================================
***** !!! For Oracle Internal Use only !!! *****

[Software Function Description]
- View and edit data block in hexadecimal format
- Print Oracle internal structures (kcbh / kcvfh* / tailchk)
- Modify data block bytes (with auto tailchk/checksum)
- Copy block / data between different datafiles
- Copy / repair datafile header SCN info (copy chkscn/resetlogscn)
- Force copy entire file ignoring bad blocks (forcecopy)
- Extend datafile to expected size from file header (extend)
- Mark data block as corrupted block
- Verify data blocks for corruption (dbv)
- Repair corrupted block / Repair block SCN
- Calculate and verify tailchk / checksum
- Backup data block to backup_blk/ directory
- Repair bad blocks using healthy donor file (merge)
- Extract undo$ segment contents (dump_undo)
- Extract database info from file headers (get_dhr)
- Parse Oracle control file (parse_ctl)
- Parse RDBA value to Oracle File# and Block#
- Patch Oracle process SCN in memory (patch_scn, Linux only)
- Scan directory to listfile.txt (listfile)

[Developer Information]
- Name: XiFenFei
- Phone: +86-17813235971
- Email: dba@xifenfei
- Q Q: 107644445
- WeChat: 17813235971
- Website: https://www.xifenfei.com

[Version Details]
- Software Version: 2026.08
- Build Date: 2026.08.12 17:49:27

3.3 quit / exit

退出 OBET。

4. 文件 / 块设置

这一组命令负责把磁盘上的数据文件加载到 OBET 上下文。所有读写命令都依赖当前的 filenameblocksizeblockoffsetcountendian 等参数。

4.1 open <listfile>

从指定文件加载文件列表。文件每行格式:<num> <path>num 是 OBET 内部文件号,供后续 set file N / file N 使用。

OBET> open listfile.txt
OBET> open test_listfile.txt
Loaded 1 files from datafile list 'test_listfile.txt'.

4.2 info

显示当前已加载的文件列表(编号 / 路径)。

OBET> info
----------------------------------------
No   Path
----------------------------------------
1    E:/CC/obet/dbf/SYSTEM01.DBF
----------------------------------------

4.3 set <param> <value>

设置上下文参数。可用参数:

参数 取值 说明
filename 文件路径 当前操作的目标文件
file 整数 N 切换到已加载列表中第 N 个文件
blocksize 2048 / 4096 / 8192 / 16384 / 32768 Oracle 块大小
block 整数 当前块号
offset 整数(块内偏移) 块内起始偏移
count 整数 dump/modify 的字节数
mode browse / edit 交互模式(默认 browse)
endian big / little 多字节字段字节序
OBET> set filename /u01/oradata/users01.dbf
OBET> set blocksize 8192
OBET> set block 100
OBET> set endian big

4.4 show

显示当前上下文所有参数,包括 Modebrowse / edit)、FilenameFile#Block#BlocksizeOffsetCountEndian 等。

OBET> show
Current settings:
File: (not set)
Blocksize: 8192 bytes
Block: 1
Offset in block: 0 (file offset: 0x00002000)
Count: 32 bytes
Mode: browse
Endian: little (x86)
Loaded files: 1 (use 'info' to list)

4.5 listfile <path | remove | edit>

扫描目录生成 listfile.txt、清空或编辑。

OBET> listfile /u01/oradata
OBET> listfile edit
OBET> listfile remove
  • listfile <path>:递归扫描目录,支持通配符 *,结果追加写入当前目录的 listfile.txt
  • listfile remove:删除当前目录的 listfile.txt
  • listfile edit [path]:调用系统编辑器(Windows 记事本 / Linux vi)打开 listfile.txt,可指定路径

通配符示例:

OBET> listfile E:/oradata           # 扫描整个目录
OBET> listfile E:/dbf/system*.dbf  # 仅扫描名称以 system 开头且 .dbf 结尾的数据文件

已存在 listfile.txt 时,新扫描结果以递增编号追加写入。

写操作保护写盘时会校验输入,避免路径穿越(../..\)。

5. 查看数据

5.1 dump / d [file N] [block X] [offset Y] [count Z]

以十六进制 + ASCII 形式显示块数据。默认使用当前文件 / 块 / 偏移,也可直接通过参数指定。

OBET> d
OBET> dump file 1 block 100
OBET> dump offset 16 count 64
OBET> dump file 2 block 5 offset 0 count 128
OBET> dump file 1 block 128 offset 32 count 48
File: e:/cc/obet/dbf/system01.dbf (#1 in listfile)
Block: 128                Offsets:    32 to    79
--------------------------------------------------------------------------------
00100020 00000000 01000200 00000000 04001200 43000000 B02C8000 2F001000 01200000
00100040 22120200 00015800 FFFFC200 2A046803

5.2 print / p <kcvfh[.field] | tailchk>

解析并打印 Oracle 内部结构。仅支持一级字段。

OBET> p kcvfh
OBET> p kcvfh.kcvfhhdr
OBET> p kcvfh.kcvfhckp
OBET> p tailchk
ub4 tailchk                                      @8188    0x00000B01

支持的全部结构字段(p 不带参数可打印完整清单):

字段 含义
kcvfhhdr 文件头描述符
kcvfhrfn 相对文件号
kcvfhrdb DBID
kcvfhcrs 创建 SCN
kcvfhcrt 创建时间
kcvfhrls Resetlogs SCN
kcvfhcrs Creation SCN
kcvfhbsc Backup SCN
kcvfhbti Backup table info
kcvfhbth Backup table header
kcvfhbcp Backup Checkpoint
kcvfhbhz Backup status
kcvfhccc Change count
kcvfhckp 完整 Checkpoint
kcvfhcpc Checkpoint count
kcvfhprs / kcvfhprc / kcvfhprfs / kcvfhrfs 恢复相关字段
kcvfhtsn / kcvfhtln / kcvfhtnm 表空间号 / 名长度 / 名
kcvfhrlc / kcvfhrts / kcvfhtrt Resetlogs 计数 / 时间戳 / 总复位次数
kcvfhxcd 扩展 Checkpoint
kcvfhsta Fuzzy 状态
kcvfhofb / kcvfhnfb Offset bytes / Next offset bytes
kcvfhbfh Backup file header block
kcvfhafs Auxiliary recovery
tailchk 块尾校验
仅支持一级结构访问,如 p kcvfh.kcvfhhdr,不支持 p kcvfh.kcvfhhdr.kccfhtyp

6. 校验 / 计算

6.1 sum [apply] [file N] [block X]

校验或修复 checksum(块头 kcbh 中的 kcbh.flags/kcbh.checksum 字段)。

OBET> sum
OBET> sum apply
OBET> sum file 2
OBET> sum apply file 2 block 100
OBET> sum
Check value for File e:\cc\obet\dbf\system01.dbf, Block 2:
  current = 0xB71C, required = 0xB71C

6.2 tailchk [apply] [file N] [block X]

校验或修复 tailchk(块末 4 字节与起始 SCN 比对)。

OBET> tailchk
OBET> tailchk apply
OBET> tailchk apply file 1 block 224
OBET> tailchk apply file 1 block 224
Confirm applying tailchk:
File: e:\cc\obet\dbf\system01.dbf
Block: 224
Offset in block: 8188 (file offset: 0x00071FFC)
Original value: 0x00E03F03
New value:      0x00E03F03
Confirm? (Y/YES to proceed): Y
tailchk applied successfully.

6.3 dbv [file N [block M [blocks X]]]

对全部已加载文件或指定文件做物理一致性扫描(类似 Oracle dbv 工具)。字节序由 set endian 控制。可检测五类问题:全零块、软损坏(seq_kcbh=0xFF)、tailchk 错误、checksum 错误、rdba 错误。

  • dbv:扫描全部已加载文件(从块 0 到文件末尾)
  • dbv file N:仅扫描文件 N(从块 0 到文件末尾)
  • dbv file N block M:扫描文件 N 从块 M 到文件末尾
  • dbv file N block M blocks X:扫描文件 N 从块 M 起共 X 块;若 M+X 超出文件总块数,则扫描到文件末尾

块号从 0 开始。自动识别 bigfile / smallfile 数据文件,bigfile 时跳过文件头(block 0)的 rdba 校验。扫描结果自动保存到日志文件:

  • dbvdbv_yyyymmddhhmmss.log
  • dbv file Ndbv_file_N_yyyymmddhhmmss.log
  • dbv file N block Mdbv_file_N_block_M_yyyymmddhhmmss.log
OBET> dbv
OBET> dbv file 1
OBET> dbv file 1 block 100
OBET> dbv file 1 block 100 blocks 500
OBET> dbv file 1 block 100 blocks 500
===============================================
DBV (Data Block Verification)
Block Size: 8192 bytes
Endian:     little-endian (x86)
Target:     file #1 (e:\cc\obet\dbf\system01.dbf)
Range:      block 100 to block 599 (500 blocks)
===============================================
Verifying file #1: e:\cc\obet\dbf\system01.dbf ...
DBV completed at: 2026-08-12 15:04:25
===============================================
DBV Summary:
Total blocks checked: 500
Total all zero blocks found: 0
Total all tailchk error blocks found: 0
Total all checksum error blocks found: 0
Total bad blocks found: 0
Execution time: 0.20 seconds
Throughput: 19.53 MB/s
===============================================
Detailed report saved to: dbv_file_1_block_100_20260812150425.log

7. 修改数据

7.1 modify / m <hex> [file N] [block X] [offset Y] 需授权

写入十六进制字节。写入后自动重新计算 tailchkchecksum。需先 set mode edit,执行时输入 Y 确认。

OBET> set mode edit
OBET> m 41424344
OBET> modify 41424344 file 1 block 100 offset 32
OBET> set mode edit
OBET> modify 41424344 file 1 block 128 offset 32
Confirm modification:
File: e:\cc\obet\dbf\system01.dbf
Block: 128
Offset: 32 (file offset: 0x00040020)
Original value: 01000200
New value:      41424344
Confirm? (Y/YES to proceed): Y
Data written successfully.

7.2 corrupt [file N] [block X] 需授权

将指定块标记为 Oracle 意义上的损坏块(破坏 tailchk)。需先 set mode edit,执行时输入 Y 确认。

OBET> corrupt file 1 block 128
Confirm marking block 128 as corrupted:
Block 128 current tailchk: 0x00200000
Successfully marked block 128 as corrupted.

7.3 backup [file N] [block X]

把指定块完整备份到当前目录的 backup_blk/ 子目录。备份文件名格式:backup_<filename>.<file#>_<block#>_<timestamp>.blk

OBET> backup file 1 block 128
Backing up file #1, block 128
e:\cc\obet\dbf\system01.dbf
Successfully backed up block 128 to backup_blk\system01.dbf.1_128_20260812150500.blk

7.4 undo 需授权

回滚最近一次 modify / repair / copy / corrupt 等写操作。OBET 在每次写操作前保留原块内容,回滚基于这份快照。

OBET> undo
Undid 1 operation(s). Block data restored from backup.

8. 修复

8.1 repair block / blkscn [file N] [block X] 需授权

  • repair block:修复 seq_kcbhtailchkchecksum
  • repair blkscn:把块的 scn 抬到不低于 csc(解决 ORA-600 [kdddgb] 之类 block SCN < block CSC 类报错)

均需先 set mode edit,执行时输入 Y 确认。

OBET> set mode edit
OBET> repair block
OBET> repair block file 2 block 100
OBET> repair blkscn file 1 block 224
OBET> repair block file 1 block 128
Repairing block 1, 128...
Current block SCN information:
  blkscn: 0x000000000278D9A3 (41663267)
  blkcsc: 0x0000000002790128 (41670952)
blkscn < blkcsc, SCN repair required.
New SCN values to write:
  base:  0x02790128 (41670952)
  wrap:  0x0000
  seq:   0x00
Confirm SCN repair operations: Operation cancelled.

8.2 copy 需授权

多种拷贝语义,全部写盘需授权。

子命令 语法 说明
copy data copy data <src> to <dest> 跨文件字节范围拷贝
copy block copy block <file,block> to <file,block> 整块拷贝
copy chkscn copy chkscn file N to file M 拷贝数据文件头 Checkpoint SCN 信息
copy resetlogscn copy resetlogscn file N to file M 拷贝 Resetlogs 信息

<src> / <dest> 格式:file[,block][,offset[,count]]。缺省 block 沿用当前块,缺省 offset = 0,缺省 count = blocksize。

OBET> copy data 1,1,16,32 to 2,5,16
OBET> copy block 1,100 to 2,100
OBET> copy chkscn file 1 to file 2
OBET> copy resetlogscn file 1 to file 2
OBET> copy block 1,128 to 1,129
Copying block 1,128 to 1,129...
  src: file#=1 block#=128 (rdba=0x00400080)
  dest: file#=1 block#=129 (rdba=0x00400081)
Block copied successfully.

8.3 merge file N from M 需授权

M 文件中 RDBA 一致的健康块替换 N 文件中的坏块。执行前 OBET 会要求输入 YES 二次确认。

OBET> merge file 2 from 3
OBET> merge file 2 from 3
Merging bad blocks from file 2 using healthy blocks from file 3...
File 2: scanning for bad blocks...
  Block 100: bad, searching donor...
  Block 100: rdba=0x00400064 matched, scanning file 3 for donor block...
  Block 100: donor found at file 3 block 100
  Replacing bad block 100 in file 2 with healthy block from file 3...
Merge completed. Total blocks repaired: 1
不可逆操作覆盖原文件块,请先 backup

8.4 forcecopy file N to <path> 需授权

整文件级别强制拷贝,忽略坏块(按 blocksize 步长逐块读取;坏块读到 0 字节时填充全 0×00 写入目标)。用于磁盘扇区部分损坏但仍能部分读取的应急场景。

OBET> forcecopy file 2 to D:\rescue\users01.dbf
OBET> forcecopy file 2 to D:\rescue\users01.dbf
forcecopy: source file 2, dest D:\rescue\users01.dbf
Reading source file...
  4096 bytes read OK (block 0)
  4096 bytes read OK (block 1)
  ... (progress every 1000 blocks)
  4182831104 bytes copied (510600 blocks)
forcecopy completed. 0 bad blocks filled with zeros.

8.5 extend file N 需授权

比较 Oracle 数据文件实际大小与文件头记录的预期大小,在不一致时将文件扩展至正确大小(尾部构造 Oracle block 填充)。

判定规则:读取 block 1 内部偏移 44 处的块计数字段,计算出预期大小:

预期大小 = (块计数 + 1) × blocksize

三种结果:

  • 相等——文件大小与预期一致,无需操作;
  • 预期 > 实际(文件偏小)——从当前块号起,逐块用构造的 Oracle 空块填充至预期大小(不足一块的尾部按字节填零);
  • 预期 < 实际(文件偏大)——输出提示,要求人工介入,不自动截断。

前提条件

  • 需先 set blocksize 设置正确的 Oracle 块大小(4096 / 8192 / 16384 / 32768)
  • 需先 set endian big|little 设置正确的字节序
  • 需先 set mode edit 进入编辑模式

开始写入前需输入 YYES 二次确认(忽略大小写)。

OBET> set blocksize 8192
OBET> set mode edit
OBET> extend file 1
File #1: E:\dbf\system.dbf
  BlockSize:       8192 bytes
  Header Blocks:   510600 (offset 44)
  Expected Size:   4182835200 bytes ((510600+1)*8192)
  Actual Size:     4182831104 bytes
  Status: File is smaller than header record.
  Extending file by 4096 bytes (Build Oracle block padding)...
  Confirm? (Y/yes to proceed): Y
  Done. File extended to 4182835200 bytes.
注意扩展操作不可逆,请在执行前做好文件备份。若文件实际大小大于预期,Oracle 内部可能已扩展但文件头未更新,请人工核实后处理。

8.6 build block N,M [to file X] 需授权

构造 Oracle 数据块(N=file# 1-1024,M=block#)并按需 patch 到 listfile 中的目标文件。

用法

  • build block N,M——仅在 OBET 当前工作目录生成 build_N_M.blk(始终生成,无论是否带 to file X)。
  • build block N,M to file X——生成 blk 之后,校验通过后将构造好的块覆盖到 listfile X 的 block M。
OBET> set endian big
OBET> build block 1,500
Created: build_1_500.blk (file#=1, block#=500, rdba=0x004001F4, tailchk=0x01000000, checksum=0x0113)

OBET> set mode edit
OBET> build block 1,500 to file 1
Created: build_1_500.blk (file#=1, block#=500, rdba=0x004001F4, tailchk=0x01000000, checksum=0x0113)
Confirm patch: File 1 Block 500 (E:\dbf\system.aix-11202)? [Y/YES]: Y
Patched: File 1 Block 500 (E:\dbf\system.aix-11202)

9. 数据库诊断

9.1 get_dhr

读取当前加载的每个数据文件的 block 1(数据文件头),解析数据库元数据并生成 数据文件头报告(Get Datafile Header Report)。报告同时输出到屏幕,并写入 dhr_<YYYYMMDD_HHMMSS>.txt

OBET> get_dhr
===============================================
get_dhr Get Datafile Header Report
Started: 2026-08-12 15:10:00
Block Size: 8192 bytes
Endian:     little-endian (x86)
===============================================
No  Path                                         DBName/DBID    Version  Ts#/TsName     File#/Rfile#  Size(DB/OS)  Create_Info           CheckPoint_Info        Fuzzy  Thread#/Seq#  Rlogs_SCN
--  ----                                         -------------  -------- -------------  -------------  -------------  -------------  --------------------  -------------------  -----  -------------  ----------
1   e:/cc/obet/dbf/system01.dbf                  ORCL/1248591446  0A200100  0/SYSTEM         1/1           590MB/OK      2005-08-30 13:50:22   2011-04-18 14:56:29  OK     1/351          534907

9.2 parse_ctl <path>

解析 Oracle 控制文件(control01.ctl / control02.ctl 等),输出 DB 名称、字符集、所有数据文件(type=04)、临时文件(type=07)、日志文件(type=03)、表空间清单。日志文件 SIZE 列由三级回退得到:

  1. 操作系统上读取到的 redo 文件大小减去 512 字节(Oracle redo 文件尾部的 512 字节 footer);
  2. 若 OS 文件无法访问(文件丢失 / 不可读),从控制文件第 21 / 22 块中 redo 记录(72 字节 / 条)的块数 × 512 字节取得;
  3. 上述两者都不可用时显示 0(对应记录仍会显示,便于人工干预)。

PATH 列宽按当前解析结果中最长路径动态收紧;SIZE 数值右对齐。

OBET> parse_ctl E:\ORADATA\ORCL\CONTROL01.CTL
OBET> parse_ctl E:\ORADATA\ORCL\CONTROL01.CTL
Oracle Control File Parser
==============================================
File: E:\ORADATA\ORCL\CONTROL01.CTL
Size: 9781248 bytes (597 x 16KB blocks)
==============================================
        PARSE RESULTS
==============================================
--- Database Info ---
  DB_NAME    : ORCL
  CHARSET_ID : 852 (ZHS16GBK)
--- Data Files (type=04) - 9 found ---
---------------------------------------------
  FILE#  PATH
  -----  ----
  4     E:\ORADATA\ORCL\USERS01.DBF
  3     E:\ORADATA\ORCL\UNDOTBS01.DBF
  2     E:\ORADATA\ORCL\SYSAUX01.DBF
  1     E:\ORADATA\ORCL\SYSTEM01.DBF
--- Log Files (type=03) - 3 found ---
---------------------------------------
  GROUP  PATH                                  SIZE
  -----  ----                                  ----
  1      E:\ORADATA\ORCL\REDO01.LOG         524288000
  2      E:\ORADATA\ORCL\REDO02.LOG         524288000
  3      E:\ORADATA\ORCL\REDO03.LOG         524288000
--- Tablespaces - 8 found ---

9.2.1 自动生成的重建控制文件脚本

完成屏幕输出后,OBET 会在当前工作目录生成 rectl_<DB_NAME>_<YYYYMMDDHHMMSS>.sql,可作为 CREATE CONTROLFILE 重建命令的参考模板。

文件包含 CREATE CONTROLFILE 头、LOGFILE(同 group 多成员合并为 GROUP N (m1, m2) 元组写法)、DATAFILECHARACTER SET 与结尾分号 ;

无法自动获取 SIZE 的 redo 文件仍写入记录,并在文件尾部追加英文提示,便于人工干预。

生成成功时屏幕输出形如:

Control file rebuild SQL generated: rectl_ORCL_20260727151150.sql

9.3 rdba <hex>

把 RDBA 值拆解为 Oracle File# 和 Block#(高 10 位 = File#,低 22 位 = Block#)。

OBET> rdba 0x00400000
rdba 0x00400000 (4194304)
File#: 1
Block#: 0

9.4 getrdba <rfile#> <block#>

根据 rfile# 和 block# 计算 RDBA 值(rdba 的逆运算)。

OBET> getrdba 1 1
getrdba:
  rfile#: 1
  block#: 1
  RDBA:   0x00400001 (4194305)

9.5 dump_undo [file N] [block M]

undo$ 段读取每条 UNDO 记录的 namestatus$。默认 file 1 block 224(Oracle 某些版本 undo$ segment header 位置)。

OBET> dump_undo
OBET> dump_undo file 1 block 224
OBET> dump_undo file 1 block 224
==================================================
  DUMP UNDO$ - File#=1 (E:/CC/obet/dbf/SYSTEM01.DBF), Block=224
==================================================
Segment header kcbh.rdba=0x004000E0 => Oracle file#=1, block#=224 (listfile idx=1)
Reading undo$ segment header from file #1, block 224...
Segment header first 16 bytes (kcbh): 10 A2 00 00 E0 00 40 00 1A 02 00 00 00 00 01 04 
Found extent 0: rdba_block=225, size=7 blocks (covers blocks 225-231)
Data blocks to scan (7 total): 225 226 227 228 229 230 231 
US#=0    NAME=SYSTEM                          STATUS$=3  TS#=0   (system rollback segment)
US#=1    NAME=_SYSSMU1_3450900144$            STATUS$=2  TS#=2
US#=2    NAME=_SYSSMU2_2386332601$            STATUS$=2  TS#=2
...
Summary: scanned 7 blocks, extracted 21 rows from undo$.

9.6 patch_scn Linux 需授权

直接修改 Oracle 进程内存中的 SCN 字段。仅在 Linux 构建中可用。

用法 作用
patch_scn spid 列出本机 Oracle LOCAL=YES 进程
patch_scn addr 通过 sqlplus 辅助获取 SCN 在进程内存中的地址
patch_scn [<spid>] [<addr>] <newval> 把目标进程 SCN 改写为 newval

10. 会话 / 杂项

10.1 license

显示当前许可证状态、硬件ID、到期时间。

OBET> license
========================================
         OBET License Information
========================================
Your Hardware ID: F443C4B31A04E56FDC6D9310C1648AC700946AC5269DF2F6DBE8507FDC704812
License Status: AUTHORIZED
Expiry Time:    2030-01-01 23:00:00

10.2 spool <file> | off

把后续输出同时写入指定文件;spool off 停止。

OBET> spool dbv_session.log
OBET> dbv
OBET> spool off

11. 常见问题

Q1:Oracle 正在使用时能不能直接读取数据文件?

可以。Windows 下 OBET 以 FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE 共享模式打开文件,Oracle 进程独占持有时 OBET 仍能读取。

Q2:如何切换数据文件?

open listfile.txt 加载列表,再用 set file N(或任意命令中的 file N 子句)切换。

Q3:写命令报 “license invalid / expired / hwid mismatch”?

授权与当前主机 HWID 绑定、存在有效期。用 license 命令查看当前授权状态,联系维护者重新签发 license.dat

Q4:forcecopy 与普通拷贝区别?

普通跨文件操作要求源块能正常读取;forcecopy 跳过 IO 失败的位置并填 0,专为磁盘部分损坏的应急场景设计,目标文件保持原始 blocksize 和块数。

Q5:p kcvfh.kcvfhhdr.kccfhtyp 为什么报错?

print 仅支持一级字段访问(如 p kcvfh.kcvfhhdr),不支持二级(如 p kcvfh.kcvfhhdr.kccfhtyp)。

Q6:build blockrepair block 区别?

build block N,M 是从无到有构造一个 Oracle 空块(填 0×00 + 初始化 kcbh/rdba),写入目标文件时需人工确认覆盖;适合块数据完全丢失的场景。

repair block 是读取目标块后原地修复 seq_kcbh、tailchk、checksum 三项,不改变块内容本身;适合块内容完好但校验值损坏的场景。

Oracle Block Edit Tool (obet) 功能增强–2026.07

联系:手机/微信(+86 17813235971) QQ(107644445)QQ咨询惜分飞

标题:Oracle Block Edit Tool (obet) 功能增强–2026.07

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

数据块编辑工具Oracle bbed升级版obet(Oracle Block Edit Tool), 基于ai编程的强大,根据近期恢复的需求情况,我对一些功能进行了升级,整体功能
obet_help


主要增加了上述框起来的功能
forcopy file N to 这个是当硬件有损坏,普通拷贝报错的时候,使用该命令最大限度拷贝数据
extend file N这个是解决ORA-01200故障(一般是由于异常断电,或者文件系统恢复之后),数据文件实际大小小于文件头记录大小
parse_ctl这个是直接解析control,并且生成创建控制文件语句,主要为了解决在oracle数据库无法mount的情况下,重建控制文件容易遗漏数据文件导致oracle后续open之后缺失部分数据文件而引起的各种故障风险
dump_undo这个主要是在数据库open的过程中遭遇到undo回滚段异常,需要屏蔽回滚段时候,需要知道回滚段名称,这个命令可以直接获取
通过set endian big/little命令来实现全面支持大小字节序

linux平台还增加了patch_scn功能
这个功能是以前直接的patch_scn小工具Patch_SCN for Linux 功能完善中的,现在整合到了obet里面
obet_patch_scn
完善了各种命令的提示
obet_hint

最近几天的实战操作
修改文件头scn
obet_1
obet_2

dbv检查aix平台数据文件
obet_dbv

将来根据需求和客户实战情况,会进一步完善功能和修复bug

OraScan(Oracle 碎片扫描工具) 使用说明

联系:手机/微信(+86 17813235971) QQ(107644445)QQ咨询惜分飞

标题:OraScan(Oracle 碎片扫描工具) 使用说明

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

一、软件概述
1.1 软件简介
OraScan 是由惜分飞(官方网址:www.xifenfei.com)自主研发的专业 Oracle 数据库碎片恢复工具,核心作用是扫描磁盘上未被覆盖的 Oracle 数据块,解决多种数据文件无法正常恢复的问题,适用于以下场景(不限于此):
• 文件系统损坏,无法正常访问数据文件,且文件系统工具无法恢复;
• 误删除数据文件,操作系统层面的反删除工具无法恢复;
• 断电、文件系统故障导致数据文件变为 0KB,或文件大小异常;
• 小文件覆盖了大数据文件;
• 需要扫描磁盘上所有未被覆盖的 Oracle 数据块。

1.2 功能限制
• 对 bigfile 表空间数据文件支持较差,需人工干预;
• 对于 rfile 超过 1024 的数据文件,需人工干预。

1.3 适配环境(新手必看)
请根据自己的操作系统和 .NET Framework 版本,选择对应的软件可执行文件,避免无法运行:
1. .NET Framework 版本适配
○ OraScan_Net2.exe:适配 .NET Framework 2.0、3.0、3.5 版本,兼容 Windows Server 2008 及更早操作系统;
○ OraScan_Net4.exe:适配 .NET Framework 4.0 及以上版本,兼容 Windows Server 2012 及更新操作系统。
2. 数据库版本:支持 Oracle 9i 及以后所有版本;
3. 数据块大小:支持 4k、8k、16k、32k(需与数据库实际数据块大小一致)。
4. 支持win磁盘和镜像,支持linux/aix/hp-unix镜像

1.4 版权与技术支持
• 软件版权:归惜分飞(www.xifenfei.com)所有,未经授权不得擅自传播、修改;
• 技术支持(遇到问题可联系):
○ QQ:107644445
○ 邮箱:dba@xifenfei.com
○ 微信/电话:+86-17813235971

1.5 软件下载和说明
OraScan下载
OraScan使用说明

二、软件使用步骤
核心流程:选择扫描对象 → 扫描碎片 → 加载解析结果 → 提取数据/碎片 → 可选操作(筛选、保存等),每一步操作清晰说明,无需额外复杂操作。

步骤1:选择扫描对象(磁盘/镜像文件,二选一)
打开软件后,首先选择需要扫描的对象,根据实际情况二选一,操作如下:

1.1 扫描磁盘设备(常用场景)
• 按照软件界面提示,选择对应的磁盘设备;
• 调整偏移量和实际扫描大小(不清楚的话,直接选择默认值即可,无需修改)。
orascan1


1.2 扫描镜像文件
• 按照软件界面提示,选择对应的镜像文件;
• 关键注意点:不要勾选“设备”选项(与扫描磁盘设备的核心区别)。
orascan2


步骤2:执行文件/设备碎片扫描
选择好扫描对象后,按以下步骤操作,新手无需额外设置:
1. 确认设置:确保块大小、偏移量、文件/设备大小设置正确(块大小需与数据库实际一致,新手可先按默认尝试,若扫描失败再调整);
2. 开始扫描:点击“开始扫描”按钮,启动碎片扫描;
3. 取消扫描:若需中断扫描,点击“取消扫描”按钮即可,建议尽量等待扫描完成,确保碎片不遗漏;
4. 扫描过程解读:进度条显示扫描进度,括号内显示“总操作系统块数量+已扫描数量”,“碎片数量”表示已找到的有效 Oracle 数据文件碎片;
5. 扫描完成标志:软件会提示“扫描完成”,并告知找到的碎片数量;同时,软件当前目录会自动生成“scandata”文件夹,里面有一个“Oracle_Block.map”文件(记录碎片信息的二进制文件,后续会用到,不要删除)。
orascan3


步骤3:加载并解析扫描结果
扫描完成后,需加载扫描结果并解析,才能看到可恢复的数据文件,操作步骤如下:
1. 点击软件中的“加载扫描结果”按钮;
2. 在弹出的窗口中,选择生成的“Oracle_Block.map”文件(若扫描后生成的是其他文件,选择对应文件即可);
3. 选择完成后,点击“解析扫描结果”按钮;
4. 解析完成标志:软件提示“解析碎片完成”,同时软件左侧会显示数据文件列表,包含数据库名称、表空间名字、文件号等关键信息(后续提取数据需用到这些信息);
orascan4
orascan5

5. 可选操作:点击“全部碎片”或“未使用碎片”,可查看各个数据文件的详细碎片信息
orascan6


步骤4:数据文件提取(核心操作,恢复数据文件)
解析完成后,即可提取需要恢复的数据文件,新手按以下步骤操作:
1. 勾选左侧数据文件列表中,需要恢复的数据文件;
orascan6

2. 点击“提取数据文件”按钮,即可开始恢复;
3. 注意事项:若软件提示“未授权”,无法提取,需联系作者(联系方式见1.4)进行授权;
4. 进阶操作(可选):若只需提取某个数据文件的部分数据段,可点击该数据文件,然后选择“全选”或勾选需要的数据段,再点击“提取数据文件”即可。
orascan7


步骤5:提取碎片(按碎片追加形式提取)
若无需提取完整数据文件,仅需提取碎片(操作系统层面的文件),直接点击软件中的“提取碎片镜像”按钮即可,无需额外设置。

步骤6:保存镜像文件
若需将勾选的数据文件/碎片直接保存为镜像文件,勾选对应内容后,点击“保存镜像文件”按钮,按提示选择保存路径即可。

步骤7:筛选数据功能(可选,精准查找碎片)
当点击“全部碎片”或“未使用碎片”时,软件会显示筛选功能,新手可按以下方式使用:
• 在筛选框中,输入“文件号”和“block范围”;
• 输入完成后,软件会自动筛选出符合条件的碎片,方便精准查找。

步骤8:获取文件碎片
该功能与“提取碎片镜像”类似,在没有授权的情况下,直接提取碎片镜像:
• 在对应输入框中,输入文件号(例如:输入“1|3”表示提取文件号1和3的碎片,输入“1024”表示提取所有文件碎片);
• 输入完成后,软件会自动生成碎片镜像文件,无需其他操作。

三、注意事项
• 首次使用前,务必确认操作系统和 .NET Framework 版本,选择对应版本的软件(OraScan_Net2.exe / OraScan_Net4.exe),避免无法运行;
• 扫描时,若不清楚“偏移量”“扫描大小”“块大小”,先按默认值操作,若扫描失败再联系技术支持;
• 扫描完成后,“scandata”文件夹和“Oracle_Block.map”文件不要删除,否则无法加载解析扫描结果;
• 提取数据文件时,若提示未授权,需联系作者授权后再操作;
• 遇到任何操作问题,可通过1.4中的联系方式联系技术支持,提高恢复效率。
• 为了防止恶意破坏软件,对软件进行了加壳处理,某些杀毒软件可能提示病毒,这个不是真的病毒是由于某些情况下壳被杀毒软件的病毒库误识别为病毒,可以加入到杀毒软件的例外中或者直接关闭杀毒软件之后进行操作。

Oracle数据库被勒索加密一键open工具–OraFHR

联系:手机/微信(+86 17813235971) QQ(107644445)QQ咨询惜分飞

标题:Oracle数据库被勒索加密一键open工具–OraFHR

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

软件概述
1)OraFHR是由惜分飞自主研发的专业 Oracle 数据库数据文件头重构工具,通过重构文件头直接打开数据库,专为解决由于勒索病毒加密数据文件,导致Oracle数据库正常运行的情况恢复。
2)软件版权:惜分飞(www.xifenfei.com)所有,未经授权不得擅自传播或修改。
3)技术支持(包含软件授权和使用过程中的问题咨询)
QQ:107644445
邮箱:dba@xifenfei.com
微信 / 电话:+86-17813235971
4)软件使用前提:
在数据文件被加密之后,可以通过obet工具(obet实现对数据文件坏块检测功能)进行坏块检测,只有少量block损坏可以通过此工具进行恢复直接打开数据库,如果无法自行评估可以发给我进行评估确认
5)软件下载地址和使用说明
下载地址使用说明

数据文件默认值配置
orafhr1


根据实际情况进行调整,如果不太懂,可以保持默认值
DBID:输入10进制数字,可以参考正常库的v$database.dbid值
DBNAME:输入长度不超过8个字符串,可以参考正常库的v$database.name值
版本输入值参考:同版本正常库偏移量block_size+24-28位置倒序,如果不确定当前数据库版本信息或者无法确认版本值该如何填写可以联系我进行分析

11.2.0.1-11.2.0.3  0B200000
11.2.0.4           0B200400
10.2.0.1           0A200100
10.2.0.3           0A200300
10.2.0.4           0A200400(有些平台依旧为0A200300)
10.2.0.5           0A200500
12.1.0.2           0C100200
12.2.0.1           0C200000
19.x               13000000
21.x               15000000
23.4               17040000  

字符集:可以通过业务或者运维人员确认,如果没有办法确认可以恢复数据库sys.props$表进行确认

选择需要处理的数据文件
orafhr2


正常情况下,选择数据文件之后,会自动根据数据文件中前面block的信息,计算出来Rfile#信息
orafhr3

如果有Rfile#为0,表示需要人工根据实际情况分析进行修改,一般扩展名在选择数据文件的时候,会自动补充完成,如果不对可以人工进行调整.

完善表格中其他记录
orafhr4

选择wrh$_datafile文件,注意列使用|分割开,然后点击补全表格,就会自动根据当前情况进行完善表格相关信息
某些版本或者由于某些原因导致wrh$_datafile信息不全,可以通过ts$,file$进行完善(这种情况选择第二套参照方案,需要注册软件)
orafhr5


重构数据文件头
补全表格完成之后,可以点击重构数据文件头按钮,进行文件头重构。
orafhr6


后续数据库打开操作
点击后续操作命令按钮,自动生成open数据库相关操作语句文件
orafhr7

生成数据库open操作步骤和相关语句
orafhr8

参照这些文件中内容对于修复的文件进行操作,直接open库导出数据

obet修复csc higher than block scn类型坏块

联系:手机/微信(+86 17813235971) QQ(107644445)QQ咨询惜分飞

标题:obet修复csc higher than block scn类型坏块

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

最近有客户数据库报ORA-01092 ORA-01578错误导致数据库无法open

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00704: bootstrap process failure
ORA-00704: bootstrap process failure
ORA-00604: error occurred at recursive SQL level 1
ORA-01578: ORACLE data block corrupted (file # 1, block # 2123)
ORA-01110: data file 1: '+DATADG/orcl/datafile/system.270.1015415183'
Process ID: 239325
Session ID: 1599 Serial number: 7

通过dbv检查确认是csc higher than block scn故障

DBVERIFY: Release 11.2.0.4.0 - Production on Sat Feb 7 03:47:12 2026

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

DBVERIFY - Verification starting : FILE = +DATADG/orcl/datafile/SYSTEM.270.1015415183

DBV-00200: Block, DBA 4306619, already marked corrupt
csc(0x0006.d75a14f4) higher than block scn(0x0000.00000000)
Page 2123 failed with check code 6054


DBVERIFY - Verification complete

Total Pages Examined         : 738560
Total Pages Processed (Data) : 424109
Total Pages Failing   (Data) : 1
Total Pages Processed (Index): 287403
Total Pages Failing   (Index): 1
Total Pages Processed (Other): 3408
Total Pages Processed (Seg)  : 1
Total Pages Failing   (Seg)  : 0
Total Pages Empty            : 23640
Total Pages Marked Corrupt   : 1
Total Pages Influx           : 0
Total Pages Encrypted        : 0
Highest block SCN            : 3613010282 (6.3613010282)

对于这样的故障,最近把他整合到了obet工具中,执行命令为repair blkscn [block x]进行修复

C:\Users\XFF>dbv file=H:\TEMP\SYSTEM01.DBF

DBVERIFY: Release 11.2.0.4.0 - Production on 星期日 2月 8 11:07:51 2026

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

DBVERIFY - 开始验证: FILE = H:\TEMP\SYSTEM01.DBF
csc(0x0012.a0d783c4) higher than block scn(0x0000.00000000)
页 241 失败, 校验代码为 6054

DBVERIFY - 验证完成

检查的页总数: 325120
处理的页总数 (数据): 99921
失败的页总数 (数据): 1
处理的页总数 (索引): 34013
失败的页总数 (索引): 0
处理的页总数 (其他): 174241
处理的总页数 (段)  : 1
失败的总页数 (段)  : 0
空的页总数: 16945
标记为损坏的总页数: 0
流入的页总数: 0
加密的总页数        : 0
最高块 SCN            : 2698836688 (18.2698836688)

使用obet修复csc higher than block scn 故障

OBET> set filename H:\TEMP\SYSTEM01.DBF
filename set to: H:\TEMP\SYSTEM01.DBF

OBET> set block 241
block set to: 241

OBET> set mode edit
mode set to: edit

OBET> repair blkscn

Repairing SCN for block 241...

Current block SCN information:
  scn_base: 0x00000000 (0)
  scn_wrap: 0x0000 (0)

Block 1 reference information:
  hdr_base: 0xA0DCE449 (2698830921)
  hdr_wrap: 0x0012 (18)

Current block CSC information:
  csc_base: 0xA0D783C4 (2698478532)
  csc_wrap: 0x0012 (18)

Calculated values:
  blkcsc: 80007889860 (0x00000012A0D783C4)
  blkscn: 0 (0x0000000000000000)

blkscn < blkcsc, SCN repair required.

New SCN values to write:
  new_scn_base: 0xA0DCE448 (2698830920)
  new_scn_wrap: 0x0012 (18)

Confirm SCN repair operations:
File: H:\TEMP\SYSTEM01.DBF
Block: 241
Operations:
  1. Write new scn_base (0xA0DCE448)
  2. Write new scn_wrap (0x0012)

Confirm? (Y/YES to proceed): y

[Undo information saved - use 'undo' command to restore original values]

Verification after SCN repair:
1. scn_base: 48E4DCA0 (expected: 48E4DCA0)
2. scn_wrap: 1200 (expected: 1200)
3. seq_kcbh: 0x01 OK

Block 241 SCN repair completed successfully.
Execute tailchk apply and sum apply for this block.

OBET> tailchk apply

Confirm applying tailchk:
File: H:\TEMP\SYSTEM01.DBF
Block: 241
Offset in block: 8188 (file offset: 0x001E3FFC)
Original value: 0x01060000
New value:      0x010648E4
Confirm? (Y/YES to proceed): y
Verification successful: Stored tailchk matches calculated value (0x010648E4).
Tailchk applied successfully.

OBET> sum apply

Confirm applying checksum:
File: H:\TEMP\SYSTEM01.DBF
Block: 241
Offset in block: 16 (file offset: 0x001E2010)
Original value: 0xAD0F
New value:      0x63AF
Confirm? (Y/YES to proceed): y
Verification successful: Stored checksum matches calculated value (0x63AF).
Checksum applied successfully.

dbv验证该错误已经修复

C:\Users\XFF>dbv file=H:\TEMP\SYSTEM01.DBF

DBVERIFY: Release 11.2.0.4.0 - Production on 星期日 2月 8 11:11:12 2026

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

DBVERIFY - 开始验证: FILE = H:\TEMP\SYSTEM01.DBF


DBVERIFY - 验证完成

检查的页总数: 325120
处理的页总数 (数据): 99921
失败的页总数 (数据): 0
处理的页总数 (索引): 34013
失败的页总数 (索引): 0
处理的页总数 (其他): 174241
处理的总页数 (段)  : 1
失败的总页数 (段)  : 0
空的页总数: 16945
标记为损坏的总页数: 0
流入的页总数: 0
加密的总页数        : 0
最高块 SCN            : 2698836688 (18.2698836688)

obet工具下载地址:obet下载
obet工具使用说明:obet使用说明

obet实现对数据文件坏块检测功能

联系:手机/微信(+86 17813235971) QQ(107644445)QQ咨询惜分飞

标题:obet实现对数据文件坏块检测功能

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

通过一段时间的测试和使用,obet修复了不少bug,关于obet的以往功能和特性的文章:
Oracle数据块编辑工具( Oracle Block Editor Tool)-obet
obet(Oracle Block Editor Tool)第二版发布
并且也在客户的生产环境上进行了实战:obet快速修改scn/resetlogs恢复数据库(缺少归档,ORA-00308).利用周末的时间又对obet的工具进行了功能增强,增加了dbv(数据块校验)功能.

Oracle dbv的不足
1. oracle dbv需要在安装oracle服务端的环境下才能执行
2. oracle dbv对于文件大小不正确(文件头记录block数和实际文件大小不匹配),文件头损坏等情况都可能导致dbv无法执行,类似下面的报错

C:\Users\XFF>dbv file=H:\BaiduNetdisk\kingdee\system01.dbf

DBVERIFY: Release 11.2.0.4.0 - Production on 星期日 1月 11 17:30:29 2026

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


DBV-00107: 未知标头格式 (0) (2054913149)

C:\Users\XFF>
C:\Users\XFF>dbv file=H:\BaiduNetdisk\kingdee\users01.dbf

DBVERIFY: Release 11.2.0.4.0 - Production on 星期日 1月 11 20:10:05 2026

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


DBV-00102: FILE (H:\BAIDUNETDISK\KINGDEE\USERS01.DBF) 在 end read 操作 (-1) 期间出现文件 I/O 错误

C:\Users\XFF>

3. oracle dbv一条命令执行检测一个数据文件,如果数据文件多,检查起来很繁琐
4. oracle dbv么有检查进度,对于io性能较慢,数据文件较大的情况,无法跟踪检查进度.

obet的dbv功能使用
1. 配置listfile.txt文件,格式为file# name

1 H:\BaiduNetdisk\kingdee\system01.dbf
5 H:\BaiduNetdisk\kingdee\EAS_D_EAS_STANDARD.ORA

2. 启动obet,执行open listfile.txt(如果不在obet目录提供完整路径)

OBET> open listfile.txt
Loaded 2 files from config file 'listfile.txt'.

OBET> info

Loaded files (2 total):
----------------------------------------
Number  Path
----------------------------------------
     1  H:\BaiduNetdisk\kingdee\system01.dbf
     5  H:\BaiduNetdisk\kingdee\EAS_D_EAS_STANDARD.ORA
----------------------------------------

3. 执行dbv命令(logfile 部分为可选),默认会记录日志在obet目录下面dbv_年月日时分秒.log的日志

OBET> dbv

===============================================
DBV (Data Block Verification)
Block Size: 8192 bytes
===============================================

Verifying file #1: H:\BaiduNetdisk\kingdee\system01.dbf (131841 blocks) - Started: 2026-01-11 18:03:58
file 1, block 0: checksum error (expected 0xC4DA, got 0xC478), bad block
file 1, block 1: checksum error (expected 0xF835, got 0xB835), bad block
  Progress: 10000 / 131841 blocks checked...
  Progress: 20000 / 131841 blocks checked...
……………….
  Progress: 120000 / 131841 blocks checked...
  Progress: 130000 / 131841 blocks checked...
  File #1 completed: 0 all zero, 0 soft corrupted, 0 tailchk error, 2 checksum error, 0 rdba error
Verifying file #5: H:\BaiduNetdisk\kingdee\EAS_D_EAS_STANDARD.ORA (4194303 blocks) - Started: 2026-01-11 18:04:08
  Progress: 10000 / 4194303 blocks checked...
  Progress: 20000 / 4194303 blocks checked...
……………………
  Progress: 260000 / 4194303 blocks checked...
  Progress: 270000 / 4194303 blocks checked...
file 5, block 277678: tailchk error (expected 0x0228BB21, got 0x0228AD21), bad block
file 5, block 277679: rdba error (expected 277679, got 277615), bad block
file 5, block 277680: rdba error (expected 277680, got 277616), bad block
file 5, block 277681: rdba error (expected 277681, got 277617), bad block
………………
file 5, block 277692: rdba error (expected 277692, got 277628), bad block
file 5, block 277693: rdba error (expected 277693, got 277629), bad block
file 5, block 277694: rdba error (expected 277694, got 277630), bad block
file 5, block 279406: tailchk error (expected 0x02281E22, got 0x00000700), bad block
file 5, block 279407: rdba error (expected 279407, got 448), bad block
file 5, block 279408: rdba error (expected 279408, got 0), bad block
………………
  Progress: 280000 / 4194303 blocks checked...
  Progress: 290000 / 4194303 blocks checked...
  Progress: 300000 / 4194303 blocks checked...
  Progress: 310000 / 4194303 blocks checked...
file 5, block 312932: tailchk error (expected 0x0106C0B8, got 0x010629B8), bad block
file 5, block 312933: rdba error (expected 312933, got 312869), bad block
file 5, block 312934: rdba error (expected 312934, got 312870), bad block
file 5, block 312935: rdba error (expected 312935, got 312871), bad block
file 5, block 312936: rdba error (expected 312936, got 312872), bad block
file 5, block 312937: rdba error (expected 312937, got 312873), bad block
file 5, block 312938: rdba error (expected 312938, got 312874), bad block
file 5, block 312939: rdba error (expected 312939, got 312875), bad block
………………
  Progress: 4180000 / 4194303 blocks checked...
  Progress: 4190000 / 4194303 blocks checked...
  File #5 completed: 1 all zero, 0 soft corrupted, 13 tailchk error, 1 checksum error, 255 rdba error

DBV completed at: 2026-01-11 18:09:30

===============================================
DBV Summary:
Total blocks checked: 4325872
Total all zero blocks found: 1
Total all rdba error blocks found: 255
Total all tailchk error blocks found: 13
Total all soft corrupted blocks found: 0
Total all checksum error blocks found: 3
Total bad blocks found: 272
===============================================

Detailed report saved to: dbv_20260111180358.log

OBET>

检测效果截图
obet-dbv


win平台挂起Oracle数据库启动进程

联系:手机/微信(+86 17813235971) QQ(107644445)QQ咨询惜分飞

标题:win平台挂起Oracle数据库启动进程

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

对于oracle的有些故障,如果数据库完全open会报错,导致启动失败,这个时候,我们可以尝试在数据库open到一半的过程中把启动过程挂起,然后登录数据库对字典进行修复,然后就可以正常启动数据库。非win平台可以通过gdb挂起数据库启动过程,因为win系统是进程模式,无法通过gdb挂起来实现,通过自己写程序修改oracle内存来实现这个功能

Oracle Recovery Tools工具中,点击修改内存—>检索Oracle数据库进程—>选择需要操作的数据库进程—>挂起Oracle进程 就可以实现oracle数据库在open的过程中挂住
QQ20251208-180202


然后其他会话登录数据库,进行需要的操作,再重新点击取消挂起数据库可以继续open成功
QQ20251208-174237

obet(Oracle Block Editor Tool)第二版发布

联系:手机/微信(+86 17813235971) QQ(107644445)QQ咨询惜分飞

标题:obet(Oracle Block Editor Tool)第二版发布

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

在几天之前发布了obet的第一个版本(Oracle数据块编辑工具( Oracle Block Editor Tool)-obet),最近对功能进行了一些完善,并发布第二版(下载地址:下载obet),主要增加了以下几个功能:
0) corrupt [block x] 命令主要用于标记坏块功能(在第一版中已经完善)
1) repair [block x] 命令对于坏块的自动修复,主要包括checksum,tailchk,seq_kcbh等
2)增加copy chkscn 命令主要用于对文件头的checkpoint scn相关信息修复
3)增加copy resetlogscn命令主要用于对文件头的resetlogs相关信息修复
4)把之前的copy命令调整为copy data命令格式
5)增加copy block命令主要用于数据文件之间的数据块直接拷贝
该版本的help命令提示

OBET (Oracle Block Editor Tool) commands:
  open <config_file>    - Load file list from config file (format: <num> <path>)
  info                  - Show loaded file list (from open command)
  set filename <path>   - Set target file path (required)
  set file <num>        - Set filename using loaded file number (from open list)
  set blocksize <size>  - Set block size (2048,4096,[8192],16384,32768)
  set block <num>       - Set block number (starts from 0, default: 1)
  set offset <offset>   - Set offset within block (< blocksize, default: 0)
  set count <bytes>     - Set number of bytes to read (default: 32)
  set mode edit/browse  - Enable edit/browse mode
  d/dump [options]      - Display data (options: block X, offset Y, count N)
  m/modify <hex> [opts] - Modify data with hex (opts: block X, offset Y)
  undo                  - Undo last modification
  sum [block X]         - Calculate checksum for block (default: current block)
  sum apply [block X]   - Apply checksum: write calculated value to block
  tailchk [block X]     - Calculate tailchk for block (default: current block)
  tailchk apply [block X] - Apply tailchk: write calculated value to block
  repair [block X]      - Repair bad block (fix seq_kcbh, tailchk, checksum)
  copy data <src> to <dest>  - Copy data between files
    <src> format: file,block,offset,count (e.g., 1,1,10,64)
    <dest> format: file[,block][,offset] (e.g., 3 or 3,1 or 3,1,128)
  copy block file#,block# to file#,block#     - Copy entire data block
  copy chkscn file n to file m         - Copy datafile header checkpoint SCN info
  copy resetlogscn file n to file m    - Copy datafile header resetlogs info
  corrupt [block X]     - Mark block as corrupted (default: current block)
  show                  - Display current settings (filename, blocksize, block, offset, count, mode)
  license               - Show/manage software license (registration code required)
  version               - Show software version and developer information
  p/print <param>       - Print Oracle structure,Use the 'p/print' command to see details
  undo                  - Undo the last copy chkscn or copy resetlogscn operation
  help                  - Show this help message
  quit/exit             - Exit OBET

copy block功能演示
随便把一个block拷贝到文件的另外位置,也可以拷贝到不同文件的其他位置,根据需要调整

OBET> copy block 1,1 to 1,5

Confirm copy block:
Source: file#1 (/u01/xifenfei/system01.dbf), block 1 (entire 8192-byte block)
Target: file#1 (/u01/xifenfei/system01.dbf), block 5 (entire 8192-byte block)
Proceed? (Y/YES to confirm): y
Successfully copied block 1 from file#1 to block 5 in file#1 (8192 bytes).

OBET> set file 1 
filename set to: /u01/xifenfei/system01.dbf (file#1)

OBET> set count 128
count set to: 128

OBET> dump block 1 offset 0

File: /u01/xifenfei/system01.dbf
Block: 1                Offsets:     0 to   127
--------------------------------------------------------------------------------
00002000 01230000 01004000 00000000 00000104 28C60000 00000000 0004200B A2DB266A 
00002020 58494645 4E464549 AC020000 00720100 00200000 01000300 00000000 00000000 
00002040 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00002060 08024000 07000000 00000000 7DC92131 12345678 87654321 00000000 00000000 

<128 bytes read>

OBET> dump block 5 offset 0

File: /u01/xifenfei/system01.dbf
Block: 5                Offsets:     0 to   127
--------------------------------------------------------------------------------
0000A000 01230000 01004000 00000000 00000104 28C60000 00000000 0004200B A2DB266A 
0000A020 58494645 4E464549 AC020000 00720100 00200000 01000300 00000000 00000000 
0000A040 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
0000A060 08024000 07000000 00000000 7DC92131 12345678 87654321 00000000 00000000 

<128 bytes read>

copy chkscn功能演示

OBET> p kcvfh.kcvfhckp
File: H:\xifenfei\system01.dbf
Size: 8192 bytes
Block: 1
Offset: 484

struct kcvfhckp, 36 bytes                   @484
   struct kcvcpscn, 8 bytes                 @484
      ub4 kscnbas                          @484     0x1BDDBF09
      ub2 kscnwrp                          @488     0x163D
      ub2 kscnwrp2                         @490     0x0000
   ub4 kcvcptim                            @492     0x488361FC
   ub2 kcvcpthr                            @496     0x0001
   union u, 12 bytes                       @500
      struct kcvcprba, 12 bytes            @500
         ub4 kcrbaseq                     @500     0x0006E3D3
         ub4 kcrbabno                     @504     0x0000B44B
         ub2 kcrbabof                     @508     0x0010
   ub1 kcvcpetb[8]                         @512-519 02 00 00 00 00 00 00 00


OBET> p kcvfh.kcvfhckp
File: H:\xifenfei\sysaux01.dbf
Size: 8192 bytes
Block: 1
Offset: 484

struct kcvfhckp, 36 bytes                   @484
   struct kcvcpscn, 8 bytes                 @484
      ub4 kscnbas                          @484     0x67452301
      ub2 kscnwrp                          @488     0x0000
      ub2 kscnwrp2                         @490     0x0000
   ub4 kcvcptim                            @492     0x00000000
   ub2 kcvcpthr                            @496     0x0000
   union u, 12 bytes                       @500
      struct kcvcprba, 12 bytes            @500
         ub4 kcrbaseq                     @500     0x0006E3D3
         ub4 kcrbabno                     @504     0x0000B44B
         ub2 kcrbabof                     @508     0x0010
   ub1 kcvcpetb[8]                         @512-519 02 00 00 00 00 00 00 00

<kcvfh.kcvfhckp structure printed successfully>



OBET> copy chkscn file 1 to file 2

Confirm Modify chkscn:
Source: file#1 (H:\xifenfei\system01.dbf)
Target: file#2 (H:\xifenfei\sysaux01.dbf)
Proceed? (Y/YES to confirm): y
Successfully copied checkpoint SCN information from file#1 to file#2.

OBET> p kcvfh.kcvfhckp
File: H:\xifenfei\sysaux01.dbf
Size: 8192 bytes
Block: 1
Offset: 484

struct kcvfhckp, 36 bytes                   @484
   struct kcvcpscn, 8 bytes                 @484
      ub4 kscnbas                          @484     0x1BDDBF09
      ub2 kscnwrp                          @488     0x163D
      ub2 kscnwrp2                         @490     0x0000
   ub4 kcvcptim                            @492     0x488361FC
   ub2 kcvcpthr                            @496     0x0001
   union u, 12 bytes                       @500
      struct kcvcprba, 12 bytes            @500
         ub4 kcrbaseq                     @500     0x0006E3D3
         ub4 kcrbabno                     @504     0x0000B44B
         ub2 kcrbabof                     @508     0x0010
   ub1 kcvcpetb[8]                         @512-519 02 00 00 00 00 00 00 00

<kcvfh.kcvfhckp structure printed successfully>

copy resetlogscn功能演示

OBET> p kcvfh.kcvfhrlc
File: H:\xifenfei\system01.dbf
Size: 8192 bytes
Block: 1
Offset: 112

ub4 kcvfhrlc                             @112     0x3215EC5C

<kcvfh.kcvfhrlc structure printed successfully>

OBET> p kcvfh.kcvfhrls
File: H:\xifenfei\system01.dbf
Size: 8192 bytes
Block: 1
Offset: 116

struct kcvfhrls, 8 bytes                    @116
   ub4 kscnbas                             @116     0x000E74FF
   ub2 kscnwrp                             @120     0x0000
   ub2 kscnwrp2                            @122     0x0000

<kcvfh.kcvfhrls structure printed successfully>


OBET> p kcvfh.kcvfhrlc
File: H:\xifenfei\sysaux01.dbf
Size: 8192 bytes
Block: 1
Offset: 112

ub4 kcvfhrlc                             @112     0x67452301

<kcvfh.kcvfhrlc structure printed successfully>

OBET> p kcvfh.kcvfhrls
File: H:\xifenfei\sysaux01.dbf
Size: 8192 bytes
Block: 1
Offset: 116

struct kcvfhrls, 8 bytes                    @116
   ub4 kscnbas                             @116     0x43658709
   ub2 kscnwrp                             @120     0x0021
   ub2 kscnwrp2                            @122     0x0000

<kcvfh.kcvfhrls structure printed successfully>

OBET> copy resetlogscn file 1 to file 2

Confirm Modify resetlogscn:
Source: file#1 (H:\xifenfei\system01.dbf)
Target: file#2 (H:\xifenfei\sysaux01.dbf)
Proceed? (Y/YES to confirm): y
Successfully copied resetlog SCN information from file#1 to file#2.

OBET> p kcvfh.kcvfhrlc
File: H:\xifenfei\sysaux01.dbf
Size: 8192 bytes
Block: 1
Offset: 112

ub4 kcvfhrlc                             @112     0x3215EC5C

<kcvfh.kcvfhrlc structure printed successfully>

OBET> p kcvfh.kcvfhrls
File: H:\xifenfei\sysaux01.dbf
Size: 8192 bytes
Block: 1
Offset: 116

struct kcvfhrls, 8 bytes                    @116
   ub4 kscnbas                             @116     0x000E74FF
   ub2 kscnwrp                             @120     0x0000
   ub2 kscnwrp2                            @122     0x0000

<kcvfh.kcvfhrls structure printed successfully>

corrupt [block x]标记坏块功能

C:\Users\XFF>dbv file=h:/xifenfei/users01.dbf

DBVERIFY: Release 11.2.0.4.0 - Production on 星期三 11月 12 21:40:55 2025

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

DBVERIFY - 开始验证: FILE = H:\XIFENFEI\USERS01.DBF


DBVERIFY - 验证完成

检查的页总数: 26656
处理的页总数 (数据): 23569
失败的页总数 (数据): 0
处理的页总数 (索引): 309
失败的页总数 (索引): 0
处理的页总数 (其他): 720
处理的总页数 (段)  : 0
失败的总页数 (段)  : 0
空的页总数: 2058
标记为损坏的总页数: 0
流入的页总数: 0
加密的总页数        : 0
最高块 SCN            : 2255414715 (18.2255414715)


OBET> corrupt block 10

Confirm modification:
File: h:/xifenfei/users01.dbf
Block: 10
Offset: 14 (file offset: 0x0001400E)
Original value: 01
New value:      FF
Are you sure to set this block corrupted? (Y/YES to proceed): y
Verification successful: Block 10 marked as corrupted (offset 14 set to 0xFF).
Modification successful.

C:\Users\XFF>dbv file=h:/xifenfei/users01.dbf

DBVERIFY: Release 11.2.0.4.0 - Production on 星期三 11月 12 21:41:22 2025

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

DBVERIFY - 开始验证: FILE = H:\XIFENFEI\USERS01.DBF
页 10 流入 - 很可能是介质损坏
Corrupt block relative dba: 0x0100000a (file 4, block 10)
Fractured block found during dbv:
Data in bad block:
 type: 30 format: 2 rdba: 0x0100000a
 last change scn: 0x0000.00003e78 seq: 0xff flg: 0x04
 spare1: 0x0 spare2: 0x0 spare3: 0x0
 consistency value in tail: 0x3e781e01
 check value in block header: 0x1a6
 computed block checksum: 0xfe



DBVERIFY - 验证完成

检查的页总数: 26656
处理的页总数 (数据): 23569
失败的页总数 (数据): 0
处理的页总数 (索引): 309
失败的页总数 (索引): 0
处理的页总数 (其他): 719
处理的总页数 (段)  : 0
失败的总页数 (段)  : 0
空的页总数: 2058
标记为损坏的总页数: 1
流入的页总数: 1
加密的总页数        : 0
最高块 SCN            : 2255414715 (18.2255414715)

repair [block x]修复坏块功能

C:\Users\XFF>dbv file=h:/xifenfei/undo01.dbf

DBVERIFY: Release 11.2.0.4.0 - Production on 星期日 11月 16 00:06:59 2025

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

DBVERIFY - 开始验证: FILE = H:\XIFENFEI\UNDO01.DBF
页 2 流入 - 很可能是介质损坏
Corrupt block relative dba: 0x02000002 (file 8, block 2)
Fractured block found during dbv:
Data in bad block:
 type: 29 format: 2 rdba: 0x02000002
 last change scn: 0x163d.1bddbcfa seq: 0xff flg: 0x04
 spare1: 0x0 spare2: 0x0 spare3: 0x0
 consistency value in tail: 0xbcfa1d02
 check value in block header: 0xec11
 computed block checksum: 0xfd



DBVERIFY - 验证完成

检查的页总数: 4880
处理的页总数 (数据): 0
失败的页总数 (数据): 0
处理的页总数 (索引): 0
失败的页总数 (索引): 0
处理的页总数 (其他): 4372
处理的总页数 (段)  : 11
失败的总页数 (段)  : 0
空的页总数: 507
标记为损坏的总页数: 1
流入的页总数: 1
加密的总页数        : 0
最高块 SCN            : 467517187 (5693.467517187)

OBET> repair

Repairing block 2 in file H:\xifenfei\undo01.dbf...

Repair analysis for block 2:
1. seq_kcbh check: 0xFF -> needs repair (0x01)
2. Tailchk check: 0x021DFABC -> needs repair (0x011DFABC)
3. Checksum check: 0x11EC -> OK

Confirm repair operations:
File: H:\xifenfei\undo01.dbf
Block: 2
Operations needed: fix offset14, fix tailchk
Confirm? (Y/YES to proceed): y

Verification after repair:
1. seq_kcbh: 0x01 OK
2. Tailchk: 0x011DFABC OK
3. Checksum: 0x11EC OK

Block 2 repair completed successfully.


C:\Users\XFF>dbv file=h:/xifenfei/undo01.dbf

DBVERIFY: Release 11.2.0.4.0 - Production on 星期日 11月 16 00:07:29 2025

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

DBVERIFY - 开始验证: FILE = H:\XIFENFEI\UNDO01.DBF


DBVERIFY - 验证完成

检查的页总数: 4880
处理的页总数 (数据): 0
失败的页总数 (数据): 0
处理的页总数 (索引): 0
失败的页总数 (索引): 0
处理的页总数 (其他): 4373
处理的总页数 (段)  : 11
失败的总页数 (段)  : 0
空的页总数: 507
标记为损坏的总页数: 0
流入的页总数: 0
加密的总页数        : 0
最高块 SCN            : 467517187 (5693.467517187)

Oracle数据块编辑工具( Oracle Block Editor Tool)-obet

联系:手机/微信(+86 17813235971) QQ(107644445)QQ咨询惜分飞

标题:Oracle数据块编辑工具( Oracle Block Editor Tool)-obet

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

由于oracle后续版本对于bbed的支持不是太友好(从10g之后无法直接编译使用,win版本偏移量错误等),基于这些情况,结合当前ai的便利,自己动手写了一个基础版的obet(Oracle Block Editor Tool),用来实现在某些情况下Oracle 数据块的编辑工作.目前(2025年11月7日)发布第一版主要功能有:
1. 通过16进制查看数据文件任何偏移量位置的数据(d/dump)
2. 通过16进制编辑数据文件任何偏移量位置的数据(m/modify)
3. 对oracle 数据块的tailchk自动修复(tailchk apply)
4. 对oracle 数据块的checksum自动修复(sum apply)
5. 数据文件之间部分数据拷贝功能(coopy)

启动软件界面

[root@iZbp11c0qyuuo1gr7j98upZ tmp]# ./obet
=============================================
Welcome to Oracle Block Editor Tool (OBET)
=============================================

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

[Software Function Description]
- View and edit data block in hexadecimal format
- Automatically repair tailchk and checksum
- Copy data between different data files
- Mark data block as corrupted block

[Developer Information]
- Name: XiFenFei
- Phone: +86-17813235971
- Email: dba@xifenfei
- Q Q: 107644445
- WeChat: 17813235971
- Website: https://www.xifenfei.com

[Version Details]
- Software Version: v2025.11.001
- Build Date: 2025.11.07

=============================================
Type 'help' for command list | 'exit' to quit
=============================================

==================================================
Software License Status: Authorized
==================================================

使用说明

OBET> help
OBET (Oracle Block Editor Tool) commands:
  open <config_file>    - Load file list from config file (format: <num> <path>)
  info                  - Show loaded file list (from open command)
  set filename <path>   - Set target file path (required)
  set file <num>        - Set filename using loaded file number (from open list)
  set blocksize <size>  - Set block size (2048,4096,[8192],16384,32768)
  set block <num>       - Set block number (starts from 0, default: 1)
  set offset <offset>   - Set offset within block (< blocksize, default: 0)
  set count <bytes>     - Set number of bytes to read (default: 32)
  set mode edit/browse  - Enable edit/browse mode
  d/dump [options]      - Display data (options: block X, offset Y, count N)
  m/modify <hex> [opts] - Modify data with hex (opts: block X, offset Y)
  undo                  - Undo last modification
  sum [block X]         - Calculate checksum for block (default: current block)
  sum apply [block X]   - Apply checksum: write calculated value to block
  tailchk [block X]     - Calculate tailchk for block (default: current block)
  tailchk apply [block X] - Apply tailchk: write calculated value to block
  copy <src> to <dest>  - Copy data between files
    <src> format: file,block,offset,count (e.g., 1,1,10,64)
    <dest> format: file[,block][,offset] (e.g., 3 or 3,1 or 3,1,128)
  corrupt [block X]     - Mark block as corrupted (default: current block)
  show                  - Display current settings (filename, blocksize, block, offset, count, mode)
  license               - Show/manage software license (registration code required)
  version               - Show software version and developer information
  help                  - Show this help message
  quit/exit             - Exit OBET

加载数据文件

--使用open打开数据文件列表(格式: 编号  路径)
OBET> open /tmp/3.txt
Loaded 4 files from config file '/tmp/3.txt'.

OBET> info

Loaded files (4 total):
----------------------------------------
Number  Path
----------------------------------------
     1  /u01/xifenfei/system01.dbf
     2  /u01/xifenfei/sysaux01.dbf
     3  /u01/xifenfei/undotbs01.dbf
     4  /u01/xifenfei/users01.dbf
----------------------------------------

OBET> set file 1
filename set to: /u01/xifenfei/system01.dbf (file#1)

--或者直接使用 set filename
OBET> set filename /tmp/system01.dbf
filename set to: /tmp/system01.dbf

进入数据文件特定位置

OBET> set file 2
filename set to: /u01/xifenfei/sysaux01.dbf (file#2)

OBET> set block 5
block set to: 5

OBET> set offset 128
offset set to: 128

16进制方式查看数据

OBET> d

File: /u01/xifenfei/system01.dbf
Block: 1                Offsets:     0 to    31
--------------------------------------------------------------------------------
00002000 0BA20000 01004000 00000000 00000104 224D0000 00000000 0004200B A2DB266A 

<32 bytes read>

OBET> dump block 521 offset 128

File: /u01/xifenfei/system01.dbf
Block: 521                Offsets:   128 to   159
--------------------------------------------------------------------------------
00412080 5E068D05 C6040000 00000000 00000000 00000000 00000000 00000000 00000000 

<32 bytes read>

OBET> set count 128
count set to: 128

OBET> d

File: /u01/xifenfei/system01.dbf
Block: 1                Offsets:     0 to   127
--------------------------------------------------------------------------------
00002000 0BA20000 01004000 00000000 00000104 224D0000 00000000 0004200B A2DB266A 
00002020 58494645 4E464549 AC020000 00720100 00200000 01000300 00000000 00000000 
00002040 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00002060 08024000 07000000 00000000 7DC92131 64676345 06200E00 00000000 00000000 

<128 bytes read>

16进制方式修改数据块内容(一般修改数据块内容之后建议校验tailchk和sum)

OBET> d

File: /u01/xifenfei/system01.dbf
Block: 1                Offsets:     0 to   127
--------------------------------------------------------------------------------
00002000 0BA20000 01004000 00000000 00000104 224D0000 00000000 0004200B A2DB266A 
00002020 58494645 4E464549 AC020000 00720100 00200000 01000300 00000000 00000000 
00002040 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00002060 08024000 07000000 00000000 7DC92131 64676345 06200E00 00000000 00000000 

<128 bytes read>

OBET> m 0123

Confirm modification:
File: /u01/xifenfei/system01.dbf
Block: 1
Offset: 0 (file offset: 0x00002000)
Original value: 0B
New value:      0123
Confirm? (Y/YES to proceed): y
Verification successful: Data written correctly.
Modified 2 bytes at offset 0x00002000 successfully.

OBET> d

File: /u01/xifenfei/system01.dbf
Block: 1                Offsets:     0 to   127
--------------------------------------------------------------------------------
00002000 01230000 01004000 00000000 00000104 224D0000 00000000 0004200B A2DB266A 
00002020 58494645 4E464549 AC020000 00720100 00200000 01000300 00000000 00000000 
00002040 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00002060 08024000 07000000 00000000 7DC92131 64676345 06200E00 00000000 00000000 

<128 bytes read>

tail和checksum修改

OBET> tailchk
Check tailchk for File /u01/xifenfei/system01.dbf, Block 1:
current = 0x010B0000, required = 0x01010000

OBET> sum
Check value for File /u01/xifenfei/system01.dbf, Block 1:
current = 0x224D, required = 0x28CC

OBET> tailchk apply

Confirm applying tailchk:
File: /u01/xifenfei/system01.dbf
Block: 1
Offset in block: 8188 (file offset: 0x00003FFC)
Original value: 0x010B0000
New value:      0x01010000
Confirm? (Y/YES to proceed): y
Verification successful: Stored tailchk matches calculated value (0x01010000).
Tailchk applied successfully.

OBET> sum apply

Confirm applying checksum:
File: /u01/xifenfei/system01.dbf
Block: 1
Offset in block: 16 (file offset: 0x00002010)
Original value: 0x224D
New value:      0x28C6
Confirm? (Y/YES to proceed): y
Verification successful: Stored checksum matches calculated value (0x28C6).
Checksum applied successfully.

两个数据文件之前拷贝数据(一般copy数据之后建议校验tailchk和sum)
一般情况下文件之间的拷贝就是数据号不一样,比如修改checkpoint,resetlog信息等,这里支持不一样偏移量,不一样数据块的拷贝

OBET> copy 1,1,0,128 to 3,5,128

Confirm copy:
Source: file#1 (/u01/xifenfei/system01.dbf), block 1, offset 0, 128 bytes
Target: file#3 (/u01/xifenfei/undotbs01.dbf), block 5, offset 128
Proceed? (Y/YES to confirm): y
Copy successful: 128 bytes copied from file #1 to file #3.

OBET> set file 3
filename set to: /u01/xifenfei/undotbs01.dbf (file#3)

OBET> d block 5 offset 128

File: /u01/xifenfei/undotbs01.dbf
Block: 5                Offsets:   128 to   255
--------------------------------------------------------------------------------
0000A080 0BA20000 01004000 00000000 00000104 224D0000 00000000 0004200B A2DB266A 
0000A0A0 58494645 4E464549 AC020000 00720100 00200000 01000300 00000000 00000000 
0000A0C0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
0000A0E0 08024000 07000000 00000000 7DC92131 64676345 06200E00 00000000 00000000 

<128 bytes read>

OBET> set file 1
filename set to: /u01/xifenfei/system01.dbf (file#1)

OBET> dump block 1 offset 0

File: /u01/xifenfei/system01.dbf
Block: 1                Offsets:     0 to   127
--------------------------------------------------------------------------------
00002000 0BA20000 01004000 00000000 00000104 224D0000 00000000 0004200B A2DB266A 
00002020 58494645 4E464549 AC020000 00720100 00200000 01000300 00000000 00000000 
00002040 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00002060 08024000 07000000 00000000 7DC92131 64676345 06200E00 00000000 00000000 

<128 bytes read>

标记数据块为坏块功能


OBET> show 

Current settings:
File: /u01/xifenfei/system01.dbf
Blocksize: 8192 bytes
Block: 1
Offset in block: 0 (file offset: 0x00002000)
Count: 128 bytes
Mode: edit
Loaded files: 4 (use 'info' to list)

OBET> corrupt

Confirm modification:
File: /u01/xifenfei/system01.dbf
Block: 1
Offset: 14 (file offset: 0x0000200E)
Original value: 01
New value:      FF
Are you sure to set this block corrupted? (Y/YES to proceed): y
Verification successful: Block 1 marked as corrupted (offset 14 set to 0xFF).
Modification successful.

由于该工具直接编辑Oracle 底层数据块操作具有一定的破坏性和风险性,所以在没有授权的情况下无法对数据块进行修改(只能查看),具体授权操作

OBET> license

========================================
           Software Registration        
========================================

Your Hardware ID: XXXXXXXX  ----->提供给我

Please send your Hardware ID to XiFenFei to register.
Website: https://www.xifenfei.com 
Tel/WX: +86-17813235971 

Enter Registration Code: XXXXXX-XXXXXXXX <-----输入注册码进行授权
Registration successful!

Oracle坏块修复工具:Patch_blk

联系:手机/微信(+86 17813235971) QQ(107644445)QQ咨询惜分飞

标题:Oracle坏块修复工具:Patch_blk

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

在win平台上开发了Oracle Recovery Tools小工具,可以实现坏块的快速恢复功能
blk_xf


具体参考相关文章:自研Oracle恢复小工具
由于之前工具使用c#开发不太方便实现跨平台(而且图形化在linux等操作系统上使用起来不方便),现在使用c语言写了小工具:Patch_blk(主要是seq_kcbh tailchk checksum类似坏块处理),模拟两个坏块

BBED> verify
DBVERIFY - Verification starting
FILE = /u01/app/oracle/oradata/xifenfei/system01.dbf
BLOCK = 521

Block 521 is corrupt
Corrupt block relative dba: 0x00400209 (file 0, block 521)
Fractured block found during verification
Data in bad block:
 type: 6 format: 2 rdba: 0x00400209
 last change scn: 0x0000.000001d7 seq: 0x1 flg: 0x06
 spare1: 0x0 spare2: 0x0 spare3: 0x0
 consistency value in tail: 0x01d706fe
 check value in block header: 0x5205
 computed block checksum: 0x0


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           : 2
Message 531 not found;  product=RDBMS; facility=BBED


BBED> verify block 522
DBVERIFY - Verification starting
FILE = /u01/app/oracle/oradata/xifenfei/system01.dbf
BLOCK = 522

Block 522 is corrupt
Corrupt block relative dba: 0x0040020a (file 0, block 522)
Fractured block found during verification
Data in bad block:
 type: 6 format: 2 rdba: 0x0040020a
 last change scn: 0x0000.000001d7 seq: 0xff flg: 0x06
 spare1: 0x0 spare2: 0x0 spare3: 0x0
 consistency value in tail: 0x01d70601
 check value in block header: 0x1e16
 computed block checksum: 0x0


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           : 2
Message 531 not found;  product=RDBMS; facility=BBED

配置坏块修复列表文件

[root@iZbp11c0qyuuo1gr7j98upZ tmp]# cat 1.txt
/u01/app/oracle/oradata/xifenfei/system01.dbf  521 8192 N
/u01/app/oracle/oradata/xifenfei/system01.dbf  522 8192 Y 

--列表文件说明
数据文件路径 文件号 数据块大小 是否人工干预(N表示不需要,Y表示需要)

执行修复操作

[root@iZbp11c0qyuuo1gr7j98upZ tmp]# ./Patch_blk 1.txt


===== Processing line 1 =====
=====================================================
Processing: File=/u01/app/oracle/oradata/xifenfei/system01.dbf, Block=521, Size=8192, Mode=N
=====================================================

=== Step 1: Check seq_kcbh ===
  Current value: 0x01
  [OK] seq_kcbh is normal

=== Step 2: Check tailchk ===
  Current (reversed): 0x01D706FE
  Expected (reversed): 0x01D70601
  [Auto-repair] tailchk mismatch, will fix
  [Backup] Block saved to: ./20251104_230616/system01.dbf_block521
  [Success] tailchk fixed
  [Verify] New tailchk (reversed): 0x01D70601

=== Step 3: Check checksum  ===
  Current checksum: 0x0552
  Computed checksum: 0xFA52
  [Auto-repair] Checksum mismatch, will fix
  [Success] Checksum fixed
  [Verify] New checksum: 0xFA52

=== Step 4: Final Verification ===
  seq_kcbh: 0x01 (not 0xFF: PASS)
  tailchk: 0x01D70601 (expected 0x01D70601: PASS)
  Checksum: 0xFA52 (expected 0xFA52: PASS)

[Result] Block repair completed successfully


===== Processing line 2 =====
=====================================================
Processing: File=/u01/app/oracle/oradata/xifenfei/system01.dbf, Block=522, Size=8192, Mode=Y
=====================================================

=== Step 1: Check seq_kcbh ===
  Current value: 0xFF
  [WARNING] Block is marked as BAD. Repair? (yes/no): y
  [Backup] Block saved to: ./20251104/system01.dbf_block522
  [Success] seq_kcbh updated to 0x01

=== Step 2: Check tailchk ===
  Current (reversed): 0x01D70601
  Expected (reversed): 0x01D70601
  [OK] tailchk is normal

=== Step 3: Check checksum ===
  Current checksum: 0x161E
  Computed checksum: 0xE81E
  [WARNING] Checksum mismatch. Repair? (yes/no): y
  [Success] Checksum fixed
  [Verify] New checksum: 0xE81E

=== Step 4: Final Verification ===
  seq_kcbh: 0x01 (not 0xFF: PASS)
  tailchk: 0x01D70601 (expected 0x01D70601: PASS)
  Checksum: 0xE81E (expected 0xE81E: PASS)

[Result] Block repair completed successfully


=====================================
Processing complete. Total: 2
  Modify Success: 2
  Modify None: 0
  Skipped/Failed: 0
  Blocks Backed Up: 2
=====================================

在修复坏块之前会对相关block进行备份

[root@iZbp11c0qyuuo1gr7j98upZ 20251104]# ls -ltra
total 24
-rw-r--r--   1 root root 8192 Nov  4 22:42 system01.dbf_block521
-rw-r--r--   1 root root 8192 Nov  4 22:42 system01.dbf_block522
drwxr-xr-x   2 root root 4096 Nov  4 22:42 .
drwxrwxrwt. 14 root root 4096 Nov  4 23:39 ..
[root@iZbp11c0qyuuo1gr7j98upZ 20251104]# 

Patch_blk修复坏块之后,检查坏块正常

BBED> verify
DBVERIFY - Verification starting
FILE = /u01/app/oracle/oradata/xifenfei/system01.dbf
BLOCK = 521


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
Message 531 not found;  product=RDBMS; facility=BBED


BBED> verify block 522
DBVERIFY - Verification starting
FILE = /u01/app/oracle/oradata/xifenfei/system01.dbf
BLOCK = 522


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
Message 531 not found;  product=RDBMS; facility=BBED

对于不太熟悉bbed的客户,可以通过这个工具快速实现常见坏块类型恢复