资讯动态

NC57 部署实战:Oracle 10g 安装、建库与中间件对接避坑指南

发布时间:2026/10/9 13:57:18 来源:尧图企业网站定制
简介这份资源面向用友NC57的部署与运维人员提供NC57产品安装与Oracle 10g数据库安装的完整操作文档适合初次接触NC57实施、需要独立完成环境搭建的初中级技术人员参考。压缩包内共1个doc文件大小约2.77MB以图文步骤形式记录安装全过程便于按章节对照操作。内容涵盖Oracle数据库安装、表空间与用户创建、NC57产品安装顺序、NcSysConfig.bat配置、中间件启动、客户端安装与浏览器设置、系统管理设置等环节并给出NNC_DATA、NNC_INDEX等表空间及NC、iufo用户的创建脚本以及nc_uap、nc_portal、nc_fi、nc_scm等模块的安装次序说明可帮助读者理清部署流程、规避顺序错误。目前已有345人学习下载适合作为NC57环境搭建的实操参考。1. NC57 部署前夜为什么老 ERP 的安装总在数据库这关卡住接手一套 NC57 的部署任务十有八九不是被应用本身难住而是卡在 Oracle 10g 那一层。NC57 是早期用友 NC 系列里装机量很大的一版典型的三层结构客户端、应用服务器、数据库服务器数据库侧官方长期绑定 Oracle10g 是那个年代最常见的搭配。问题在于这套组合的安装文档往往散落在几个压缩包里步骤跳跃、参数默认值又和现在的机器环境对不上新手照着走很容易在监听、字符集、表空间这三处翻车。这篇笔记面向的是要在一台干净服务器上把 NC57 加 Oracle 10g 跑起来的实施和运维我会把安装顺序、关键参数、以及那些文档里不写但一定会遇到的坑拆开讲。整套流程的核心逻辑只有一句先把数据库这层的地基打平再让 NC57 的中间件去连它顺序反了就是无穷无尽的连接报错。2. Oracle 10g 安装从系统检查到建库的完整链路2.1 安装前的系统层准备Oracle 10g 对操作系统的要求比较挑尤其是内核参数和依赖包。常见做法是先确认系统版本再逐项核对。以 64 位 Linux 为例安装前需要处理的是共享内存、信号量、文件句柄这几组内核参数以及 libaio、compat-libstdc 这类依赖库。这些不提前配好runInstaller 会在前置检查阶段直接报错退出而且报错信息往往只给一个笼统的失败提示让人摸不着头脑。# 查看当前内核参数重点看 shmmax、shmall、sem sysctl -a | grep -E shmmax|shmall|sem|file-max # 临时调整共享内存段上限重启失效正式环境写进 /etc/sysctl.conf sysctl -w kernel.shmmax4294967295 sysctl -w kernel.shmall2097152 sysctl -w fs.file-max6815744 # 安装 10g 依赖库缺一个 runInstaller 都可能起不来 yum install -y libaio libaio-devel compat-libstdc-33 \ elfutils-libelf-devel gcc make binutils这里 shmmax 设成接近 4G 是个经验值它决定单个共享内存段的最大值Oracle 的 SGA 要靠它。shmall 是共享内存总页数和 shmmax 配合。file-max 关系到 Oracle 能打开的文件描述符数量装库阶段和运行阶段都会用到。依赖库这块compat-libstdc-33 是最容易被漏掉的一个缺了它 runInstaller 的图形界面可能直接闪退而日志里只留一行看不懂的加载失败。系统层还有两件事必须做一是创建 oracle 用户和 oinstall、dba 用户组二是给 oracle 用户配好环境变量。环境变量里 ORACLE_BASE、ORACLE_HOME、ORACLE_SID 三个值一旦定下来后面建库、建监听、配 NC57 连接串都要和它保持一致中途改会引发一连串路径错乱。# 创建用户组和用户 groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle passwd oracle # 配置 oracle 用户环境变量写入 ~/.bash_profile 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:$LD_LIBRARY_PATHORACLE_SID 这里取 nc57db是为了和 NC57 的库对应上方便后面识别。ORACLE_HOME 的路径层级是 10g 的惯例product/10.2.0/db_1 这一串不要随意简化某些脚本会按这个结构去找文件。环境变量配完记得 source 一下并且用 oracle 用户登录验证别用 root 直接跑安装。2.2 runInstaller 图形安装与静默安装的选择Oracle 10g 的安装器支持图形和静默两种模式。有桌面环境就图形装直观纯命令行服务器就得用静默模式靠一个 response 文件把参数喂进去。图形模式在现在的远程终端上经常因为 X11 转发问题起不来所以静默模式反而是更稳的选择。# 静默安装先准备 response 文件再执行 # response 文件关键项db_install.rsp 片段 # UNIX_GROUP_NAMEoinstall # ORACLE_HOME/u01/app/oracle/product/10.2.0/db_1 # ORACLE_BASE/u01/app/oracle # oracle.install.db.config.starterdb.typeGENERAL_PURPOSE # oracle.install.db.config.starterdb.globalDBNamenc57db # oracle.install.db.config.starterdb.SIDnc57db # oracle.install.db.config.starterdb.characterSetZHS16GBK # 执行静默安装 cd /path/to/database ./runInstaller -silent -responseFile /path/to/db_install.rsp -ignoreSysPrereqsresponse 文件里 characterSet 这一项是重中之重。NC57 的库通常要求 ZHS16GBK 或 AL32UTF8选错了后面导入 NC57 的初始化脚本会出现中文乱码而且字符集在建库后极难修改基本等于重来。ignoreSysPrereqs 是跳过系统前置检查只在确认系统参数已手动配好的情况下用否则会把真正的问题掩盖掉。安装过程中会提示用 root 执行两个脚本root.sh 和 orainstRoot.sh这两个脚本负责设置权限和注册服务必须执行跳过会导致监听起不来。安装完成后用 sqlplus 连一下确认实例能正常启动。# 验证安装 su - oracle sqlplus / as sysdba SQL select instance_name, status from v$instance; SQL select value from v$parameter where namedb_name;2.3 建库、建表空间与 NC57 专用用户实例装好只是有了软件还得建库。10g 用 dbca 建库同样分图形和静默。建库时要定字符集、内存分配、归档模式。NC57 的库一般不开归档也能跑但生产环境建议开方便出问题时恢复。建完库接下来是给 NC57 准备表空间和用户。NC57 的数据量不小表空间要单独规划别全塞进 system 或 users 里。常见做法是建一个数据表空间加一个索引表空间再建一个临时表空间。-- 建表空间数据文件和大小按实际磁盘规划 CREATE TABLESPACE nc57_data DATAFILE /u01/app/oracle/oradata/nc57db/nc57_data01.dbf SIZE 2G AUTOEXTEND ON NEXT 256M MAXSIZE 20G; CREATE TABLESPACE nc57_index DATAFILE /u01/app/oracle/oradata/nc57db/nc57_index01.dbf SIZE 1G AUTOEXTEND ON NEXT 128M MAXSIZE 10G; -- 建 NC57 专用用户并授权 CREATE USER nc57 IDENTIFIED BY nc57pwd DEFAULT TABLESPACE nc57_data TEMPORARY TABLESPACE temp; GRANT CONNECT, RESOURCE, DBA TO nc57; GRANT UNLIMITED TABLESPACE TO nc57;AUTOEXTEND ON 是让数据文件在写满后自动扩展省得半夜被表空间撑爆告警叫醒。MAXSIZE 给个上限防止单个文件无限膨胀把磁盘吃光。授权里给了 DBA是因为 NC57 的初始化脚本会建大量对象、视图、同义词权限不够会中途报错。生产环境更严谨的做法是按需授权但实施阶段给 DBA 能少踩很多权限坑。建完用户把 NC57 提供的初始化 SQL 脚本用 nc57 用户导入这一步会创建 NC57 运行所需的全部表结构。导入前确认脚本的字符集和库的字符集一致否则中文数据会变成问号。3. NC57 应用侧部署中间件配置与数据库对接3.1 NC57 中间件的目录结构与启动顺序NC57 的应用侧通常是一个 Java 中间件加一堆部署包。目录结构上常见的是把中间件、NC57 的 war 包、以及配置文件分开放。启动顺序有讲究先起数据库监听再起中间件最后起 NC57 应用顺序错了应用会因为连不上库而启动失败。# 启动数据库监听 lsnrctl start # 确认监听状态看到 READY 才算正常 lsnrctl status # 启动中间件以常见 Java 中间件为例具体命令按实际产品 cd /opt/nc57/middleware/bin ./startServer.sh # 部署并启动 NC57 应用 cd /opt/nc57/app ./startup.shlsnrctl status 里要能看到数据库实例被注册进来如果只显示监听本身而没实例说明数据库的 local_listener 或 service_names 没配好NC57 连过去会报 ORA-12514。中间件启动后看日志有没有 OutOfMemoryNC57 对内存有一定要求JVM 堆给小了会在启动阶段就崩。3.2 数据源配置让 NC57 找到 OracleNC57 连数据库靠的是数据源配置一般在中间件的配置文件里指向 Oracle 的 JDBC 连接串。这里要填对主机、端口、SID 或服务名、用户名密码。10g 的 JDBC 驱动是 ojdbc14 那一代驱动版本和数据库版本不匹配也会连不上。# NC57 数据源配置示例按实际中间件格式调整 jdbc.driveroracle.jdbc.driver.OracleDriver jdbc.urljdbc:oracle:thin:192.168.1.100:1521:nc57db jdbc.usernamenc57 jdbc.passwordnc57pwd jdbc.maxActive50 jdbc.maxIdle10jdbc.url 里冒号分隔的格式是 thin 驱动专用最后一段 nc57db 是 SID。如果用的是服务名而不是 SID要写成 //主机:端口/服务名 的形式这两种写法混用是常见错误。maxActive 控制最大连接数NC57 并发高的时候这个值给小了会出现等待连接超时给大了又可能把数据库连接数占满一般按实际用户数估算。配完数据源重启中间件然后从 NC57 客户端登录测试。能正常登录并打开一个业务模块说明应用和数据库的链路通了。3.3 字符集与中文乱码的排查中文乱码是 NC57 部署里最烦人的一类问题根源通常在字符集不一致。数据库字符集、NC57 应用配置的字符集、客户端操作系统的字符集三者要统一。常见组合是数据库 ZHS16GBK应用侧也配 GBK客户端在 Windows 上默认 GBK这样最省事。-- 查数据库字符集 SELECT * FROM nls_database_parameters WHERE parameter LIKE %CHARACTERSET%; -- 查客户端会话字符集 SELECT * FROM nls_session_parameters WHERE parameter LIKE %CHARACTERSET%;如果数据库是 AL32UTF8 而应用配了 GBK中文就会乱。这种情况要么改应用配置要么在连接串里加字符集参数。改数据库字符集风险极高不到万不得已不要动。排查乱码时先确认是哪一层出的问题数据库里存的就是乱码还是存对了但显示乱码两者的处理方向完全不同。4. 避坑与排查NC57 加 Oracle 10g 部署的五个高频翻车点4.1 监听起来了但 NC57 连不上报 ORA-12514现象是 lsnrctl status 显示监听正常但 NC57 启动时报 ORA-12514提示监听器不认识连接串里的服务。原因通常是数据库实例没有向监听注册或者连接串里写的 SID 和实际实例名不一致。10g 里实例注册依赖 service_names 和 local_listener 参数这两个没配好监听就只知道自己的存在不知道后面有个库。解决办法是先确认实例名再检查注册情况。用 sqlplus 连上后查 v$instance 拿到真实实例名然后看 lsnrctl status 的输出里有没有这个实例。没有的话在数据库里执行 alter system register 手动触发注册或者检查 service_names 参数。连接串里的 SID 必须和实例名完全一致大小写敏感。4.2 建库时字符集选错导入脚本后全是问号现象是 NC57 初始化脚本导入成功但业务表里的中文全变成问号或乱码。原因是建库时字符集选了默认的 WE8ISO8859P1 或别的非中文集而 NC57 的数据是 GBK 编码。字符集在建库后基本无法无损修改改起来要导出重建代价极大。解决只能从源头防建库时明确指定 characterSet 为 ZHS16GBK 或 AL32UTF8并且和 NC57 脚本的编码对齐。已经建错的库只能导出数据、重建库、再导入中间还要处理编码转换。所以建库那一步的字符集选择是整个部署里最不能将就的一环。4.3 表空间没开自动扩展跑一段时间后写入失败现象是系统上线初期正常运行几周后突然报 ORA-01653 或 ORA-01654提示无法扩展表。原因是建表空间时没开 AUTOEXTEND或者开了但 MAXSIZE 设得太小数据涨上来就写不进去了。解决办法是建表空间时就带上 AUTOEXTEND ON 和合理的 MAXSIZE并且定期监控表空间使用率。已经出问题的用 alter database datafile 加自动扩展或加大文件。监控可以写个简单脚本定时查 dba_free_space使用率超过 80% 就告警别等撑爆了才发现。4.4 中间件 JVM 内存给小NC57 启动到一半就崩现象是中间件启动日志走到一半停住或者报 OutOfMemoryErrorNC57 应用起不来。原因是 JVM 堆内存分配不足NC57 加载的类和初始化数据量不小默认堆往往不够。解决办法是调大中间件的 JVM 参数常见的是 -Xms 和 -Xmx初始堆和最大堆设成一样能避免动态扩展带来的抖动。具体给多少要看机器内存和并发量一般起步 2G用户多就往上加。调完重启中间件观察启动日志是否走完。4.5 客户端能连但打开模块报错权限或同义词缺失现象是 NC57 客户端能登录但点开某个业务模块就报对象不存在或权限不足。原因是初始化脚本导入时部分对象没建成功或者 nc57 用户的权限不够缺了某些系统视图的访问权。解决办法是重新核对初始化脚本的执行日志看有没有报错的语句被跳过。权限方面确认 nc57 用户有 DBA 或至少有所需对象的访问权。同义词缺失的话检查脚本里创建 public synonym 的部分是否执行成功。这类问题排查起来要有耐心逐条比对脚本和实际对象。5. 部署后的验证与一个省事的检查习惯装完之后别急着交付走一遍验证流程能省掉后面很多返工。验证分三层数据库层、中间件层、应用层。数据库层确认实例状态、监听注册、字符集、表空间使用率中间件层确认进程在、端口在听、日志无异常应用层确认能登录、能打开核心模块、能跑一笔简单业务。# 数据库层快速自检 su - oracle sqlplus -s / as sysdba EOF select instance_name, status from v$instance; select name, open_mode from v$database; select tablespace_name, round(sum(bytes)/1024/1024) mb from dba_free_space group by tablespace_name; EOF # 监听与端口 lsnrctl status | grep -i ready netstat -tlnp | grep 1521 # 中间件与应用进程 ps -ef | grep -i nc57 | grep -v grep这段自检脚本我一般会存成一个文件每次部署完跑一遍输出正常才往下走。sqlplus 那段用 heredoc 把几条查询一次喂进去省得反复登录。监听看 READY端口看 1521 在不在听进程看 NC57 相关的 Java 进程有没有起来。三层都过了再让业务方登录试。还有一个习惯值得养成把这次部署用到的所有参数记下来包括 ORACLE_HOME、SID、字符集、表空间名、数据源连接串、JVM 参数。下次遇到同类环境直接对照不用再从头猜。NC57 加 Oracle 10g 这套组合虽然老但只要把数据库这层的地基打平应用侧的配置其实不复杂。真正让人翻车的从来不是技术难度而是那些文档里没写、又恰好被你撞上的默认值。从那以后我每次建库前都强制自己先确认字符集和表空间策略宁可多花十分钟也不愿事后花两天重建。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑