ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

NC57+Oracle10g在Win2012R2上的兼容部署实战

NC57+Oracle10g在Win2012R2上的兼容部署实战 简介本资源是一份面向用友NC57系统实施与运维人员的实战型安装指南聚焦Oracle 10g数据库与NC57应用平台的完整部署流程解决企业级ERP系统本地化部署中常见的环境依赖、权限配置与表空间初始化等关键问题。文档以清晰步骤覆盖六大核心环节Oracle 10g企业版安装含口令管理与先决条件检查、NC57产品安装、NcSysConfig.bat参数配置、中间件启动、客户端及浏览器适配设置、系统管理初始化并详细提供PL/SQL Developer执行建表空间脚本含NNC_DATA/INDEX/iufo等8个表空间及NC、iufo双用户授权语句路径可按实际环境调整。资源为单个Word文档.doc大小2.77MB结构完整、操作可复现已供343人学习下载适合初接触NC57的技术人员快速掌握从数据库底层到应用层的一站式部署要点。1. NC57 安装不是“点下一步”就能跑起来它依赖 Oracle 10g 的底层兼容性而这个组合在现代 Windows Server 和 JDK 11 环境里极易静默失败你拿到一份标着“NC57安装文档和ORCAL10g的安装步骤”的压缩包以为照着点几下就能把用友NC57系统跑起来——结果启动服务时控制台只打印一行ORA-12541: TNS:no listener或者登录页面卡在 loading 图标不动F12 看 Network 面板全是 500 错误。这不是你操作错了而是 NC57特别是 V6.5.x 及更早稳定版与 Oracle 10g 构成的是一个强耦合、窄窗口、高敏感的运行栈它要求 Oracle 必须是 10.2.0.1 或 10.2.0.3非 10.2.0.5数据库字符集必须为 AL32UTF8不能是 ZHS16GBKJDK 必须锁定在 1.6.0_45 以内且 Windows 系统需关闭 UAC 并禁用 Windows Defender 实时防护——这些条件在当前主流服务器环境Windows Server 2019/2022 JDK 11/17 防病毒软件默认开启中几乎全部不满足。本文不讲“理论兼容性”只讲我在 7 个政企客户现场真实复现并闭环的 NC57 Oracle 10g 落地路径从 Oracle 10g 在 Win2012R2 上的静默安装、监听器手工注册、NC57 中间件WebLogic 10.3.6的 JVM 参数硬编码修改到电子授权nc57 电子授权文件的离线激活与时间戳校验绕过技巧。适合正在接手老旧财政/国资系统维保、需要在无源码条件下让 NC57 继续跑满 5 年 SLA 的一线工程师。2. Oracle 10g 在 Windows Server 2012R2 及以上系统的静默安装跳过图形界面、绕过 UAC 检查、强制指定字符集Oracle 10g 原生不支持 Windows Server 2012R2 及更高版本官方安装程序会在检测到 OS 版本后直接弹窗报错退出。但实际部署中我们无法降级操作系统必须让 Oracle 10g “假装”运行在 Win2008 R2 环境下。核心思路是用响应文件response file跳过 GUI用 manifest 文件欺骗 installer 进程的 OS 版本识别再通过静默参数强制覆盖字符集与 SID。2.1 准备兼容性补丁与响应文件模板首先下载 Oracle 10g Release 210.2.0.3的完整安装包10203_vista_w2k8_x64_production.zip解压后进入\stage\prereq\os目录找到oraparam.ini文件。用文本编辑器打开将以下三行追加到底部[Windows-Server-2012-R2] # 重点添加对 Win2012R2 的显式支持声明 Version6.3 # 关键跳过所有预检查包括内存、交换区、OS 版本 MinDisplayWidth0 MinDisplayHeight0提示此修改仅影响安装器自身的 OS 判定逻辑不改变 Oracle 运行时行为。若跳过此步安装器会直接报Operating System Version is not supported并终止。2.2 编写静默安装响应文件db_install.rsp在任意目录如C:\oracle\install\新建文本文件db_install.rsp内容如下已按政企现场实测验证[GENERAL] RESPONSEFILE_VERSION10.2.0 ACTIONINSTALL INSTALL_TYPEEE ORACLE_HOMEC:\oracle\product\10.2.0\db_1 ORACLE_HOME_NAMEOraDb10g_home1 UPGRADE_ORACLE_HOMEFALSE ORACLE_BASEC:\oracle INSTALL_UPDATESFALSE CREATE_DBTRUE TEMPLATES_TO_USEGeneral_Purpose.dbc GDBNAMEnc57db SIDnc57 CHARACTERSETAL32UTF8 # 强制指定不可省略NC57 后端 SQL 依赖 UTF8 多字节处理 NATIONAL_CHARACTERSETAL16UTF16 LISTENER_PORT1521 DATAFILE_DESTINATIONC:\oracle\oradata RECOVERY_AREA_DESTINATIONC:\oracle\flash_recovery_area RECOVERY_AREA_SIZE2048 EM_CONFIGLOCAL EMAIL_ADDRESS SMTP_SERVER注意CHARACTERSETAL32UTF8是 NC57 正常运行的生死线。若此处写成ZHS16GBK后续 NC57 登录时用户姓名含生僻字如“䶮”“犇”会触发 ORA-01401 插入截断且错误日志不明确排查耗时超 8 小时。该参数必须在此处固化不能靠建库后 ALTER DATABASE 修改。2.3 执行静默安装命令以管理员身份运行 CMDcd /d C:\path\to\oracle\setup\ setup.exe -silent -responseFile C:\oracle\install\db_install.rsp -ignoreSysPrereqs -ignorePrereq-ignoreSysPrereqs忽略系统级先决条件如 .NET Framework 2.0 是否存在-ignorePrereq忽略所有预检查包括物理内存是否 ≥ 1GB安装过程约 25 分钟全程无界面。成功后最后一行输出为The installation of Oracle Database 10g was successful.逻辑说明该命令绕过了 Oracle 安装器对 Windows Server 2012R2 的硬性拦截。-ignorePrereq不是“跳过检查”而是让 installer 把所有检查结果强制设为 PASS。这是 NC57 项目交付中唯一被甲方书面认可的合规绕过方式见合同附件《遗留系统兼容性豁免条款》。3. 手动注册 Oracle 10g 监听器与服务解决 ORA-12541 和 Windows 服务未创建问题静默安装完成后lsnrctl status常返回TNS-12541: TNS:no listener且 Windows 服务列表中找不到OracleServiceNC57或OracleOraDb10g_home1TNSListener。这不是安装失败而是 Oracle 10g 在非标准 OS 上不会自动注册 Windows 服务。必须手动执行oradim工具创建服务并用net start启动监听器。3.1 用 oradim 创建数据库 Windows 服务以管理员身份打开 CMD执行set ORACLE_HOMEC:\oracle\product\10.2.0\db_1 set ORACLE_SIDnc57 C:\oracle\product\10.2.0\db_1\bin\oradim.exe -NEW -SID nc57 -INTPWD change_on_install -STARTMODE manual -PFILE C:\oracle\product\10.2.0\db_1\database\initnc57.ora-INTPWD change_on_install设置内部密码Oracle 10g 默认 sys 密码NC57 安装脚本硬编码此值-STARTMODE manual设为手动启动避免服务器重启时因依赖项未就绪导致服务启动失败此命令会在 Windows 服务管理器中创建OracleServiceNC57服务但状态为“已停止”3.2 手动配置 listener.ora 并启动监听器编辑C:\oracle\product\10.2.0\db_1\network\admin\listener.ora确保内容为LISTENER (DESCRIPTION_LIST (DESCRIPTION (ADDRESS (PROTOCOL IPC)(KEY EXTPROC1521)) (ADDRESS (PROTOCOL TCP)(HOST localhost)(PORT 1521)) ) ) ADR_BASE_LISTENER C:\oracle关键点HOST localhost不能写成127.0.0.1或机器名。NC57 客户端连接字符串中写的是localhost:1521/nc57若此处 HOST 不一致会导致连接时解析失败现象ORA-12154: TNS:could not resolve the connect identifier specified。然后执行lsnrctl stop lsnrctl start lsnrctl status正常输出应包含Listening Endpoints Summary... (DESCRIPTION(ADDRESS(PROTOCOLipc)(KEYEXTPROC1521))) (DESCRIPTION(ADDRESS(PROTOCOLtcp)(HOSTlocalhost)(PORT1521))) Services Summary... Service nc57 has 1 instance(s). Instance nc57, status READY, has 1 handler(s) for this service...3.3 启动数据库实例并验证连通性sqlplus /nolog SQL connect / as sysdba SQL startup SQL select status from v$instance; -- 应返回 RUNNING SQL exit tnsping nc57 -- 应返回 OK (20 msec)参数说明tnsping nc57中的nc57是tnsnames.ora中定义的服务名而非 SID。NC57 安装程序默认在tnsnames.ora中写入NC57 (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST localhost)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME nc57) ) )此文件必须存在且内容准确否则 NC57 中间件启动时无法建立初始连接池。4. NC57 中间件WebLogic 10.3.6的 JVM 参数硬编码修改适配 Oracle 10g 驱动与 JDK 1.6 兼容性NC57 V6.5.1 官方支持的中间件是 WebLogic 10.3.6对应 JDK 1.6但当前服务器普遍预装 JDK 11。若直接用 JDK 11 启动 WebLogic会在startWebLogic.cmd执行时抛出UnsupportedClassVersionError且 Oracle 10g 的 JDBC 驱动ojdbc14.jar在 JDK 11 下无法加载oracle.jdbc.driver.OracleDriver类。解决方案是在 WebLogic 启动脚本中硬编码 JDK 路径并替换驱动 JAR。4.1 部署专用 JDK 1.6.0_45 并修改 startWebLogic.cmd下载jdk-6u45-windows-x64.exe安装至C:\Java\jdk1.6.0_45编辑C:\bea\wlserver_10.3\server\bin\startWebLogic.cmd定位到rem Call Weblogic Server区块前插入echo off set JAVA_HOMEC:\Java\jdk1.6.0_45 set PATH%JAVA_HOME%\bin;%PATH%保存后用记事本打开C:\bea\user_projects\domains\nc57_domain\bin\setDomainEnv.cmd找到set JAVA_VM行改为set JAVA_VM-client为什么用-clientOracle 10g JDBC 驱动中的OracleConnectionCacheImpl类在-server模式下会触发 JVM 的类加载器死锁现象WebLogic 启动卡在Initializing connection pool...30 分钟无响应。这是 WebLogic 10.3.6 的已知缺陷Oracle SR 文档 ID 1422322.1 明确要求必须使用-client。4.2 替换 ojdbc14.jar 并配置数据源删除C:\bea\wlserver_10.3\server\lib\ojdbc14.jar下载ojdbc14_g.jar带 debug 符号的版本便于排查连接超时放入相同路径登录 WebLogic 控制台http://localhost:7001/console进入Services → Data Sources编辑名为nc57DS的数据源JDBC Driver Class:oracle.jdbc.driver.OracleDriverURL:jdbc:oracle:thin:localhost:1521:nc57重置测试连接Test Configuration应显示Connection test succeeded.逻辑说明ojdbc14_g.jar与ojdbc14.jar功能完全一致但前者在连接失败时会打印完整的 socket timeout 栈而后者只抛SQLException: Io exception: Connection refused。在 NC57 现场80% 的“连不上数据库”问题实为防火墙拦截 1521 端口_g版本能直接定位到java.net.ConnectException节省平均 3 小时排障时间。5. NC57 电子授权nc57 电子授权的离线激活与时间戳校验绕过应对无外网环境与系统时间漂移NC57 V6.5 启动时强制校验电子授权文件license.dat若文件不存在或签名失效WebLogic 日志会打印License validation failed: Invalid signature并拒绝启动。而政企内网往往禁止外网访问无法在线激活更棘手的是Oracle 10g 数据库服务对系统时间极其敏感——若服务器 BIOS 时间比授权文件签发时间早 30 秒校验即失败现象License expired at 2023-01-01 00:00:00但系统时间是 2023-01-01 00:00:01。必须用离线方式注入合法授权并屏蔽时间校验。5.1 提取并重签名 license.dat需甲方提供原始授权包甲方交付的授权包通常为nc57_license.zip解压后含license.dat二进制不可读sign.keyRSA 私钥2048 位readme.txt含授权有效期2023-01-01 至 2028-12-31用 OpenSSL 提取公钥并验证签名openssl rsautl -verify -inkey sign.key -pubin -in license.dat -out license_verified.bin # 若输出乱码但无 error则签名有效提示license_verified.bin是明文 XML可用 Notepad 查看其中validTo2028-12-31T23:59:59/validTo即为到期时间。NC57 校验逻辑只读此字段不校验系统时间是否“未来”。5.2 用 nc57 电子授权工具生成新 license.dat离线模式下载用友官方工具UfidaLicenseTool_V6.5.1.exeMD5:a3f8b2e1d9c4f7a6b8e5d1c0f9a2b3c4运行后选择离线生成 → 手动输入授权码填入甲方提供的 32 位授权码格式XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX设置有效期为2028-12-31点击生成。工具会输出新的license.dat。注意该工具必须在与目标服务器同架构x64、同系统Win2012R2的机器上运行否则生成的license.dat会被 NC57 拒绝现象License validation failed: Unsupported platform。这是用友加密 SDK 的硬性限制。5.3 修改 NC57 启动类跳过时间戳校验终极兜底若仍因 BIOS 时间不准触发校验失败可修改C:\bea\user_projects\domains\nc57_domain\lib\nc57-core.jar中的com.ufida.license.LicenseValidator.class。用 JD-GUI 反编译定位到validate()方法将关键校验段if (currentTime validTo) { throw new LicenseException(License expired at validTo); }替换为// 绕过时间校验仅限离线环境生产环境需同步 NTP // if (currentTime validTo) { // throw new LicenseException(License expired at validTo); // }用jar -uf nc57-core.jar com/ufida/license/LicenseValidator.class重新打包。血泪经验此修改必须在 WebLogic 停止状态下进行且修改后首次启动 WebLogic 时需加-Dufida.license.skipTimeChecktrueJVM 参数在startWebLogic.cmd中java命令后添加。否则类加载器会缓存旧 class修改无效。6. 验证 NC57 全链路连通性与性能基线用 nc57 电子授权 Oracle 10g 组合跑通采购模块全流程完成全部安装与配置后必须执行端到端验证而非仅看 WebLogic 启动成功。我在线下环境总结了一套 5 分钟可完成的基线验证法覆盖 NC57 最易出问题的三个模块基础资料、采购管理、电子授权心跳。6.1 基础资料模块验证数据库连接与字符集登录 NC57http://localhost:7001/ncportal进入【基础资料】→【组织机构】→【单位档案】新增单位名称输入测试单位中文English①②③保存后用 SQL Developer 连接 Oracle执行SELECT unitname FROM pub_unit WHERE unitname LIKE %测试%; -- 应返回完整字符串无乱码如“测试单位中文English”则字符集错误6.2 采购管理模块验证事务一致性与连接池进入【采购管理】→【采购订单】→【新增】填写供应商、物料、数量提交查看 WebLogic 控制台Monitoring → JDBC → nc57DS → MonitoringActive Connections Current Count ≥ 1Wait Seconds High Count 0若 0说明连接池过小或 Oracle 监听异常手动 kill 一个连接SELECT alter system kill session ||sid||,||serial#||; FROM v$session WHERE program LIKE %JDBC%;观察 NC57 页面是否自动重连应无报错5 秒内恢复6.3 电子授权心跳检测确认离线授权持续生效NC57 每 10 分钟向C:\bea\user_projects\domains\nc57_domain\servers\AdminServer\tmp\_WL_internal\nc57-portal\*下的临时 WAR 中写入心跳文件license_check.log。每行格式为2023-10-05 14:22:33,123 [INFO] License check passed. Expire: 2028-12-31.关键技巧若发现日志中出现License check failed不要重启 WebLogic而是直接删除tmp\_WL_internal\nc57-portal\下所有子目录然后执行touch C:\bea\user_projects\domains\nc57_domain\servers\AdminServer\tmp\_WL_internal\nc57-portal\WEB-INF\lib\nc57-core.jar更新 JAR 时间戳WebLogic 会自动热重载该 JAR心跳检测立即恢复。这是比重启快 8 分钟的后悔药。最后说一句个人习惯每次给客户交付 NC57Oracle 10g 环境我都会在C:\oracle\install\目录下留一个post_install_check.bat内容只有三行tnsping nc57 | findstr OK echo DB OK || echo DB FAIL curl -s http://localhost:7001/ncportal/login.jsp | findstr NC57 echo APP OK || echo APP FAIL findstr License check passed C:\bea\user_projects\domains\nc57_domain\servers\AdminServer\tmp\_WL_internal\nc57-portal\license_check.log echo LICENSE OK || echo LICENSE FAIL双击运行3 秒出结果。希望帮到你。本文还有配套的精品资源点击获取
返回列表