<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>惜分飞 &#187; obet使用说明</title>
	<atom:link href="https://www.xifenfei.com/tag/obet%e4%bd%bf%e7%94%a8%e8%af%b4%e6%98%8e/feed" rel="self" type="application/rss+xml" />
	<link>https://www.xifenfei.com</link>
	<description>提供7*24专业数据库(Oracle,SQL Server,MySQL,PostgreSQL等)恢复和技术支持@Tel:17813235971</description>
	<lastBuildDate>Sat, 07 Nov 2026 15:45:44 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	
	<item>
		<title>OBET-Oracle Block Editor Tool使用说明</title>
		<link>https://www.xifenfei.com/2026/08/obet-oracle-block-editor-tool.html</link>
		<comments>https://www.xifenfei.com/2026/08/obet-oracle-block-editor-tool.html#comments</comments>
		<pubDate>Thu, 13 Aug 2026 13:49:23 +0000</pubDate>
		<dc:creator><![CDATA[惜分飞]]></dc:creator>
				<category><![CDATA[小工具]]></category>
		<category><![CDATA[obet]]></category>
		<category><![CDATA[obet使用说明]]></category>

		<guid isPermaLink="false">https://www.xifenfei.com/?p=12292</guid>
		<description><![CDATA[联系：手机/微信(+86 17813235971) QQ(107644445)  &#8230; <a href="https://www.xifenfei.com/2026/08/obet-oracle-block-editor-tool.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div id="xifenfeicopyright">
<p>联系：<a href="https://www.xifenfei.com/about_xifenfei" target="_blank">手机/微信(+86 17813235971)   QQ(107644445)</a><a target="_blank" href="http://wpa.qq.com/msgrd?v=3&#038;uin=107644445&#038;site=qq&#038;menu=yes"><img src="https://www.xifenfei.com/wp-content/themes/img/site_qq.jpg" alt="QQ咨询惜分飞" title="QQ咨询惜分飞"/></a></p>
<p>标题：<a href="https://www.xifenfei.com/2026/08/obet-oracle-block-editor-tool.html" target="_blank">OBET-Oracle Block Editor Tool使用说明</a></p>
<p>作者：<a href="https://www.xifenfei.com" target="_blank">惜分飞</a>©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]</p>
</div>
<h2 id="intro" style="color: #1f2328;">1. 概述</h2>
<p style="color: #1f2328;">OBET 以 REPL 交互模式工作：启动后进入 <code style="color: #cf222e;">OBET&gt;</code> 提示符，逐条执行命令。文件以 <em>文件号 + 块号</em> 的方式定位，可同时维护一份文件列表（来自 <code style="color: #cf222e;">listfile.txt</code>），方便在不同数据文件之间交叉读写。</p>
<h3 style="color: #0969da;">功能概览</h3>
<ul style="color: #1f2328;">
<li>十六进制查看 / 编辑数据块（自动维护 tailchk 和 checksum）</li>
<li>打印 Oracle 内部结构（<code style="color: #cf222e;">kcbh</code> / <code style="color: #cf222e;">kcvfh*</code> / <code style="color: #cf222e;">tailchk</code>）</li>
<li>跨数据文件拷贝块 / 字节范围 / 文件头 SCN 信息</li>
<li>整文件强制拷贝（<code style="color: #cf222e;">forcecopy</code>，绕过坏块）</li>
<li>扩展数据文件（<code style="color: #cf222e;">extend file N</code>，按文件头记录大小补齐零块）</li>
<li>坏块修复：<code style="color: #cf222e;">corrupt</code> / <code style="color: #cf222e;">repair block</code> / <code style="color: #cf222e;">repair blkscn</code> / <code style="color: #cf222e;">merge</code></li>
<li><code style="color: #cf222e;">dbv</code> 数据块物理一致性扫描（可指定文件/起始块/块数）</li>
<li>导出 / 解析数据库元数据：<code style="color: #cf222e;">get_dhr</code> / <code style="color: #cf222e;">parse_ctl</code> / <code style="color: #cf222e;">dump_undo</code></li>
<li>解析 RDBA 编码（<code style="color: #cf222e;">rdba</code> / <code style="color: #cf222e;">getrdba</code>）</li>
<li>构造 Oracle 数据块（<code style="color: #cf222e;">build block N,M</code>）</li>
<li>Linux 下 Patch Oracle 进程 SCN（<code style="color: #cf222e;">patch_scn</code>）</li>
</ul>
<div class="note" style="color: #1f2328;"><strong>授权说明</strong>写操作（<code style="color: #cf222e;">modify / corrupt / repair / copy / merge / forcecopy / extend / patch_scn</code> 等需要修改磁盘内容的命令）需要先 <code style="color: #cf222e;">set mode edit</code> 进入编辑模式，并在出现确认提示时输入 <code style="color: #cf222e;">Y</code> 或 <code style="color: #cf222e;">YES</code> 才会执行写入。 <code style="color: #cf222e;">backup</code> 仅复制块到本地目录，不需授权。未授权时仅允许只读命令。</div>
<h2 id="developer" style="color: #1f2328;">2. 开发者信息</h2>
<table style="color: #1f2328;">
<tbody>
<tr>
<th>姓名</th>
<td>XiFenFei</td>
</tr>
<tr>
<th>电话</th>
<td>+86-17813235971</td>
</tr>
<tr>
<th>邮箱</th>
<td>dba@xifenfei</td>
</tr>
<tr>
<th>QQ</th>
<td>107644445</td>
</tr>
<tr>
<th>微信</th>
<td>17813235971</td>
</tr>
<tr>
<th>网站</th>
<td><a href="https://www.xifenfei.com/">https://www.xifenfei.com</a></td>
</tr>
</tbody>
</table>
<p style="color: #1f2328;">反馈授权 / Bug / 功能建议可通过上述任一渠道联系。</p>
<h2 id="startup" style="color: #1f2328;">3. 启动与会话</h2>
<h3 id="cmd-help" style="color: #0969da;">3.1 help</h3>
<p style="color: #1f2328;">显示完整命令清单（与本手册对应的内嵌帮助）。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; 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 &lt;path|remove|edit&gt;  - 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 &lt;kcvfh[.field]|tailchk&gt;  - 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 &lt;file,block&gt; to &lt;file,block&gt;  - 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 &lt;rfile#&gt; &lt;block#&gt; - 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</code></pre>
<h3 id="cmd-version" style="color: #0969da;">3.2 version</h3>
<p style="color: #1f2328;">显示 OBET 版本、构建时间、开发者信息。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; 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</code></pre>
<h3 id="cmd-quit" style="color: #0969da;">3.3 quit / exit</h3>
<p style="color: #1f2328;">退出 OBET。</p>
<h2 id="setup" style="color: #1f2328;">4. 文件 / 块设置</h2>
<p style="color: #1f2328;">这一组命令负责把磁盘上的数据文件加载到 OBET 上下文。所有读写命令都依赖当前的 <em>filename</em>、<em>blocksize</em>、<em>block</em>、<em>offset</em>、<em>count</em>、<em>endian</em> 等参数。</p>
<h3 id="cmd-open" style="color: #0969da;">4.1 open &lt;listfile&gt;</h3>
<p style="color: #1f2328;">从指定文件加载文件列表。文件每行格式：<code style="color: #cf222e;">&lt;num&gt; &lt;path&gt;</code>，<code style="color: #cf222e;">num</code> 是 OBET 内部文件号，供后续 <code style="color: #cf222e;">set file N</code> / <code style="color: #cf222e;">file N</code> 使用。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; open listfile.txt</code></pre>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; open test_listfile.txt
Loaded 1 files from datafile list 'test_listfile.txt'.</code></pre>
<h3 id="cmd-info" style="color: #0969da;">4.2 info</h3>
<p style="color: #1f2328;">显示当前已加载的文件列表（编号 / 路径）。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; info
----------------------------------------
No   Path
----------------------------------------
1    E:/CC/obet/dbf/SYSTEM01.DBF
----------------------------------------</code></pre>
<h3 id="cmd-set" style="color: #0969da;">4.3 set &lt;param&gt; &lt;value&gt;</h3>
<p style="color: #1f2328;">设置上下文参数。可用参数：</p>
<table style="color: #1f2328;">
<tbody>
<tr>
<th>参数</th>
<th>取值</th>
<th>说明</th>
</tr>
<tr>
<td><code style="color: #cf222e;">filename</code></td>
<td>文件路径</td>
<td>当前操作的目标文件</td>
</tr>
<tr>
<td><code style="color: #cf222e;">file</code></td>
<td>整数 N</td>
<td>切换到已加载列表中第 N 个文件</td>
</tr>
<tr>
<td><code style="color: #cf222e;">blocksize</code></td>
<td>2048 / 4096 / 8192 / 16384 / 32768</td>
<td>Oracle 块大小</td>
</tr>
<tr>
<td><code style="color: #cf222e;">block</code></td>
<td>整数</td>
<td>当前块号</td>
</tr>
<tr>
<td><code style="color: #cf222e;">offset</code></td>
<td>整数（块内偏移）</td>
<td>块内起始偏移</td>
</tr>
<tr>
<td><code style="color: #cf222e;">count</code></td>
<td>整数</td>
<td>dump/modify 的字节数</td>
</tr>
<tr>
<td><code style="color: #cf222e;">mode</code></td>
<td><code style="color: #cf222e;">browse</code> / <code style="color: #cf222e;">edit</code></td>
<td>交互模式（默认 browse）</td>
</tr>
<tr>
<td><code style="color: #cf222e;">endian</code></td>
<td><code style="color: #cf222e;">big</code> / <code style="color: #cf222e;">little</code></td>
<td>多字节字段字节序</td>
</tr>
</tbody>
</table>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; set filename /u01/oradata/users01.dbf
OBET&gt; set blocksize 8192
OBET&gt; set block 100
OBET&gt; set endian big</code></pre>
<h3 id="cmd-show" style="color: #0969da;">4.4 show</h3>
<p style="color: #1f2328;">显示当前上下文所有参数，包括 <code style="color: #cf222e;">Mode</code>（<code style="color: #cf222e;">browse</code> / <code style="color: #cf222e;">edit</code>）、<code style="color: #cf222e;">Filename</code>、<code style="color: #cf222e;">File#</code>、<code style="color: #cf222e;">Block#</code>、<code style="color: #cf222e;">Blocksize</code>、<code style="color: #cf222e;">Offset</code>、<code style="color: #cf222e;">Count</code>、<code style="color: #cf222e;">Endian</code> 等。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; 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)</code></pre>
<h3 id="cmd-listfile" style="color: #0969da;">4.5 listfile &lt;path | remove | edit&gt;</h3>
<p style="color: #1f2328;">扫描目录生成 <code style="color: #cf222e;">listfile.txt</code>、清空或编辑。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; listfile /u01/oradata
OBET&gt; listfile edit
OBET&gt; listfile remove</code></pre>
<ul style="color: #1f2328;">
<li><code style="color: #cf222e;">listfile &lt;path&gt;</code>：递归扫描目录，支持通配符 <code style="color: #cf222e;">*</code>，结果追加写入当前目录的 <code style="color: #cf222e;">listfile.txt</code></li>
<li><code style="color: #cf222e;">listfile remove</code>：删除当前目录的 <code style="color: #cf222e;">listfile.txt</code></li>
<li><code style="color: #cf222e;">listfile edit [path]</code>：调用系统编辑器（Windows 记事本 / Linux <code style="color: #cf222e;">vi</code>）打开 <code style="color: #cf222e;">listfile.txt</code>，可指定路径</li>
</ul>
<p style="color: #1f2328;"><strong>通配符示例：</strong></p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; listfile E:/oradata           # 扫描整个目录
OBET&gt; listfile E:/dbf/system*.dbf  # 仅扫描名称以 system 开头且 .dbf 结尾的数据文件</code></pre>
<p style="color: #1f2328;">已存在 <code style="color: #cf222e;">listfile.txt</code> 时，新扫描结果以递增编号追加写入。</p>
<div class="warn" style="color: #7d4e00;"><strong>写操作保护</strong>写盘时会校验输入，避免路径穿越（<code style="color: #cf222e;">../</code>、<code style="color: #cf222e;">..\</code>）。</div>
<h2 id="view" style="color: #1f2328;">5. 查看数据</h2>
<h3 id="cmd-dump" style="color: #0969da;">5.1 dump / d [file N] [block X] [offset Y] [count Z]</h3>
<p style="color: #1f2328;">以十六进制 + ASCII 形式显示块数据。默认使用当前文件 / 块 / 偏移，也可直接通过参数指定。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; d
OBET&gt; dump file 1 block 100
OBET&gt; dump offset 16 count 64
OBET&gt; dump file 2 block 5 offset 0 count 128</code></pre>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; 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</code></pre>
<h3 id="cmd-print" style="color: #0969da;">5.2 print / p &lt;kcvfh[.field] | tailchk&gt;</h3>
<p style="color: #1f2328;">解析并打印 Oracle 内部结构。仅支持一级字段。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; p kcvfh
OBET&gt; p kcvfh.kcvfhhdr
OBET&gt; p kcvfh.kcvfhckp
OBET&gt; p tailchk
ub4 tailchk                                      @8188    0x00000B01</code></pre>
<p style="color: #1f2328;">支持的全部结构字段（<code style="color: #cf222e;">p</code> 不带参数可打印完整清单）：</p>
<table style="color: #1f2328;">
<tbody>
<tr>
<th>字段</th>
<th>含义</th>
</tr>
<tr>
<td><code style="color: #cf222e;">kcvfhhdr</code></td>
<td>文件头描述符</td>
</tr>
<tr>
<td><code style="color: #cf222e;">kcvfhrfn</code></td>
<td>相对文件号</td>
</tr>
<tr>
<td><code style="color: #cf222e;">kcvfhrdb</code></td>
<td>DBID</td>
</tr>
<tr>
<td><code style="color: #cf222e;">kcvfhcrs</code></td>
<td>创建 SCN</td>
</tr>
<tr>
<td><code style="color: #cf222e;">kcvfhcrt</code></td>
<td>创建时间</td>
</tr>
<tr>
<td><code style="color: #cf222e;">kcvfhrls</code></td>
<td>Resetlogs SCN</td>
</tr>
<tr>
<td><code style="color: #cf222e;">kcvfhcrs</code></td>
<td>Creation SCN</td>
</tr>
<tr>
<td><code style="color: #cf222e;">kcvfhbsc</code></td>
<td>Backup SCN</td>
</tr>
<tr>
<td><code style="color: #cf222e;">kcvfhbti</code></td>
<td>Backup table info</td>
</tr>
<tr>
<td><code style="color: #cf222e;">kcvfhbth</code></td>
<td>Backup table header</td>
</tr>
<tr>
<td><code style="color: #cf222e;">kcvfhbcp</code></td>
<td>Backup Checkpoint</td>
</tr>
<tr>
<td><code style="color: #cf222e;">kcvfhbhz</code></td>
<td>Backup status</td>
</tr>
<tr>
<td><code style="color: #cf222e;">kcvfhccc</code></td>
<td>Change count</td>
</tr>
<tr>
<td><code style="color: #cf222e;">kcvfhckp</code></td>
<td>完整 Checkpoint</td>
</tr>
<tr>
<td><code style="color: #cf222e;">kcvfhcpc</code></td>
<td>Checkpoint count</td>
</tr>
<tr>
<td><code style="color: #cf222e;">kcvfhprs</code> / <code style="color: #cf222e;">kcvfhprc</code> / <code style="color: #cf222e;">kcvfhprfs</code> / <code style="color: #cf222e;">kcvfhrfs</code></td>
<td>恢复相关字段</td>
</tr>
<tr>
<td><code style="color: #cf222e;">kcvfhtsn</code> / <code style="color: #cf222e;">kcvfhtln</code> / <code style="color: #cf222e;">kcvfhtnm</code></td>
<td>表空间号 / 名长度 / 名</td>
</tr>
<tr>
<td><code style="color: #cf222e;">kcvfhrlc</code> / <code style="color: #cf222e;">kcvfhrts</code> / <code style="color: #cf222e;">kcvfhtrt</code></td>
<td>Resetlogs 计数 / 时间戳 / 总复位次数</td>
</tr>
<tr>
<td><code style="color: #cf222e;">kcvfhxcd</code></td>
<td>扩展 Checkpoint</td>
</tr>
<tr>
<td><code style="color: #cf222e;">kcvfhsta</code></td>
<td>Fuzzy 状态</td>
</tr>
<tr>
<td><code style="color: #cf222e;">kcvfhofb</code> / <code style="color: #cf222e;">kcvfhnfb</code></td>
<td>Offset bytes / Next offset bytes</td>
</tr>
<tr>
<td><code style="color: #cf222e;">kcvfhbfh</code></td>
<td>Backup file header block</td>
</tr>
<tr>
<td><code style="color: #cf222e;">kcvfhafs</code></td>
<td>Auxiliary recovery</td>
</tr>
<tr>
<td><code style="color: #cf222e;">tailchk</code></td>
<td>块尾校验</td>
</tr>
</tbody>
</table>
<div class="note" style="color: #1f2328;">仅支持一级结构访问，如 <code style="color: #cf222e;">p kcvfh.kcvfhhdr</code>，不支持 <code style="color: #cf222e;">p kcvfh.kcvfhhdr.kccfhtyp</code>。</div>
<h2 id="verify" style="color: #1f2328;">6. 校验 / 计算</h2>
<h3 id="cmd-sum" style="color: #0969da;">6.1 sum [apply] [file N] [block X]</h3>
<p style="color: #1f2328;">校验或修复 <em>checksum</em>（块头 <code style="color: #cf222e;">kcbh</code> 中的 <code style="color: #cf222e;">kcbh.flags</code>/<code style="color: #cf222e;">kcbh.checksum</code> 字段）。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; sum
OBET&gt; sum apply
OBET&gt; sum file 2
OBET&gt; sum apply file 2 block 100</code></pre>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; sum
Check value for File e:\cc\obet\dbf\system01.dbf, Block 2:
  current = 0xB71C, required = 0xB71C</code></pre>
<h3 id="cmd-tailchk" style="color: #0969da;">6.2 tailchk [apply] [file N] [block X]</h3>
<p style="color: #1f2328;">校验或修复 <em>tailchk</em>（块末 4 字节与起始 SCN 比对）。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; tailchk
OBET&gt; tailchk apply
OBET&gt; tailchk apply file 1 block 224</code></pre>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; 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.</code></pre>
<h3 id="cmd-dbv" style="color: #0969da;">6.3 dbv [file N [block M [blocks X]]]</h3>
<p style="color: #1f2328;">对全部已加载文件或指定文件做物理一致性扫描（类似 Oracle <code style="color: #cf222e;">dbv</code> 工具）。字节序由 <code style="color: #cf222e;">set endian</code> 控制。可检测五类问题：全零块、软损坏（<code style="color: #cf222e;">seq_kcbh</code>=0xFF）、tailchk 错误、checksum 错误、rdba 错误。</p>
<ul style="color: #1f2328;">
<li><code style="color: #cf222e;">dbv</code>：扫描全部已加载文件（从块 0 到文件末尾）</li>
<li><code style="color: #cf222e;">dbv file N</code>：仅扫描文件 N（从块 0 到文件末尾）</li>
<li><code style="color: #cf222e;">dbv file N block M</code>：扫描文件 N 从块 M 到文件末尾</li>
<li><code style="color: #cf222e;">dbv file N block M blocks X</code>：扫描文件 N 从块 M 起共 X 块；若 M+X 超出文件总块数，则扫描到文件末尾</li>
</ul>
<p style="color: #1f2328;">块号从 0 开始。自动识别 bigfile / smallfile 数据文件，bigfile 时跳过文件头（block 0）的 rdba 校验。扫描结果自动保存到日志文件：</p>
<ul style="color: #1f2328;">
<li><code style="color: #cf222e;">dbv</code> → <code style="color: #cf222e;">dbv_yyyymmddhhmmss.log</code></li>
<li><code style="color: #cf222e;">dbv file N</code> → <code style="color: #cf222e;">dbv_file_N_yyyymmddhhmmss.log</code></li>
<li><code style="color: #cf222e;">dbv file N block M</code> → <code style="color: #cf222e;">dbv_file_N_block_M_yyyymmddhhmmss.log</code></li>
</ul>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; dbv
OBET&gt; dbv file 1
OBET&gt; dbv file 1 block 100
OBET&gt; dbv file 1 block 100 blocks 500</code></pre>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; 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</code></pre>
<h2 id="modify" style="color: #1f2328;">7. 修改数据</h2>
<h3 id="cmd-modify" style="color: #0969da;">7.1 modify / m &lt;hex&gt; [file N] [block X] [offset Y] <span class="badge lic" style="color: #82071e;">需授权</span></h3>
<p style="color: #1f2328;">写入十六进制字节。写入后<strong>自动重新计算</strong> <code style="color: #cf222e;">tailchk</code> 与 <code style="color: #cf222e;">checksum</code>。需先 <code style="color: #cf222e;">set mode edit</code>，执行时输入 <code style="color: #cf222e;">Y</code> 确认。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; set mode edit
OBET&gt; m 41424344
OBET&gt; modify 41424344 file 1 block 100 offset 32</code></pre>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; set mode edit
OBET&gt; 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.</code></pre>
<h3 id="cmd-corrupt" style="color: #0969da;">7.2 corrupt [file N] [block X] <span class="badge lic" style="color: #82071e;">需授权</span></h3>
<p style="color: #1f2328;">将指定块标记为 Oracle 意义上的<em>损坏块</em>（破坏 tailchk）。需先 <code style="color: #cf222e;">set mode edit</code>，执行时输入 <code style="color: #cf222e;">Y</code> 确认。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; corrupt file 1 block 128
Confirm marking block 128 as corrupted:
Block 128 current tailchk: 0x00200000
Successfully marked block 128 as corrupted.</code></pre>
<h3 id="cmd-backup" style="color: #0969da;">7.3 backup [file N] [block X]</h3>
<p style="color: #1f2328;">把指定块完整备份到当前目录的 <code style="color: #cf222e;">backup_blk/</code> 子目录。备份文件名格式：<code style="color: #cf222e;">backup_&lt;filename&gt;.&lt;file#&gt;_&lt;block#&gt;_&lt;timestamp&gt;.blk</code></p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; 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</code></pre>
<h3 id="cmd-undo" style="color: #0969da;">7.4 undo <span class="badge lic" style="color: #82071e;">需授权</span></h3>
<p style="color: #1f2328;">回滚最近一次 <code style="color: #cf222e;">modify / repair / copy / corrupt</code> 等写操作。OBET 在每次写操作前保留原块内容，回滚基于这份快照。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; undo
Undid 1 operation(s). Block data restored from backup.</code></pre>
<h2 id="repair" style="color: #1f2328;">8. 修复</h2>
<h3 id="cmd-repair" style="color: #0969da;">8.1 repair block / blkscn [file N] [block X] <span class="badge lic" style="color: #82071e;">需授权</span></h3>
<ul style="color: #1f2328;">
<li><code style="color: #cf222e;">repair block</code>：修复 <code style="color: #cf222e;">seq_kcbh</code>、<code style="color: #cf222e;">tailchk</code>、<code style="color: #cf222e;">checksum</code></li>
<li><code style="color: #cf222e;">repair blkscn</code>：把块的 <code style="color: #cf222e;">scn</code> 抬到不低于 <code style="color: #cf222e;">csc</code>（解决 ORA-600 [kdddgb] 之类 <em>block SCN &lt; block CSC</em> 类报错）</li>
</ul>
<p style="color: #1f2328;">均需先 <code style="color: #cf222e;">set mode edit</code>，执行时输入 <code style="color: #cf222e;">Y</code> 确认。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; set mode edit
OBET&gt; repair block
OBET&gt; repair block file 2 block 100
OBET&gt; repair blkscn file 1 block 224</code></pre>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; repair block file 1 block 128
Repairing block 1, 128...
Current block SCN information:
  blkscn: 0x000000000278D9A3 (41663267)
  blkcsc: 0x0000000002790128 (41670952)
blkscn &lt; blkcsc, SCN repair required.
New SCN values to write:
  base:  0x02790128 (41670952)
  wrap:  0x0000
  seq:   0x00
Confirm SCN repair operations: Operation cancelled.</code></pre>
<h3 id="cmd-copy" style="color: #0969da;">8.2 copy <span class="badge lic" style="color: #82071e;">需授权</span></h3>
<p style="color: #1f2328;">多种拷贝语义，全部写盘需授权。</p>
<table style="color: #1f2328;">
<tbody>
<tr>
<th>子命令</th>
<th>语法</th>
<th>说明</th>
</tr>
<tr>
<td><code style="color: #cf222e;">copy data</code></td>
<td><code style="color: #cf222e;">copy data &lt;src&gt; to &lt;dest&gt;</code></td>
<td>跨文件字节范围拷贝</td>
</tr>
<tr>
<td><code style="color: #cf222e;">copy block</code></td>
<td><code style="color: #cf222e;">copy block &lt;file,block&gt; to &lt;file,block&gt;</code></td>
<td>整块拷贝</td>
</tr>
<tr>
<td><code style="color: #cf222e;">copy chkscn</code></td>
<td><code style="color: #cf222e;">copy chkscn file N to file M</code></td>
<td>拷贝数据文件头 Checkpoint SCN 信息</td>
</tr>
<tr>
<td><code style="color: #cf222e;">copy resetlogscn</code></td>
<td><code style="color: #cf222e;">copy resetlogscn file N to file M</code></td>
<td>拷贝 Resetlogs 信息</td>
</tr>
</tbody>
</table>
<p style="color: #1f2328;"><code style="color: #cf222e;">&lt;src&gt;</code> / <code style="color: #cf222e;">&lt;dest&gt;</code> 格式：<code style="color: #cf222e;">file[,block][,offset[,count]]</code>。缺省 block 沿用当前块，缺省 offset = 0，缺省 count = blocksize。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; copy data 1,1,16,32 to 2,5,16
OBET&gt; copy block 1,100 to 2,100
OBET&gt; copy chkscn file 1 to file 2
OBET&gt; copy resetlogscn file 1 to file 2</code></pre>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; 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.</code></pre>
<h3 id="cmd-merge" style="color: #0969da;">8.3 merge file N from M <span class="badge lic" style="color: #82071e;">需授权</span></h3>
<p style="color: #1f2328;">用 <em>M 文件</em>中 RDBA 一致的健康块替换 <em>N 文件</em>中的坏块。执行前 OBET 会要求输入 <code style="color: #cf222e;">YES</code> 二次确认。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; merge file 2 from 3</code></pre>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; 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</code></pre>
<div class="danger" style="color: #82071e;"><strong>不可逆</strong>操作覆盖原文件块，请先 <code style="color: #cf222e;">backup</code>。</div>
<h3 id="cmd-forcecopy" style="color: #0969da;">8.4 forcecopy file N to &lt;path&gt; <span class="badge lic" style="color: #82071e;">需授权</span></h3>
<p style="color: #1f2328;">整文件级别强制拷贝，<strong>忽略坏块</strong>（按 <code style="color: #cf222e;">blocksize</code> 步长逐块读取；坏块读到 0 字节时填充全 0&#215;00 写入目标）。用于磁盘扇区部分损坏但仍能部分读取的应急场景。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; forcecopy file 2 to D:\rescue\users01.dbf</code></pre>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; 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.</code></pre>
<h3 id="cmd-extend" style="color: #0969da;">8.5 extend file N <span class="badge lic" style="color: #82071e;">需授权</span></h3>
<p style="color: #1f2328;">比较 Oracle 数据文件实际大小与文件头记录的预期大小，在不一致时将文件扩展至正确大小（尾部构造 Oracle block 填充）。</p>
<p style="color: #1f2328;"><strong>判定规则</strong>：读取 block 1 内部偏移 44 处的块计数字段，计算出预期大小：</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">预期大小 = (块计数 + 1) × blocksize</code></pre>
<p style="color: #1f2328;">三种结果：</p>
<ul style="color: #1f2328;">
<li><strong>相等</strong>——文件大小与预期一致，无需操作；</li>
<li><strong>预期 &gt; 实际</strong>（文件偏小）——从当前块号起，逐块用构造的 Oracle 空块填充至预期大小（不足一块的尾部按字节填零）；</li>
<li><strong>预期 &lt; 实际</strong>（文件偏大）——输出提示，要求人工介入，不自动截断。</li>
</ul>
<p style="color: #1f2328;"><strong>前提条件</strong>：</p>
<ul style="color: #1f2328;">
<li>需先 <code style="color: #cf222e;">set blocksize</code> 设置正确的 Oracle 块大小（4096 / 8192 / 16384 / 32768）</li>
<li>需先 <code style="color: #cf222e;">set endian big|little</code> 设置正确的字节序</li>
<li>需先 <code style="color: #cf222e;">set mode edit</code> 进入编辑模式</li>
</ul>
<p style="color: #1f2328;">开始写入前需输入 <code style="color: #cf222e;">Y</code> 或 <code style="color: #cf222e;">YES</code> 二次确认（忽略大小写）。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; set blocksize 8192
OBET&gt; set mode edit
OBET&gt; 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.</code></pre>
<div class="warn" style="color: #7d4e00;"><strong>注意</strong>扩展操作不可逆，请在执行前做好文件备份。若文件实际大小大于预期，Oracle 内部可能已扩展但文件头未更新，请人工核实后处理。</div>
<h3 id="cmd-build" style="color: #0969da;">8.6 build block N,M [to file X] <span class="badge lic" style="color: #82071e;">需授权</span></h3>
<p style="color: #1f2328;">构造 Oracle 数据块（<code style="color: #cf222e;">N</code>=file# 1-1024，<code style="color: #cf222e;">M</code>=block#）并按需 patch 到 listfile 中的目标文件。</p>
<p style="color: #1f2328;"><strong>用法</strong>：</p>
<ul style="color: #1f2328;">
<li><code style="color: #cf222e;">build block N,M</code>——仅在 OBET 当前工作目录生成 <code style="color: #cf222e;">build_N_M.blk</code>（始终生成，无论是否带 <code style="color: #cf222e;">to file X</code>）。</li>
<li><code style="color: #cf222e;">build block N,M to file X</code>——生成 blk 之后，校验通过后将构造好的块覆盖到 listfile X 的 block M。</li>
</ul>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; set endian big
OBET&gt; build block 1,500
Created: build_1_500.blk (file#=1, block#=500, rdba=0x004001F4, tailchk=0x01000000, checksum=0x0113)

OBET&gt; set mode edit
OBET&gt; 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)</code></pre>
<h2 id="dbinfo" style="color: #1f2328;">9. 数据库诊断</h2>
<h3 id="cmd-get_dhr" style="color: #0969da;">9.1 get_dhr</h3>
<p style="color: #1f2328;">读取当前加载的每个数据文件的 <em>block 1</em>（数据文件头），解析数据库元数据并生成 <em>数据文件头报告</em>（Get Datafile Header Report）。报告同时输出到屏幕，并写入 <code style="color: #cf222e;">dhr_&lt;YYYYMMDD_HHMMSS&gt;.txt</code>。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; 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</code></pre>
<h3 id="cmd-parse_ctl" style="color: #0969da;">9.2 parse_ctl &lt;path&gt;</h3>
<p style="color: #1f2328;">解析 Oracle 控制文件（<code style="color: #cf222e;">control01.ctl</code> / <code style="color: #cf222e;">control02.ctl</code> 等），输出 DB 名称、字符集、所有数据文件（type=04）、临时文件（type=07）、日志文件（type=03）、表空间清单。日志文件 SIZE 列由三级回退得到：</p>
<ol style="color: #1f2328;">
<li>操作系统上读取到的 redo 文件大小减去 512 字节（Oracle redo 文件尾部的 512 字节 footer）；</li>
<li>若 OS 文件无法访问（文件丢失 / 不可读），从控制文件第 21 / 22 块中 redo 记录（72 字节 / 条）的块数 × 512 字节取得；</li>
<li>上述两者都不可用时显示 <code style="color: #cf222e;">0</code>（对应记录仍会显示，便于人工干预）。</li>
</ol>
<p style="color: #1f2328;"><code style="color: #cf222e;">PATH</code> 列宽按当前解析结果中最长路径动态收紧；<code style="color: #cf222e;">SIZE</code> 数值右对齐。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; parse_ctl E:\ORADATA\ORCL\CONTROL01.CTL</code></pre>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; 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 ---</code></pre>
<h4 id="parse_ctl-rectl">9.2.1 自动生成的重建控制文件脚本</h4>
<p style="color: #1f2328;">完成屏幕输出后，OBET 会在当前工作目录生成 <code style="color: #cf222e;">rectl_&lt;DB_NAME&gt;_&lt;YYYYMMDDHHMMSS&gt;.sql</code>，可作为 <code style="color: #cf222e;">CREATE CONTROLFILE</code> 重建命令的参考模板。</p>
<p style="color: #1f2328;">文件包含 <code style="color: #cf222e;">CREATE CONTROLFILE</code> 头、<code style="color: #cf222e;">LOGFILE</code>（同 group 多成员合并为 <code style="color: #cf222e;">GROUP N (m1, m2)</code> 元组写法）、<code style="color: #cf222e;">DATAFILE</code>、<code style="color: #cf222e;">CHARACTER SET</code> 与结尾分号 <code style="color: #cf222e;">;</code>。</p>
<p style="color: #1f2328;">无法自动获取 SIZE 的 redo 文件仍写入记录，并在文件尾部追加英文提示，便于人工干预。</p>
<p style="color: #1f2328;">生成成功时屏幕输出形如：</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">Control file rebuild SQL generated: rectl_ORCL_20260727151150.sql</code></pre>
<h3 id="cmd-rdba" style="color: #0969da;">9.3 rdba &lt;hex&gt;</h3>
<p style="color: #1f2328;">把 RDBA 值拆解为 Oracle File# 和 Block#（高 10 位 = File#，低 22 位 = Block#）。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; rdba 0x00400000
rdba 0x00400000 (4194304)
File#: 1
Block#: 0</code></pre>
<h3 id="cmd-getrdba" style="color: #0969da;">9.4 getrdba &lt;rfile#&gt; &lt;block#&gt;</h3>
<p style="color: #1f2328;">根据 rfile# 和 block# 计算 RDBA 值（rdba 的逆运算）。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; getrdba 1 1
getrdba:
  rfile#: 1
  block#: 1
  RDBA:   0x00400001 (4194305)</code></pre>
<h3 id="cmd-dump_undo" style="color: #0969da;">9.5 dump_undo [file N] [block M]</h3>
<p style="color: #1f2328;">从 <em>undo$</em> 段读取每条 UNDO 记录的 <code style="color: #cf222e;">name</code> 和 <code style="color: #cf222e;">status$</code>。默认 <code style="color: #cf222e;">file 1 block 224</code>（Oracle 某些版本 undo$ segment header 位置）。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; dump_undo
OBET&gt; dump_undo file 1 block 224</code></pre>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; dump_undo file 1 block 224
==================================================
  DUMP UNDO$ - File#=1 (E:/CC/obet/dbf/SYSTEM01.DBF), Block=224
==================================================
Segment header kcbh.rdba=0x004000E0 =&gt; 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$.</code></pre>
<h3 id="cmd-patch_scn" style="color: #0969da;">9.6 patch_scn <span class="badge linux" style="color: #7d4e00;">Linux</span> <span class="badge lic" style="color: #82071e;">需授权</span></h3>
<p style="color: #1f2328;">直接修改 Oracle 进程内存中的 SCN 字段。仅在 Linux 构建中可用。</p>
<table style="color: #1f2328;">
<tbody>
<tr>
<th>用法</th>
<th>作用</th>
</tr>
<tr>
<td><code style="color: #cf222e;">patch_scn spid</code></td>
<td>列出本机 Oracle <code style="color: #cf222e;">LOCAL=YES</code> 进程</td>
</tr>
<tr>
<td><code style="color: #cf222e;">patch_scn addr</code></td>
<td>通过 sqlplus 辅助获取 SCN 在进程内存中的地址</td>
</tr>
<tr>
<td><code style="color: #cf222e;">patch_scn [&lt;spid&gt;] [&lt;addr&gt;] &lt;newval&gt;</code></td>
<td>把目标进程 SCN 改写为 <code style="color: #cf222e;">newval</code></td>
</tr>
</tbody>
</table>
<h2 id="session" style="color: #1f2328;">10. 会话 / 杂项</h2>
<h3 id="cmd-license" style="color: #0969da;">10.1 license</h3>
<p style="color: #1f2328;">显示当前许可证状态、硬件ID、到期时间。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; license
========================================
         OBET License Information
========================================
Your Hardware ID: F443C4B31A04E56FDC6D9310C1648AC700946AC5269DF2F6DBE8507FDC704812
License Status: AUTHORIZED
Expiry Time:    2030-01-01 23:00:00</code></pre>
<h3 id="cmd-spool" style="color: #0969da;">10.2 spool &lt;file&gt; | off</h3>
<p style="color: #1f2328;">把后续输出同时写入指定文件；<code style="color: #cf222e;">spool off</code> 停止。</p>
<pre style="color: #1f2328;"><code style="color: #1f2328;">OBET&gt; spool dbv_session.log
OBET&gt; dbv
OBET&gt; spool off</code></pre>
<h2 id="faq" style="color: #1f2328;">11. 常见问题</h2>
<h3 style="color: #0969da;">Q1：Oracle 正在使用时能不能直接读取数据文件？</h3>
<p style="color: #1f2328;">可以。Windows 下 OBET 以 <code style="color: #cf222e;">FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE</code> 共享模式打开文件，Oracle 进程独占持有时 OBET 仍能读取。</p>
<h3 style="color: #0969da;">Q2：如何切换数据文件？</h3>
<p style="color: #1f2328;">先 <code style="color: #cf222e;">open listfile.txt</code> 加载列表，再用 <code style="color: #cf222e;">set file N</code>（或任意命令中的 <code style="color: #cf222e;">file N</code> 子句）切换。</p>
<h3 style="color: #0969da;">Q3：写命令报 “license invalid / expired / hwid mismatch”？</h3>
<p style="color: #1f2328;">授权与当前主机 HWID 绑定、存在有效期。用 <code style="color: #cf222e;">license</code> 命令查看当前授权状态，联系维护者重新签发 <code style="color: #cf222e;">license.dat</code>。</p>
<h3 style="color: #0969da;">Q4：<code style="color: #cf222e;">forcecopy</code> 与普通拷贝区别？</h3>
<p style="color: #1f2328;">普通跨文件操作要求源块能正常读取；<code style="color: #cf222e;">forcecopy</code> 跳过 IO 失败的位置并填 0，专为磁盘部分损坏的应急场景设计，目标文件保持原始 <code style="color: #cf222e;">blocksize</code> 和块数。</p>
<h3 style="color: #0969da;">Q5：<code style="color: #cf222e;">p kcvfh.kcvfhhdr.kccfhtyp</code> 为什么报错？</h3>
<p style="color: #1f2328;"><code style="color: #cf222e;">print</code> 仅支持一级字段访问（如 <code style="color: #cf222e;">p kcvfh.kcvfhhdr</code>），不支持二级（如 <code style="color: #cf222e;">p kcvfh.kcvfhhdr.kccfhtyp</code>）。</p>
<h3 style="color: #0969da;">Q6：<code style="color: #cf222e;">build block</code> 和 <code style="color: #cf222e;">repair block</code> 区别？</h3>
<p style="color: #1f2328;"><code style="color: #cf222e;">build block N,M</code> 是从无到有构造一个 Oracle 空块（填 0&#215;00 + 初始化 kcbh/rdba），写入目标文件时需人工确认覆盖；适合块数据完全丢失的场景。</p>
<p style="color: #1f2328;"><code style="color: #cf222e;">repair block</code> 是读取目标块后原地修复 seq_kcbh、tailchk、checksum 三项，不改变块内容本身；适合块内容完好但校验值损坏的场景。</p>
<div id="crp_related"><ul><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2011/04/oracle-awr%e4%bd%bf%e7%94%a8.html" rel="bookmark" class="crp_title">ORACLE AWR使用</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2011/10/oracle%e4%b8%adconnect-by-start-with-%e7%9a%84%e4%bd%bf%e7%94%a8.html" rel="bookmark" class="crp_title">Oracle中connect by…start with…的使用</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2011/06/warning-inbound-connection-timed-out-ora-3136.html" rel="bookmark" class="crp_title">WARNING: inbound connection timed out (ORA-3136)</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2011/11/linux%e4%b9%8bpmap%e5%91%bd%e4%bb%a4.html" rel="bookmark" class="crp_title">Linux之pmap命令</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2011/11/%e5%90%8c%e5%8f%b0%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%a4%9a%e7%89%88%e6%9c%ac%e6%95%b0%e6%8d%ae%e5%ba%93%e7%9b%91%e5%90%ac%e9%85%8d%e7%bd%ae.html" rel="bookmark" class="crp_title">同台服务器多版本数据库监听配置</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2009/11/%e5%bc%b9%e5%87%badiv%ef%bc%8c%e9%94%81%e5%ae%9a%e7%95%8c%e9%9d%a2.html" rel="bookmark" class="crp_title">弹出div，锁定界面</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2011/06/oracle%e7%9b%91%e5%90%ac%e8%ae%be%e7%bd%ae%e5%af%86%e7%a0%81.html" rel="bookmark" class="crp_title">Oracle监听设置密码</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2011/08/ora-01012-not-logged-on.html" rel="bookmark" class="crp_title">ORA-01012: not logged on</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2011/11/%e5%9d%97%e4%bf%ae%e6%94%b9%e8%b7%9f%e8%b8%aa%e7%89%b9%e6%80%a7block-change-tracking.html" rel="bookmark" class="crp_title">块修改跟踪特性(Block Change Tracking)</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2011/08/bbed%e7%a0%b4%e5%9d%8f%e6%95%b0%e6%8d%ae%e6%96%87%e4%bb%b6.html" rel="bookmark" class="crp_title">bbed破坏数据文件</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2009/11/%e5%8a%a8%e6%80%81%e6%9b%b4%e5%a5%bd%e7%bd%91%e7%ab%99%e8%83%8c%e6%99%af%e5%9b%be%e7%89%87%e3%80%81%e8%83%8c%e6%99%af%e9%a2%9c%e8%89%b2%ef%bc%8cjs%e8%b0%83%e8%89%b2%e6%9d%bf.html" rel="bookmark" class="crp_title">动态更好网站背景图片、背景颜色，js调色板</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2011/11/ora-00845-memory_target-not-supported-on-this-system-2.html" rel="bookmark" class="crp_title">ORA-00845: MEMORY_TARGET not supported on this system</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>https://www.xifenfei.com/2026/08/obet-oracle-block-editor-tool.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
