NC57与Oracle 10g安装部署实战:从系统参数到应用启动的完整避坑指南
简介这份文档面向用友NC57的部署实施人员与运维初学者聚焦Oracle 10g数据库与NC57产品的完整安装流程帮助读者在较短时间内理清从数据库准备到系统管理设置的各环节要点。资源包内共1个doc文件压缩后约2.77MB以图文步骤形式记录安装过程便于对照操作与排查问题。内容涵盖Oracle数据库安装、表空间与用户创建、NC57产品安装顺序、NcSysConfig.bat配置、中间件启动、客户端与浏览器设置以及系统管理设置等模块其中表空间脚本与用户授权语句可直接参考使用产品安装部分还按客户化、企业门户、财务会计、供应链、人力资源等模块梳理了安装次序有助于避免因顺序错误导致的部署异常。目前已有345人学习下载适合需要快速上手NC57环境搭建或复盘安装细节的技术人员参考。1. NC57 与 Oracle 10g 的安装为什么老系统部署总在第一步翻车接手一套基于 NC57 的老系统部署任务时很多人第一反应是“装个数据库、跑个安装包能有多难”。真正动手才发现Oracle 10g 这个版本对操作系统、内核参数、依赖库、字符集极其挑剔而 NC57 作为一套依赖中间件和数据库紧耦合的应用安装顺序错一步后面全是玄学报错。我见过太多人卡在监听起不来、实例连不上、NC57 启动报字符集不匹配这三件事上反复重装三四天。这篇笔记面向的是需要在一台干净服务器上把 NC57 和 Oracle 10g 完整跑起来的运维或实施人员。我会按“先立住原理、再给可复现步骤、最后讲坑”的顺序把安装路径、参数含义、失败时看哪个日志都讲清楚。你跟着做能少走至少两轮重装。需要说明的是Oracle 10g 属于较早期版本本文以常见的企业内网 Linux 环境为背景展开具体补丁号以你手头介质为准。2. 装之前先把地基打对系统环境与依赖检查2.1 为什么 Oracle 10g 对系统这么敏感Oracle 10g 的安装程序在启动时会做一轮“先决条件检查”检查项包括内核参数、内存与交换分区、临时目录空间、系统包版本、主机名解析等。它不像新版本那样宽容任何一项不达标安装界面可能直接闪退或者装到一半报“ORA-27125”“ORA-12547”这类让人摸不着头脑的错误。核心原因在于 10g 的实例进程依赖共享内存和信号量而这两者由内核参数kernel.shmmax、kernel.shmall、kernel.sem控制。如果shmmax小于 SGA 目标值实例根本起不来。另一个高频问题是主机名10g 安装时会把主机名写进监听配置和实例参数如果/etc/hosts里没有把主机名解析到本机 IP监听器启动会卡住或报“TNS-12545”。常见做法是先确认系统版本和位数再逐项核对参数。我一般会先跑一遍检查脚本把不达标项一次性改完避免装到一半回头改。2.2 系统参数与依赖包的一次性配置下面这段脚本把内核参数、用户限制、依赖包检查合并在一起适合在 CentOS 或 RHEL 系环境执行。执行前请确认你有 root 权限。#!/bin/bash # 检查并设置 Oracle 10g 所需内核参数 # 注意shmmax 建议设为物理内存的一半或 SGA 目标值以上 echo 当前内存 free -m # 设置共享内存参数 sysctl -w kernel.shmmax4294967296 sysctl -w kernel.shmall1048576 sysctl -w kernel.sem250 32000 100 128 sysctl -w fs.file-max6815744 sysctl -w net.ipv4.ip_local_port_range9000 65500 sysctl -w net.core.rmem_default262144 sysctl -w net.core.rmem_max4194304 sysctl -w net.core.wmem_default262144 sysctl -w net.core.wmem_max1048576 # 持久化写入 cat /etc/sysctl.conf EOF kernel.shmmax4294967296 kernel.shmall1048576 kernel.sem250 32000 100 128 fs.file-max6815744 net.ipv4.ip_local_port_range9000 65500 net.core.rmem_default262144 net.core.rmem_max4194304 net.core.wmem_default262144 net.core.wmem_max1048576 EOF # 设置 oracle 用户限制 cat /etc/security/limits.conf EOF oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 EOF # 检查关键依赖包 for pkg in binutils compat-libstdc-33 elfutils-libelf elfutils-libelf-devel gcc gcc-c glibc glibc-common glibc-devel libaio libaio-devel libgcc libstdc libstdc-devel make sysstat unixODBC unixODBC-devel; do rpm -q $pkg /dev/null 21 || echo 缺失: $pkg done这段脚本的逻辑分三块。第一块设置共享内存和信号量shmmax给到 4G 是为了覆盖大多数中小型 NC57 库的 SGA 需求如果你的物理内存只有 4G建议降到 2G 左右否则系统本身会吃紧。第二块把参数持久化避免重启后失效。第三块检查依赖包缺哪个补哪个其中libaio和compat-libstdc是 10g 安装程序最容易漏掉的两个。参数说明kernel.sem四个值分别是“信号量集合最大值、系统级信号量最大值、单次操作信号量最大值、信号量集合数”10g 官方建议值就是250 32000 100 128照抄即可。ip_local_port_range影响监听器和客户端连接可用的端口范围给宽一点没坏处。2.3 用户、目录与主机名解析Oracle 不允许用 root 直接安装必须建独立用户和组。目录规划上我习惯把软件目录和数据目录分开方便后续备份和迁移。# 创建用户组和用户 groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle passwd oracle # 创建目录并授权 mkdir -p /u01/app/oracle/product/10.2.0/db_1 mkdir -p /u01/app/oracle/oradata chown -R oracle:oinstall /u01 chmod -R 775 /u01 # 配置 oracle 用户环境变量 su - oracle cat ~/.bash_profile EOF export ORACLE_BASE/u01/app/oracle export ORACLE_HOME\$ORACLE_BASE/product/10.2.0/db_1 export ORACLE_SIDnc57db export PATH\$ORACLE_HOME/bin:\$PATH export LD_LIBRARY_PATH\$ORACLE_HOME/lib:/lib:/usr/lib export NLS_LANGAMERICAN_AMERICA.AL32UTF8 EOF source ~/.bash_profile这里ORACLE_SID我设成nc57db你可以按项目规范改但一旦定了后面建库、监听、NC57 连接串都要一致。NLS_LANG设成AL32UTF8是为了和 NC57 常用的 UTF-8 字符集对齐如果这里设错后面 NC57 连上库也会出现中文乱码。主机名解析这一步经常被跳过。执行hostname拿到主机名然后确认/etc/hosts里有对应记录hostname # 假设输出 nc57-app grep nc57-app /etc/hosts || echo 127.0.0.1 nc57-app /etc/hosts没有这条记录监听器配置时用主机名会解析失败表现为lsnrctl start卡住或报 TNS 错误。3. 静默安装 Oracle 10g响应文件与建库命令3.1 为什么推荐静默安装而不是图形界面图形界面安装依赖 X11 转发在内网服务器上要么没装桌面环境要么转发卡顿装到一半断连就得重来。静默安装用响应文件把所有制项提前写好一条命令跑完可重复、可记录、可审计。对于 NC57 这种需要反复部署的场景静默方式明显更稳。静默安装分两步先跑数据库软件安装再跑建库脚本。两步都用响应文件驱动。3.2 数据库软件安装的响应文件与执行把安装介质解压到某个目录比如/soft/database然后在里面找到response/db_install.rsp复制一份修改。关键项如下# 复制并编辑响应文件 cd /soft/database/response cp db_install.rsp db_install_custom.rsp vi db_install_custom.rsp需要改的项oracle.install.optionINSTALL_DB_SWONLY UNIX_GROUP_NAMEoinstall INVENTORY_LOCATION/u01/app/oracle/oraInventory ORACLE_HOME/u01/app/oracle/product/10.2.0/db_1 ORACLE_BASE/u01/app/oracle oracle.install.db.InstallEditionEE oracle.install.db.isCustomInstallfalse oracle.install.db.DBA_GROUPdba oracle.install.db.OPER_GROUPdbaINSTALL_DB_SWONLY表示只装软件不建库建库我们单独做这样出问题好定位。InstallEdition选 EE 是企业版如果你的介质是标准版就改成 SE。执行安装cd /soft/database ./runInstaller -silent -responseFile /soft/database/response/db_install_custom.rsp -ignorePrereq-ignorePrereq是跳过先决条件检查只有在 2.2 节参数都确认过的情况下才建议加否则可能装出一个跑不起来的实例。安装过程中会提示你用 root 执行两个脚本按提示执行/u01/app/oracle/oraInventory/orainstRoot.sh /u01/app/oracle/product/10.2.0/db_1/root.sh执行完回安装窗口按回车继续。看到Successfully Setup Software就说明软件层装好了。3.3 用 DBCA 静默建库与监听配置建库用dbca的静默模式。先准备一个建库响应文件关键参数包括库名、字符集、内存分配、数据文件路径。# 生成建库响应文件模板 dbca -silent -generateScripts -templateName General_Purpose.dbc -gdbName nc57db -sysPassword oracle123 -systemPassword oracle123 -responseFile /tmp/dbca.rsp然后编辑/tmp/dbca.rsp重点确认gdbNamenc57db sidnc57db characterSetAL32UTF8 nationalCharacterSetAL16UTF16 totalMemory2048 datafileDestination/u01/app/oracle/oradatatotalMemory单位是 MB按你服务器内存给NC57 库一般 2G 到 4G 够用。characterSet必须是AL32UTF8和前面NLS_LANG对齐。执行建库dbca -silent -responseFile /tmp/dbca.rsp建库完成后配置监听。10g 的监听配置文件在$ORACLE_HOME/network/admin/listener.ora常见内容LISTENER (DESCRIPTION_LIST (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST nc57-app)(PORT 1521)) ) ) SID_LIST_LISTENER (SID_LIST (SID_DESC (SID_NAME nc57db) (ORACLE_HOME /u01/app/oracle/product/10.2.0/db_1) ) )启动监听并验证lsnrctl start lsnrctl status # 用 sqlplus 验证实例可连 sqlplus system/oracle123nc57db as sysdbalsnrctl status里能看到nc57db状态为 READY就说明数据库层通了。4. NC57 应用侧安装连接串、字符集与启动顺序4.1 NC57 与 Oracle 的对接点在哪NC57 作为应用层和 Oracle 的对接集中在三处JDBC 连接串、字符集、事务隔离级别。连接串里如果 SID 写错或监听端口不对应用启动直接报连接拒绝。字符集不一致则表现为登录后中文变问号。事务隔离级别如果和数据库默认值冲突批量操作时可能出现锁等待。安装 NC57 前先确认它的中间件版本和 JDK 版本要求。常见做法是查安装介质里的说明文件按它给的 JDK 版本准备环境不要用系统自带的 JDK 硬套。4.2 配置数据源与启动应用假设 NC57 部署在/opt/nc57配置文件在/opt/nc57/conf/datasource.properties典型内容jdbc.driveroracle.jdbc.driver.OracleDriver jdbc.urljdbc:oracle:thin:nc57-app:1521:nc57db jdbc.usernamenc57user jdbc.passwordnc57pass jdbc.initialSize5 jdbc.maxActive50 jdbc.validationQuerySELECT 1 FROM DUALjdbc.url里主机:端口:SID三段必须和监听配置完全一致。validationQuery用SELECT 1 FROM DUAL是 Oracle 的标准探活语句别写成 MySQL 的写法。启动前先在数据库里建好应用用户并授权-- 用 sysdba 登录后执行 CREATE USER nc57user IDENTIFIED BY nc57pass; GRANT CONNECT, RESOURCE TO nc57user; GRANT CREATE SESSION, CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER TO nc57user; ALTER USER nc57user DEFAULT TABLESPACE users QUOTA UNLIMITED ON users;然后启动 NC57cd /opt/nc57/bin ./startup.sh tail -f /opt/nc57/logs/catalina.out日志里看到数据源初始化成功、没有ORA-开头的错误就说明应用层连上了。4.3 启动顺序与依赖关系正确的启动顺序是先起监听再起数据库实例最后起 NC57。如果服务器重启这个顺序不能乱。我一般会写一个启动脚本固化顺序#!/bin/bash # 按顺序启动 Oracle 监听、实例、NC57 su - oracle -c lsnrctl start su - oracle -c sqlplus / as sysdba EOF startup exit EOF sleep 10 su - nc57 -c /opt/nc57/bin/startup.shsleep 10是给实例留出完全打开的时间实例没完全起来就启应用连接池会报一堆超时。这个等待时间按你服务器性能调机械盘环境建议给到 20 秒。5. 安装过程中最容易踩的五个坑5.1 坑一监听启动报 TNS-12545现象lsnrctl start卡住十几秒后报TNS-12545: Connect failed because target host or object does not exist。原因listener.ora里HOST写的是主机名但/etc/hosts没有把该主机名解析到本机 IP或者解析到了错误的地址。解决执行hostname确认主机名在/etc/hosts里加一行本机IP 主机名重启监听。如果有多网卡确认解析到的是你希望监听绑定的那个 IP。5.2 坑二建库时报 ORA-27125现象dbca建库到创建实例阶段报ORA-27125: unable to create shared memory segment。原因kernel.shmmax小于 SGA 目标值或者kernel.shmall不够。10g 对共享内存的检查比新版本严格。解决把shmmax调到 SGA 目标值的 1.5 倍以上shmall按页大小换算后给足。改完sysctl -p生效重新建库。如果物理内存本身不够就调低totalMemory参数。5.3 坑三NC57 连上库但中文乱码现象NC57 能启动登录也正常但页面里的中文显示成问号或方块。原因数据库字符集、NLS_LANG、JDBC 连接参数三者不一致。常见情况是库建成了ZHS16GBK而NLS_LANG设的是AL32UTF8。解决查库字符集SELECT * FROM nls_database_parameters WHERE parameterNLS_CHARACTERSET;把NLS_LANG和 JDBC 连接串里的字符集参数改成一致。如果库已经建成 GBK 且数据不多重建库改成AL32UTF8更彻底。5.4 坑四root.sh 执行报权限错误现象安装软件后执行root.sh报Failed to create /etc/oraInst.loc或类似权限错误。原因oraInventory目录属主不对或者之前装过 Oracle 残留了旧的 inventory 文件。解决确认/u01/app/oracle/oraInventory属主是oracle:oinstall删除残留的/etc/oraInst.loc和/etc/oratab后重新执行。如果之前装过其他版本 Oracle建议先清理干净再装 10g。5.5 坑五应用启动报连接池耗尽现象NC57 启动后运行一段时间报Connection pool exhausted或大量ORA-00020: maximum number of processes exceeded。原因jdbc.maxActive设得过大或者应用有连接泄漏加上 Oracle 的processes参数默认值偏小。解决先查SHOW PARAMETER processes;按需调大并重启实例。同时检查应用代码里是否有未关闭的连接。maxActive不要超过processes的 70%留出余量给后台进程。6. 装完之后怎么验证三条命令加一个习惯安装完成不等于交付完成。我一般用三条命令做最终验证再养成一个看日志的习惯。第一条验证监听和实例状态lsnrctl status | grep -E nc57db|READY sqlplus -s system/oracle123nc57db EOF SELECT status FROM v\$instance; SELECT name, open_mode FROM v\$database; EOFv$instance返回 OPENv$database返回 READ WRITE说明数据库层完全就绪。第二条验证字符集一致性SELECT parameter, value FROM nls_database_parameters WHERE parameter IN (NLS_CHARACTERSET,NLS_NCHAR_CHARACTERSET);对照NLS_LANG和 JDBC 连接串三者字符集必须能互相转换且不丢字符。第三条验证 NC57 应用层连通性curl -s -o /dev/null -w %{http_code} http://localhost:8080/nc57/health返回 200 说明应用层健康检查通过。如果没有健康检查接口就看catalina.out里最近 100 行有没有ERROR或ORA-。一个习惯每次重启服务器后按第 4.3 节的顺序手动走一遍确认监听、实例、应用依次起来。我见过太多人图省事把三个服务设成同时自启结果实例还没打开应用就抢连接日志里一堆超时排查半天才发现是启动顺序问题。这个顺序习惯坚持下来能省掉大量“重启后应用起不来”的后悔药。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

机器人学导论教案实战:从位姿到雅可比的完整学习路线

机器人学导论教案实战:从位姿到雅可比的完整学习路线

简介:机器人学导论是连接机械工程与智能控制的桥梁,而位姿描述、坐标变换、正逆运动学与雅可比矩阵则是其中最核心的基础概念。很多学习者拿到教学PPT后,往往只是收藏却难以真正内化,原因在于缺少一条从公式推导到仿真验证的完整路…

2026/10/9 14:38:05 阅读更多 →
Linux下手动搭建Hadoop 3.3.6集群实战指南

Linux下手动搭建Hadoop 3.3.6集群实战指南

简介:本资源是一份面向大数据初学者与高校实验教学的Hadoop集群搭建实操指南,聚焦Linux环境下从零构建分布式Hadoop 2.7集群的核心流程,解决环境配置复杂、节点通信异常、服务启动失败等典型实践痛点。文档为单文件Word格式(.doc&…

2026/10/9 14:38:05 阅读更多 →
agent 时代,动脑子的是什么

agent 时代,动脑子的是什么

结论先行:执行类的事,已经不太需要你动脑子了。 部署一个 deepseek、跑通一个 nanoGPT、把 Ray 在小场景里跑起来——这些事以前能吃掉你好几天,现在有官方文档、有别人踩过的坑、有 agent 帮你写,多半能搞定。真正还要你动脑子的…

2026/10/9 14:38:05 阅读更多 →

最新新闻

金融数据库规范运维:审计回溯、变更闭环与合规落地

金融数据库规范运维:审计回溯、变更闭环与合规落地

简介:本资源《金融数据库规范运维.pdf》是一份面向金融行业DBA、运维工程师及技术管理者的核心实践指南,聚焦双态运维(稳态敏态)落地难题,系统解决千级数据库规模下的流程标准化、人员容灾与知识传承等关键挑战。文档深…

2026/10/9 15:13:48 阅读更多 →
派单系统源码实战:订单状态机与并发派单避坑指南

派单系统源码实战:订单状态机与并发派单避坑指南

简介:这套Java派单系统平台源码完整版内置Android端客户端与项目说明,专为Java后端和Android开发者设计,覆盖订单分配、任务派发、用户管理、状态跟踪等业务场景,并借鉴了Upwork式的工作流管理机制,支持后台调度与移动…

2026/10/9 15:13:48 阅读更多 →
t3code:打造本地代码资产库的离线复用CLI工具实践

t3code:打造本地代码资产库的离线复用CLI工具实践

1. 为什么要做 t3code:从旧代码库到个人代码资产库如果你和我一样,手上有好几个维护了大半年的项目,你一定遇到过这种感觉:新项目里要写一个功能,脑子马上反应“这个我在老项目里写过了”,然后打开老仓库&a…

2026/10/9 15:13:47 阅读更多 →
Java+Android派单系统源码解析:从双端架构到状态机设计与部署避坑

Java+Android派单系统源码解析:从双端架构到状态机设计与部署避坑

简介:一套基于Java的派单系统完整源码,附带Android客户端工程及项目说明文档,适合希望掌握Java后端与Android移动端全栈开发的开发者。系统可应用于外卖、家政、跑腿等场景的订单分配与调度,包含任务发布、接单、状态跟踪、用户管…

2026/10/9 15:13:47 阅读更多 →
OllyDbg逆向工程入门:单步跟踪、断点设置与授权逻辑分析实战

OllyDbg逆向工程入门:单步跟踪、断点设置与授权逻辑分析实战

简介:OllyDbg 1.09C 汉化版是一款面向逆向工程初学者与安全分析人员的汇编级调试工具,主要解决程序动态跟踪、底层指令分析与软件调试中的语言障碍问题。压缩包共13个文件,约676KB,包含可执行主程序、5个功能扩展dll、5个说明文档…

2026/10/9 15:13:47 阅读更多 →
全国湖泊湿地shp数据实战:坐标系、叠加分析与PostGIS空间查询

全国湖泊湿地shp数据实战:坐标系、叠加分析与PostGIS空间查询

简介:这份资源面向GIS从业者、地理信息专业学生及从事国土空间规划、水文生态研究的技术人员,提供全国尺度的湖泊、水库、沼泽湿地与滨海湿地矢量数据,可用于专题制图、空间分析与可视化表达。压缩包共31个文件,约11.3MB&#xff…

2026/10/9 15:12:47 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 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/8 21:13:17 阅读更多 →
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/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练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/9 6:17:20 阅读更多 →