ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

用友NC65本地环境搭建:Oracle+JDK+NC65全链路实操指南

用友NC65本地环境搭建:Oracle+JDK+NC65全链路实操指南

简介:本资源是一份面向用友NC65初学者与实施顾问的实操型安装指南,专为自我学习、沙箱测试及NCC高版本环境搭建设计,有效解决数据库配置、中间件部署与系统初始化等关键实施难点。压缩包为单文件DOC文档(933KB),内容结构清晰,完整覆盖Oracle数据库安装(含管理员权限操作、全局数据库名与口令设定)、表空间与用户授权SQL脚本、NC65产品安装路径规范、sysconfig.bat数据源配置与EJB部署、admin.jsp后台初始化建库全流程,以及License授权提示等核心环节。已有3436人学习下载,手册步骤详尽、命令可直接复用,附带典型路径示例与参数说明,特别适合零基础顾问快速掌握NC65本地部署全链路,规避中文路径、密码不一致、权限缺失等高频实操陷阱。

1. 用友NC65本地测试环境搭建:为什么新手实施顾问必须亲手跑通这整套 Oracle+NC65 链路?

你不是在部署生产系统,而是在构建一个可反复拆解、验证逻辑、理解数据流向的「最小可信沙盒」——这就是这份《用友NC65安装操作手册》的真实定位。它不教你怎么签单、怎么写蓝图,只解决一个卡住90%新人的硬骨头:在自己笔记本上,从零拉起一个能登录/admin.jsp、能进建库向导、能执行SQL脚本的NC65可交互环境。很多人卡在第一步:Oracle装完连不上,sys密码记混了,表空间路径带中文报错,或者setup.bat双击没反应——这些都不是配置问题,是环境链路断裂。手册里写的“取消勾选”“默认即可”“存放路径(例 D:\NCDATA...)”,背后全是血泪经验凝结的边界条件:比如Oracle 12c以上版本对Windows服务名大小写的敏感、NC65对JDK 1.8.0_202+的硬性依赖、以及sysconfig.bat启动时CMD窗口一闪而过的CLASSPATH加载失败。它面向的是刚接手模拟项目X的实施顾问A同学,目标明确:3小时内完成本地可访问的NC65基础容器,为后续UAP开发、工作流调试、凭证模板验证打下不可绕过的地基。这不是理论推演,是把安装包、数据库、中间件、配置文件四者拧成一股绳的实操契约。

2. Oracle数据库安装:从管理员权限到sys/system密码的四层校验闭环

2.1 为什么必须用Oracle?NC65底层数据契约的刚性约束

用友NC65并非抽象兼容所有RDBMS。其UAP平台元数据引擎、多租户隔离机制、以及核心财务模块的事务一致性保障,深度绑定Oracle的PL/SQL语法特性、ROWID物理寻址能力、以及ASM存储管理逻辑。某高校实验室曾用MySQL 8.0强行适配NC65 6.5.1,结果在“期末结账”场景触发死锁检测超时,根源在于MySQL的间隙锁(Gap Lock)与NC65自定义锁表逻辑冲突。因此,手册开篇强调Oracle,不是偏好,而是技术栈契约——就像Java程序不能脱离JVM运行一样。当前主流适配版本为Oracle 11g R2(11.2.0.4)和Oracle 12c R1(12.1.0.2),后者需额外关闭CDB/PDB模式以兼容NC65的单实例连接模型。

2.2 管理员身份运行:Windows UAC策略下的服务注入关键点

右键选择“以管理员身份运行”并非形式主义。Oracle安装程序在setup.exe阶段需向Windows注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\写入OracleServiceORCL服务项,并在HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY_OraDB12Home1下创建实例参数。若权限不足,服务注册失败,后续sqlplus / as sysdba将提示ORA-12560: TNS:protocol adapter error。实测发现:Win10 20H2之后版本,即使用户属Administrators组,未显式勾选“以管理员身份运行”,服务项仅写入当前用户配置单元(HKCU),导致服务管理器中不可见。解决方案:在快捷方式属性中勾选“高级→以管理员身份运行”,或直接在PowerShell中执行Start-Process setup.exe -Verb RunAs。

2.3 全局数据库名与管理口令:贯穿NC65全生命周期的密钥链

步骤1.6要求的“全局数据库名”(如orcl.example.com)和“管理口令”(即sys/system密码),是NC65数据源配置的根证书。它被硬编码在三个位置:

  • Oracle监听器配置文件listener.ora中的SID_LIST_LISTENER段;
  • NC65home/config/ncserver.properties的jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl;
  • 建库向导执行SQL脚本时,@connect username/password@orcl中的TNS别名。
    若全局数据库名含下划线(如nc_orcl),Oracle 12c会拒绝创建服务;若口令含特殊字符#或$,sysconfig.bat读取时因CMD变量解析规则导致截断。血泪经验:口令强制使用Nc65Test2024!格式(大写+数字+符号),全局数据库名严格采用小写字母+数字组合(如ncdb65),避免任何分隔符。

2.4 安装完成后的密码二次确认:Oracle密码策略与NC65连接池的隐式耦合

安装末尾弹出的密码设置窗口,本质是执行ALTER USER sys IDENTIFIED BY "xxx";和ALTER USER system IDENTIFIED BY "xxx";。此处存在双重陷阱:

  1. Oracle密码复杂度策略:12c默认启用VERIFY_FUNCTION_11G,要求密码至少8位、含大小写字母、数字、特殊字符。若设为12345678,安装程序会静默失败,日志位于%ORACLE_HOME%\cfgtoollogs\dbca\orcl\trace.log;
  2. NC65连接池预检机制:sysconfig.bat在“测试连接”时,会用sys用户尝试建立连接并执行SELECT 1 FROM DUAL。若密码与1.6步不一致,测试必然失败,但错误提示仅为“连接超时”,实际是ORA-01017(用户名/密码无效)。

提示:安装完成后立即验证,打开CMD,执行sqlplus /nolog→CONNECT sys/"Nc65Test2024!" AS SYSDBA→SELECT name FROM v$database;。返回NCDB65即成功。

3. 表空间与用户创建:用SQL*Plus精准控制NC65数据物理布局

3.1 表空间路径的绝对化陷阱:Windows路径分隔符与Oracle数据文件解析差异

创建表空间语句中'D:\NCDATA\NNC_DATA01.DBF'看似简单,实则暗藏玄机。Oracle在Windows下解析数据文件路径时,将反斜杠\视为转义字符。若路径写为'D:\NCDATA\NNC_DATA01.DBF',Oracle实际识别为D:[NCDATA[NNC_DATA01.DBF([为ASCII 27),导致ORA-01119: error in creating database file。正确写法必须使用双反斜杠\\或正斜杠/:

CREATE TABLESPACE NNC_DATA01 DATAFILE 'D:\\NCDATA\\NNC_DATA01.DBF' SIZE 500M AUTOEXTEND ON NEXT 50M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K; -- 或 CREATE TABLESPACE NNC_DATA01 DATAFILE 'D:/NCDATA/NNC_DATA01.DBF' SIZE 500M AUTOEXTEND ON NEXT 50M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K;

实测发现:D:/NCDATA/比D:\\NCDATA\\更稳定,因Oracle内部路径解析器对正斜杠兼容性更强。同时,D:\NCDATA\目录必须由管理员手动创建,且Oracle服务账户(如NT AUTHORITY\SYSTEM)需对该目录有完全控制权限,否则数据文件初始化失败。

3.2 数据与索引表空间分离:NC65性能基线的物理层设计

NC65要求NNC_DATA01(数据)与NNC_INDEX01(索引)物理分离,这并非教条,而是应对高并发事务的IO优化策略。当财务凭证批量生成时,GL_VOUCHER主表写入与IDX_GL_VOUCHER_BILLNO索引更新产生磁盘争用。分离后,Windows磁盘调度器可将数据文件IO与索引文件IO分配至不同物理扇区。关键参数解读:

  • SIZE 500M:初始分配500MB,避免频繁扩展影响性能;
  • AUTOEXTEND ON NEXT 50M:每次自动扩展50MB,平衡碎片与空间浪费;
  • UNIFORM SIZE 256K:数据表空间使用256KB统一区大小,适配NC65单据主表平均记录长度;
  • UNIFORM SIZE 128K:索引表空间使用128KB,因索引节点更小,高频分裂需更细粒度管理。

注意:EXTENT MANAGEMENT LOCAL是强制要求,NC65建库脚本依赖本地管理表空间(LMT)的位图管理,若误用字典管理(DMT),建库向导执行create table时抛出ORA-01450: maximum key length (6398) exceeded。

3.3 用户授权的最小权限原则:DBA角色与NC65运行时的精确匹配

GRANT connect,dba to 用户名;表面看是赋予DBA权限,实则NC65运行时仅需以下子集:

权限NC65模块用途是否必需
CREATE SESSION建立数据库连接✅
CREATE TABLE建库向导创建基础表✅
CREATE VIEWUAP平台动态视图生成✅
CREATE SEQUENCE单据编号序列生成✅
UNLIMITED TABLESPACE避免表空间配额不足中断建库✅
SELECT ANY DICTIONARY元数据扫描(如字段类型映射)✅
ALTER SYSTEM动态调整SGA参数(NC65启动时调用)⚠️(仅首次启动需)
因此,更安全的授权语句为:
CREATE USER nc65user IDENTIFIED BY "Nc65Test2024!" DEFAULT TABLESPACE nnc_data01 TEMPORARY TABLESPACE temp; GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, CREATE SEQUENCE, UNLIMITED TABLESPACE, SELECT ANY DICTIONARY TO nc65user; -- 首次启动后,可回收ALTER SYSTEM权限 REVOKE ALTER SYSTEM FROM nc65user;

此举规避DBA权限滥用风险,符合等保2.0对应用账号权限最小化的要求。

4. NC65安装与数据源配置:从setup.bat到admin.jsp的七步链路验证

4.1 setup.bat执行失败的三类根因:JDK、路径、环境变量的三角校验

双击setup.bat无响应或报错Error: Could not find or load main class com.yonyou.nc.setup.Main,本质是Java环境链路断裂。需按顺序排查:

  1. JDK版本硬约束:NC65 6.5仅支持JDK 1.8.0_202至1.8.0_333。高于此范围(如JDK 11+)因javax.xml.bind包移除导致UAP编译器崩溃;低于此范围(如1.8.0_181)因TLS 1.2协议缺陷无法连接许可服务器。验证命令:java -version输出必须为java version "1.8.0_291"格式;
  2. 安装路径禁中文:setup.bat内部调用jar -xf解压临时文件,Windows CMD对UTF-8路径解析异常。若路径为D:\用友软件\NC65\,解压后class文件名乱码,Main类无法加载。必须改为D:\YonyouNC65\;
  3. JAVA_HOME指向错误:setup.bat首行set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_291,若系统存在多个JDK,需确保该路径下bin\java.exe真实存在,且%JAVA_HOME%\jre\lib\rt.jar可读取。

4.2 sysconfig.bat数据源配置:四个必填字段与测试连接的底层握手

home/bin/sysconfig.bat启动后,进入“数据源”页,需填写:

字段值示例技术含义
数据库类型Oracle决定JDBC驱动类oracle.jdbc.driver.OracleDriver加载
数据库名称ncdb65对应Oracle实例SID,必须与tnsnames.ora中ncdb65=段一致
主机地址127.0.0.1NC65服务器与Oracle在同一机器时,禁用localhost(DNS解析延迟)
端口号1521Oracle监听器默认端口,若修改需同步更新listener.ora
用户名/密码nc65user / Nc65Test2024!必须与3.3步创建的用户完全一致
点击“测试连接”时,NC65后台执行:
  1. 加载ojdbc8.jar(NC65 6.5自带);
  2. 构造URL:jdbc:oracle:thin:@127.0.0.1:1521:ncdb65;
  3. 调用DriverManager.getConnection(),触发Oracle TCP三次握手;
  4. 成功后执行SELECT SYSDATE FROM DUAL验证会话活性。
    若测试失败,查看home/log/sysconfig.log,重点搜索SQLException堆栈,90%问题源于端口不通或SID不匹配。

4.3 EJB部署与startup.bat启动:NC65服务进程的双引擎架构

NC65采用“EJB容器+Web容器”双进程模型:

  • deploy ejb:将home\ejb\*.jar部署至内置WebLogic Server(NC65 6.5集成WL 12.1.3),生成home\domains\ncdomain\servers\ncserver\tmp\_WL_user\下的展开目录;
  • startup.bat:启动home\domains\ncdomain\startWebLogic.cmd,加载ncserver实例,暴露HTTP端口(默认8080)。
    关键验证点:启动后检查home\domains\ncdomain\servers\ncserver\logs\ncserver.log,出现####<2024-06-15T10:23:45.123+0800> <Notice> <WebLogicServer> <BEA-000360> <Server started in RUNNING mode>即成功。若端口被占用,修改home\domains\ncdomain\config\config.xml中<listen-port>8080</listen-port>为8081,重启生效。

5. 常见问题排查:从ORA-12560到admin.jsp白屏的五条血泪路径

5.1 现象:双击sysconfig.bat后CMD窗口闪退,无任何日志

原因:sysconfig.bat依赖home\bin\yonyou.jar,而该jar包内MANIFEST.MF指定Class-Path: lib/commons-lang3-3.4.jar lib/ojdbc8.jar ...。若home\lib\目录下缺失任一jar(如commons-lang3-3.4.jar被误删),Java ClassLoader抛出NoClassDefFoundError,CMD捕获异常后立即退出。
解决:用7-Zip打开yonyou.jar,检查META-INF/MANIFEST.MF中Class-Path列出的所有jar是否存在于home\lib\。缺失则从原安装包NC65\Disk1\stage\Components\com.yonyou.nc.base\*.*目录复制补全。

5.2 现象:浏览器访问http://127.0.0.1:8080/admin.jsp显示404

原因:startup.bat启动成功,但NC65 Web应用未部署。常见于deploy ejb步骤未执行,或执行后未重启startup.bat。NC65的EJB组件是Web应用前置依赖,未部署则/admin.jsp资源不存在。
解决:确认home\domains\ncdomain\servers\ncserver\upload\目录下存在nc.ear文件;若无,则重新运行sysconfig.bat→“部署ejb”→勾选全部→“确定”;部署完成后,必须关闭startup.bat窗口,再双击重启。

5.3 现象:admin.jsp登录root/super后,建库向导点击“执行”无响应,日志报ORA-00942: table or view does not exist

原因:建库向导执行的SQL脚本(如home\sql\oracle\create_nc_tables.sql)需在nc65user用户下运行,但脚本中CREATE TABLE gl_voucher未加schema前缀。Oracle默认在当前用户模式下创建,若nc65user未被授予CREATE ANY TABLE,则表建在SYS模式下,后续SELECT * FROM gl_voucher因未指定nc65user.gl_voucher而报错。
解决:编辑create_nc_tables.sql,在每条CREATE TABLE前添加nc65user.前缀,如CREATE TABLE nc65user.gl_voucher (...);或在sysconfig.bat中“建库向导”页,将“数据库用户”字段明确填为nc65user。

5.4 现象:Oracle服务正常,但NC65启动日志持续刷Could not connect to database

原因:Windows防火墙拦截了1521端口。Oracle监听器虽在运行,但外部连接被阻断。telnet 127.0.0.1 1521返回“无法打开到主机的连接”。
解决:打开“Windows Defender 防火墙→高级设置→入站规则”,新建规则:协议类型TCP,特定本地端口1521,操作“允许连接”,配置文件勾选“域、专用、公用”。

5.5 现象:建库向导执行完毕,但登录admin.jsp后系统编码为空,无法保存

原因:home\config\ncserver.properties中system.code=值为空,而NC65强制校验该值非空。该值在建库向导最后一步“系统基本信息”中输入,若输入框为空直接点“保存”,配置未写入。
解决:手动编辑ncserver.properties,添加system.code=NC65TEST;然后重启startup.bat;登录后进入“系统管理→系统设置→系统编码”,此时可正常修改并保存。

6. License激活与建库脚本定制:让NC65从Demo走向可验证业务逻辑的临门一脚

6.1 license获取:离线激活的三步密钥交换协议

NC65的sysconfig.bat→License页点击“获取授权”,实际执行离线激活流程:

  1. 硬件指纹生成:读取本机MAC地址(首个非虚拟网卡)、CPU序列号、硬盘卷标,经SHA-256哈希生成16位设备码(如A1B2C3D4E5F67890);
  2. 请求文件生成:将设备码、NC65版本号(6.5.1)、申请日期打包为XML,保存为license_request.xml;
  3. 授权文件注入:将license_request.xml提交至用友授权服务器(或某公司内部许可中心),返回license_response.lic,拖入sysconfig.bat窗口即完成绑定。

注意:若更换主板或重装系统,设备码变更,需重新申请。测试环境建议申请“开发版License”,有效期1年,支持全部模块但限制并发用户数≤5。

6.2 建库脚本的定向裁剪:跳过非核心模块加速测试迭代

NC65建库向导默认执行home\sql\oracle\all_in_one.sql,耗时30分钟以上。对于只想验证采购模块的A同学,可定制精简脚本:

  1. 备份原脚本;
  2. 删除无关模块段落:注释掉-- HR模块、-- 资产模块、-- 人力模块对应的所有@create_xxx.sql语句;
  3. 保留核心链路:@create_core.sql(基础框架)、@create_pur.sql(采购)、@create_inv.sql(库存)、@create_fi.sql(财务);
  4. 在all_in_one.sql末尾添加COMMIT;确保事务提交。
    执行后,数据库体积从12GB降至3.2GB,建库时间缩短至8分钟,且不影响采购订单→入库单→应付单的端到端流程验证。

6.3 验证环境可用性的黄金三指标

完成全部步骤后,不急于写代码,先用三步验证沙盒健康度:

  1. 数据库层:sqlplus nc65user/Nc65Test2024!@127.0.0.1:1521:ncdb65→SELECT COUNT(*) FROM nc65user.gl_voucher;返回0(空表正常);
  2. 应用层:curl -I http://127.0.0.1:8080/admin.jsp返回HTTP/1.1 200 OK;
  3. 业务层:登录admin.jsp → 进入“系统管理→建库向导” → 点击“查看已安装产品”,确认采购管理、库存管理状态为“已安装”。
    这三步覆盖了Oracle监听器、NC65 Web容器、UAP模块注册三层,任一失败即说明链路未贯通。从那以后我每次搭建新环境,都强制走一遍这三步再开始写UAP代码——省去后面80%的“为什么我的按钮点不动”的排查时间。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进