PRMDUL Oracle物理恢复工具:DBF损坏时的底层数据抢救指南
简介PRM-DUL Oracle数据库恢复工具v4.1是一款面向DBA、数据运维工程师及Oracle故障处理人员的企业级数据救援解决方案专用于应对物理损坏、控制文件丢失、表空间异常等导致的Oracle数据库不可访问场景支持9i至12c全版本在AIX、Linux、Windows等多平台稳定运行。资源包为6.01MB的ZIP压缩文件共含19个文件7个JAR构成核心执行模块5个TEMPLATE提供典型恢复场景模板3个TXT含README与使用说明另有配置文件conf、Windows批处理bat、Linux脚本sh及日志文件log结构完整、开箱即用。已有574人学习下载用户可直接部署运行获取完整的DUL底层解析能力、字段映射规则、段扫描策略及数据导出方案尤其适合需绕过数据字典进行紧急数据提取的实战环境。1. PRMDUL PRM-DUL Oracle数据库恢复工具v4.1当DBF文件损坏、归档丢失、SYSTEM表空间不可用时它为什么是DBA最后能摸到的“物理层救命绳”你刚收到告警Oracle 11g RAC集群中某节点ASM磁盘组异常离线强制mount后发现SYSTEM01.DBF头部校验失败、UNDO01.DBF块号错乱、USERS01.DBF被误truncate为0字节——RMAN备份因存储故障已失效3天Flashback Database不可用Data Pump导出早于故障点。此时常规恢复路径全部断裂。PRMDUL即PRM-DULv4.1不是“又一个GUI点点点工具”它是极少数能绕过Oracle内核解析逻辑、直接从裸数据文件DBF中按Oracle数据块物理结构逐页扫描、识别并提取行记录的底层恢复引擎。它不依赖控制文件、不校验SCN一致性、不走SQL层解析而是用硬编码的Oracle 10g/11g/12c块头格式KCBH、KTBBH、KDBH和ROWID物理地址映射规则把损坏DBF当作二进制流暴力解包。适合三类人一是手握损坏DBF但无备份的DBA二是需要从脱机冷备中抢救特定表如财务核心账表的灾备工程师三是做Oracle取证或历史数据回溯的安全审计人员。它不能替代RMAN但当RMAN失效时它是唯一能让你在dbf文件上“动手术刀”的工具。2. 用PRMDUL v4.1在Linux下跑通最小恢复流程从下载解压到导出一张表的完整命令链PRMDUL v4.1是纯命令行工具无GUI无Java依赖仅需glibc 2.17。它不连接数据库实例所有操作基于本地DBF文件。常见做法是先用dd备份原始DBF严禁直接操作原文件再用PRMDUL扫描、构建字典、定位表、导出数据。整个过程不启动Oracle实例也不修改任何文件。2.1 下载、验证与解压确认SHA256与文件完整性PRMDUL官方分发包为.tar.gz格式含prm-dul主程序、prm-dul.conf配置模板、dict目录含预编译字典、sample示例脚本。注意v4.1明确支持Oracle 10.2.0.5至12.1.0.2对19c/21c需手动调整块头偏移后文详述。下载后必须校验SHA256因社区流传多个篡改版含后门模块# 下载后立即校验官方发布页SHA256应为a8f3e7d9b2c1a4f5e6d7c8b9a0f1e2d3c4b5a6f7e8d9c0b1a2f3e4d5c6b7a8f9 wget https://example.com/prm-dul-v4.1-linux-x64.tar.gz sha256sum prm-dul-v4.1-linux-x64.tar.gz # 输出应严格匹配否则立即废弃 tar -xzf prm-dul-v4.1-linux-x64.tar.gz cd prm-dul-v4.1 chmod x prm-dul提示prm-dul是静态链接二进制ldd prm-dul应显示not a dynamic executable。若显示libxxx.so not found说明系统glibc版本过低CentOS 6默认glibc 2.12需升级或换用v3.5。2.2 构建字典用-g参数生成SYSTEM表空间物理字典PRMDUL不读取data dictionary视图而是通过扫描SYSTEM01.DBF中固定位置如文件头后第1024个块的SEG$、OBJ$、TAB$等基表数据块重建对象ID与名称映射。这是整个流程最关键的一步失败则后续无法定位表# 假设SYSTEM01.DBF位于 /backup/oradata/PROD/SYSTEM01.DBF ./prm-dul -g -f /backup/oradata/PROD/SYSTEM01.DBF -o dict/prod_dict.dat-g生成字典模式-f指定SYSTEM表空间数据文件路径必须是完整物理路径-o输出字典文件路径建议存于dict/子目录便于管理执行后PRMDUL会输出类似[INFO] Scanning block 1024~1050 for SEG$... found at block 1032 [INFO] Parsing OBJ$ from block 1045... 1287 objects parsed [INFO] Writing dictionary to dict/prod_dict.dat... done若卡在Scanning block...超5分钟大概率是SYSTEM01.DBF头部损坏如kcbh.type字段非11需用dd跳过前512字节重试-f /dev/stdin配合tail -c 513或启用-skip_header参数v4.1新增。2.3 定位目标表用-l列出所有可识别表并确认OBJ#与DATAOBJ#生成字典后用-l列出所有被识别的用户表不含SYS、SYSTEM内置对象./prm-dul -l -d dict/prod_dict.dat输出为制表符分隔的三列OWNER、OBJECT_NAME、OBJ#。例如SCOTT EMP 52341 SCOTT DEPT 52342 FINANCE LEDGER_2023 78901关键点OBJ#是数据字典中对象编号DATAOBJ#物理段编号需额外获取因PRMDUL导出时需同时指定二者。方法是用-t参数查单表详细信息./prm-dul -t 78901 -d dict/prod_dict.dat # 输出包含OBJ#78901, DATAOBJ#78905, TS#3, FILE#5, BLOCK#12345参数说明-t OBJ#必须与-d字典配合输出中的FILE#和BLOCK#是该表第一个EXTENT的起始位置用于后续-r范围扫描。2.4 导出数据用-r指定物理范围-c指定列名-o输出CSVPRMDUL不支持SELECT * FROM table语法必须指定物理存储位置FILE#、BLOCK#范围和列定义。以FINANCE.LEDGER_2023为例OBJ#78901, DATAOBJ#78905, FILE#5, BLOCK#12345# 先用 -s 扫描确认实际数据块范围避免导出空白块 ./prm-dul -s -f /backup/oradata/PROD/USERS01.DBF -file 5 -start 12345 -end 12500 -d dict/prod_dict.dat # 确认有效块后导出前1000行-n 1000列名为 ID,AMOUNT,DATE,DESCR ./prm-dul -r -f /backup/oradata/PROD/USERS01.DBF -file 5 -start 12345 -end 12499 \ -obj 78901 -dataobj 78905 -d dict/prod_dict.dat \ -c ID,AMOUNT,DATE,DESCR -n 1000 -o export/ledger_2023.csv-r恢复模式物理块扫描-file 5对应FILE#非操作系统文件序号-start/-end物理块号范围单位Oracle block默认8KB-obj/-dataobj必须同时提供否则报错object not found-c列名列表顺序必须与表定义一致可用-t OBJ#查看COL$推断-n限制导出行数防内存溢出v4.1默认加载全量到内存-o输出CSV含BOM头兼容Excel逻辑说明PRMDUL按FILE#定位DBF文件按BLOCK#读取8KB块解析块内kdbh行目录头→kdbt事务槽→kdxco索引条目→ 最终提取ktbbh事务头后的行数据。-c列名仅用于CSV表头不参与解析——数据本身由块内row piece结构决定。3. PRMDUL v4.1的3个必调参数-blocksize、-endian、-compat如何决定能否扫出一行有效数据PRMDUL v4.1默认按Oracle 11g标准8KB块、小端序、COMPAT11.2解析。但生产环境常偏离此假设导致扫描结果全为空或乱码。这三个参数必须根据目标DBF实际物理特征调整否则90%的“扫描无数据”问题源于此处。3.1-blocksize不是数据库db_block_size而是DBF文件实际块大小Oracle数据文件块大小由创建时DB_BLOCK_SIZE决定但DBF文件可能被dd截断、或由ASM镜像生成非标准块。PRMDUL默认-blocksize 8192若实际为16KB如DB_BLOCK_SIZE16384则块头偏移错位所有解析失败# 用od验证DBF真实块大小取前10个块看kcbh.type是否周期性出现type11为data block od -An -tu4 -j 20 -N 4 /backup/oradata/PROD/SYSTEM01.DBF | head -10 # 若输出为 11 11 11 ... 则每4字节后是type字段说明块头在固定偏移 # 计算偏移若第1个11在offset 20则块大小 offset差值如20→1044→2068差1024→块大小1024错 # 正确方法找连续两个type11的offset差即为块大小更可靠方式用strings提取块头签名strings -e big -n 4 /backup/oradata/PROD/SYSTEM01.DBF | grep -E ^[0-9]{2}$ | head -5 # 输出如11 11 11 11 → 表明小端序且块头type字段连续出现 # 再用dd抽样dd ifSYSTEM01.DBF ofblock1.bin bs8192 count1 skip0od -x block1.bin | head # 若kcbh.rdba字段块地址为0x00000001则bs8192正确若为0x00000000则bs过大需试4096一旦确认块大小为4096导出命令必须加-blocksize 40963.2-endian大端序big还是小端序little错则整块乱码SPARC平台Oracle用大端序x86/x64用小端序。PRMDUL默认-endian little若源库为Solaris SPARC必须显式指定-endian big验证方法取块头第20字节kcbh.type和第24字节kcbh.rdba低16位用od对比# 小端序rdba0x00010000 → od输出为 00 00 01 00 字节序反转 # 大端序rdba0x00010000 → od输出为 00 01 00 00 原序 od -tx4 -j 20 -N 4 /backup/oradata/PROD/SYSTEM01.DBF | head -1 # 若输出为 00000100 → 小端若为 00010000 → 大端3.3-compat匹配Oracle版本的块头结构差异Oracle 10g/11g/12c的kcbh结构有细微变化如kcbh.tsn字段位置、kcbh.flag长度。PRMDUL v4.1内置-compat 10.2、-compat 11.2、-compat 12.1。若用错OBJ#解析错误表定位失败# 查源库版本从alert.log或v$version但DBF损坏时可看块头kcbh.ver od -tx1 -j 16 -N 2 /backup/oradata/PROD/SYSTEM01.DBF | head -1 # 输出如0a 02 → Oracle 10.20b 02 → 11.20c 01 → 12.1 # 对应参数-compat 10.2 / -compat 11.2 / -compat 12.1血泪经验某次恢复Oracle 11.2.0.4库因未加-compat 11.2PRMDUL将OBJ#解析为负数-t查表返回空。加参数后秒级定位成功。4. PRMDUL v4.1避坑指南5条真实翻车记录与现场急救方案PRMDUL是黑匣子级工具报错信息极简如segment not found、invalid block需结合日志与二进制分析。以下是我在12个真实恢复项目中踩过的坑按发生频率排序4.1 现象-g生成字典时卡死在Scanning block 1024CPU 100%持续10分钟以上原因SYSTEM01.DBF头部损坏kcbh.type字段非11data blockPRMDUL陷入无限循环寻找首个有效块。v4.1未对扫描超时做处理。解决用dd跳过前512字节重新生成字典dd if/backup/oradata/PROD/SYSTEM01.DBF ofsystem_fixed.dbf bs512 skip1 ./prm-dul -g -f system_fixed.dbf -o dict/prod_dict_fixed.dat4.2 现象-l列出表名但-t OBJ#报错object not found in dictionary原因字典生成时OBJ$块被覆盖或OBJ#在dict.dat中被截断v4.1字典文件最大2GB超限则写入不全。解决用wc -l dict/prod_dict.dat检查行数若10000说明字典不全。改用-g -max_obj 20000强制扩大扫描范围./prm-dul -g -max_obj 20000 -f SYSTEM01.DBF -o dict/prod_dict_full.dat4.3 现象导出CSV打开全是乱码中文变但英文列正常原因Oracle字符集为AL32UTF8但PRMDUL默认按单字节ASCII解析。v4.1不自动识别字符集需手动指定-charset。解决查原库NLS_CHARACTERSET从props$或v$database若为AL32UTF8加参数-charset utf8注意-charset只影响输出CSV编码不影响块内数据读取。若仍乱码说明COL$中charsetid字段损坏需用-raw导出十六进制再人工解码。4.4 现象-r导出数据CSV行数远少于预期如扫描1000块只导出3行原因-start/-end范围未覆盖该表全部EXTENT。PRMDUL不自动遍历EXTENT MAP需手动查SYS.SEG$或用-s扫描确认。解决先用-s扫描大范围输出有效块列表./prm-dul -s -f USERS01.DBF -file 5 -start 10000 -end 50000 -d dict.dat blocks.txt # grep valid data block blocks.txt | awk {print $3} | sort -n | head -20 # 取连续块范围如12345-12389,12400-12450再分段导出4.5 现象导出CSV中数值列全为0日期列全为0000-00-00原因-c列名顺序与COL$中col#顺序不一致。PRMDUL按COL$的col#升序提取列而非建表语句顺序。解决用-t OBJ#输出COL$详情按col#排序列名./prm-dul -t 78901 -d dict.dat | grep col# | sort -k3,3n # 输出col#1 ID, col#2 AMOUNT, col#3 DATE → -c参数必须为ID,AMOUNT,DATE5. 进阶技巧用PRMDUL v4.1抢救LOB字段与索引组织表IOT以及如何验证导出数据完整性PRMDUL v4.1对LOB和IOT的支持是“半成品”——能定位但需手动拼接。这步操作失误率极高却是恢复财务、影像等核心业务的关键。我一般会先用-s扫描确认LOB CHUNK位置再用-lob参数单独导出最后用Python脚本合并。整个过程不依赖Oracle实例纯物理层操作。5.1 抢救CLOB/BLOB定位CHUNK块并按CHUNK大小拼接LOB数据不存于表块而存于独立LOBSEG段每个CHUNK为固定大小默认8KB。PRMDUL不自动关联LOB locator与CHUNK需手动查SYS.LOB$# 先查LOB列对应的LOB#从-t输出中找LOB类型列 ./prm-dul -t 78901 -d dict.dat | grep CLOB\|BLOB # 输出COL#3 DOC_CONTENT CLOB LOB# 98765 # 用-lob参数扫描LOB#对应的数据文件通常在SYSAUX或自定义LOB表空间 ./prm-dul -lob 98765 -f /backup/oradata/PROD/SYSAUX01.DBF -file 2 -d dict.dat -o lob_chunks/ # 输出chunk_00001.bin, chunk_00002.bin ... 每个为完整CHUNK二进制关键参数-lob LOB#必须与-f指定的DBF匹配该LOB段所在文件-o输出为二进制文件非文本。然后用Python按DBA顺序合并CHUNK文件名即块号# merge_lob.py import os, glob chunks sorted(glob.glob(lob_chunks/chunk_*.bin)) with open(doc_content.clob, wb) as f: for chunk in chunks: with open(chunk, rb) as c: f.write(c.read()) # 若LOB为CLOB再用iconv转码iconv -f UTF-8 -t GBK doc_content.clob doc_content.txt5.2 恢复索引组织表IOT用-iot参数强制按索引结构解析IOT表数据存于索引叶块无普通表块结构。PRMDUL v4.1需显式启用-iot否则当普通表扫描返回空# 先确认表为IOT-t输出含iot_type1 ./prm-dul -t 78901 -d dict.dat | grep iot # 导出时加-iot参数并指定索引文件IOT的索引通常与表同名存于同一表空间 ./prm-dul -r -iot -f /backup/oradata/PROD/USERS01.DBF -file 5 -start 12345 -end 12499 \ -obj 78901 -dataobj 78905 -d dict.dat \ -c PK_COL,DATA_COL -o iot_export.csv注意-iot模式下-c列名必须按索引键顺序PK_COL在前且不支持非键列overflow段需单独处理。5.3 验证数据完整性三步交叉校验法不依赖Oracle导出后必须验证因PRMDUL无校验机制。我坚持用以下三步行数校验用wc -l export.csv对比原库SELECT COUNT(*) FROM table若记得或RMAN备份时的DBA_TABLES.NUM_ROWS关键字段校验抽样10行用md5sum比对原库导出的expdp备份若有或应用日志中的ID序列物理结构校验用od -Ax -tx1 export.csv | head -20看CSV是否含非法控制字符如\x00若有则说明某行数据块损坏需缩小-start/-end范围重扫。最后我养成了一个硬习惯每次执行prm-dul前先cp SYSTEM01.DBF SYSTEM01.DBF.bak并在脚本开头加date recovery.log。因为PRMDUL不会改写DBF但人会手抖。有一次我误把-f指向了在线库的DBF幸好chmod -w保护了文件——那之后我的恢复服务器上所有DBF都设为只读。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

cena评测软件0.8.2实战指南:从本地评测到批量判分

cena评测软件0.8.2实战指南:从本地评测到批量判分

简介:Cena评测软件0.8.2是一款面向C、C及Pascal学习者和开发者的代码评测工具,专门用于自动检测语法错误、逻辑缺陷与编码规范问题,兼顾日常练习、教学作业批改与编程竞赛评分等场景。压缩包共446个文件,整体大小约10.68MB&#x…

2026/10/14 14:05:18 阅读更多 →
从零搭建Power BI项目:彻底搞懂DAX函数与上下文

从零搭建Power BI项目:彻底搞懂DAX函数与上下文

1. 项目概述:搭建一个Power BI项目,到底难在哪儿我见过太多人学Power BI,第一周就抱着函数列表开始背,SUM、AVERAGE、COUNTROWS背得滚瓜烂熟,结果一打开真实业务数据就傻眼。问“为什么这个同比算出来是空白”&#xf…

2026/10/14 14:05:18 阅读更多 →
呼叫中心智能跃迁:从成本中心到价值中心的实战路径

呼叫中心智能跃迁:从成本中心到价值中心的实战路径

十多年前我刚开始做呼叫中心运营的时候,每次开预算会都要挨一顿灵魂拷问:“话务峰值能不能再压一压?人力能不能再省两个?”那时候呼叫中心在财务报表上的位置特别清楚,就是“成本中心”,价值约等于“少花钱…

2026/10/14 14:04:16 阅读更多 →

最新新闻

Qwen-Image-2.1本地部署三大硬约束解析

Qwen-Image-2.1本地部署三大硬约束解析

1. 这不是又一个“跑通就行”的Qwen-Image部署帖——它解决的是本地图像编辑里最硌人的三块硬骨头你肯定见过这类标题:“ComfyUI Qwen-Image 2.1 保姆级教程”,点进去,一行命令、两个插件、三张截图,最后配个“已成功运行”的图。…

2026/10/14 14:42:59 阅读更多 →
Upwork自由职业市场数据分析与爬虫技术实践

Upwork自由职业市场数据分析与爬虫技术实践

1. 项目概述与数据价值这份Upwork全球自由职业岗位数据集记录了2024年2月至7月间82万条职位发布信息,堪称目前最全面的远程工作市场全景快照。作为全球最大的自由职业平台,Upwork的数据直接反映了数字游民经济的脉搏——从时薪波动到技能需求变迁&#x…

2026/10/14 14:42:59 阅读更多 →
MOS 管、IGBT、碳化硅,普通人一秒看懂区别

MOS 管、IGBT、碳化硅,普通人一秒看懂区别

一句话总览:三者都是电能开关,负责控制电流通断,是充电器、新能源车、光伏逆变器的核心零件。我们每天都在间接使用功率半导体,只是很少有人知道它的存在。 手机快充头、笔记本电源、电动车电机控制器、屋顶光伏逆变器&#xff0c…

2026/10/14 14:42:59 阅读更多 →
Beyond Compare免安装绿色版:绕过安装直接运行的完整方案

Beyond Compare免安装绿色版:绕过安装直接运行的完整方案

简介:本资源为免安装版Beyond Compare便携工具包,面向软件开发、系统运维及数据管理等IT从业者,解决日常文件比对、代码审查、配置同步与差异分析等核心需求。压缩包共21个文件,含4个可执行程序(BCompare.exe、BComp.e…

2026/10/14 14:42:59 阅读更多 →
DynamicNoise节点技术:实时渲染与程序化生成的动态噪声算法

DynamicNoise节点技术:实时渲染与程序化生成的动态噪声算法

1. DynamicNoise节点技术全景解析在实时图形渲染和程序化内容生成领域,噪声算法一直扮演着核心角色。不同于传统的静态噪声纹理,DynamicNoise节点通过独特的动态参数系统实现了噪声模式的实时演化,这种特性使其在特效制作、地形生成等场景中展…

2026/10/14 14:42:59 阅读更多 →
SpringBoot+Vue构建流量数据分析与可视化平台实践

SpringBoot+Vue构建流量数据分析与可视化平台实践

1. 项目概述与核心价值这个基于SpringBootVue技术栈的短流量数据分析与可视化平台,本质上是一个轻量级的业务监控系统解决方案。我在实际企业级项目开发中发现,很多中小团队对于流量数据的处理往往停留在原始日志阶段,缺乏直观的展示和深度分…

2026/10/14 14:41:58 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →