简介涵盖用友NC57与Oracle 10g数据库完整安装流程的图文文档主要面向企业信息化实施人员、数据库管理员及初次搭建NC环境的IT运维者。正文按实战安装顺序展开先介绍Oracle 10g的软件准备、安装方法选择、主目录与数据库名设置、产品先决条件检查及口令管理随后演示通过PL/SQL Developer建立NNC_DATA01等表空间、创建NC与iufo数据库用户并授权再依次梳理NC57产品安装、NcSysConfig.bat配置、中间件启动、客户端与浏览器设置、系统管理设置等关键环节。资源共1个doc文档约2.77MB图文步骤完整可直接对照操作有效减少环境搭建中的踩坑与返工。已有345人学习下载适合需要快速掌握NC57及Oracle环境部署的入门与进阶使用者。1. NC57 与 Oracle 10g 的整体安装为什么这套老组合值得照做一遍接到一个老项目升级的活儿环境换新机器数据库定的是 Oracle 10g应用层是 NC57。这套组合今天看确实不算年轻但制造业、集团财务这类场景里存量系统跑在它上面的不在少数。第一次装的时候以为跟着安装文档走就行结果卡在响应文件配置和字符集上将近两天后来把整个流程拆开重做从环境检查到建库再到应用部署理顺了才明白这类安装真正费时间的从来不是下一步下一步而是前置规划。这篇就把 NC57 搭配 Oracle 10g 从零到能登录的完整安装过程写清楚适合刚接手实施工作、需要在测试环境快速复现一套可用系统的从业者也适合要把旧环境迁移到新主机的运维老手对照查漏。2. 安装前规划环境检查与参数预估2.1 主机准备用户、目录结构与权限分配Oracle 10g 不允许用 root 直接跑安装程序先建专门的系统用户这是安装文档里写得含糊但翻车率最高的地方。常见做法是创建 oracle 用户归入 oinstall 和 dba 两个组然后单独规划安装目录。我一般习惯把数据库软件和应用软件分目录放避免后续升级或补丁互相覆盖。groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle mkdir -p /u01/app/oracle mkdir -p /u01/app/oraInventory chown -R oracle:oinstall /u01/app/oracle chown -R oracle:oinstall /u01/app/oraInventory chmod -R 775 /u01/app/oracle chmod -R 775 /u01/app/oraInventory这段命令分成三组来看。前两行建组和用户注意 oracle 用户的主组是 oinstall附加组是 dba这样后续用 DBCA 建库时才有权限操作数据文件。中间四个 mkdir 和 chown 把安装目录的所有权交给 oracle 用户避免安装程序因为目录属主不对而中止。最后的 chmod 775 是给同组用户留写权限方便实施时多个账号协作。这里有一个关键细节/u01/app/oracle这个路径将来要作为 ORACLE_BASE后面所有配置都以它为基础一旦中途改路径响应文件里的路径全要跟着动。2.2 内核参数与系统限制配置Oracle 10g 对内核依赖较重Oracle 10g 安装程序启动时会自动检查内核参数不满足直接弹红色告警虽然有时能忽略继续装但建库后出现内存分配失败的几率很高。需要调整的集中在信号量、共享内存、文件句柄三个维度对应/etc/sysctl.conf里的 kernel.sem、kernel.shmmax 等项。fs.file-max 6553600 kernel.shmall 2097152 kernel.shmmax 2147483648 kernel.sem 250 32000 100 128 net.ipv4.ip_local_port_range 9000 65500 net.core.rmem_default 262144 net.core.rmem_max 4194304 net.core.wmem_default 262144 net.core.wmem_max 1048576改完执行sysctl -p让它立即生效。这里面需要特别说明的是kernel.shmmax它决定单个共享内存段的最大字节数一般设为物理内存的一半如果你的机器是 8GB 内存设 2147483648 也就是 2GB 偏保守可以往上调到 4294967296但不要超过物理内存。kernel.sem四个值分别对应信号量数组最大值、系统最大信号量数、每个信号量结构中的信号量个数、系统最大信号量标识符数量实例数少的话保持这组参数即可。还有一个容易漏掉的是/etc/security/limits.conf要给 oracle 用户加nofile和nproc限制否则运行时会出现 ORA-27102: out of memory 这类表面是内存、实际是进程数受限的报错。2.3 数据库软件版本与操作系统兼容性选型Oracle 10g 官方支持的 Linux 版本集中在 RHEL 4 和 RHEL 5 时代但生产上经常遇到 CentOS 6 甚至更新内核装 10g 的需求。这里我的判断维度有三个一是 10.2.0.4 之后的版本才较好支持 RHEL 5二是 CentOS 6 上装 10g 需要额外装兼容库三是如果系统内核太新安装程序的检查脚本本身可能无法识别系统版本这种情况要手动修改/etc/redhat-release临时绕过版本校验但装完记得改回来。多数实施场景我倾向于用 10.2.0.5 这个版本打补丁后稳定性比早期版本好不少而且网上能搜到的踩坑资料基本都集中在这个版本上。如果项目里 NC57 的数据库脚本对字符集有要求选型时还要确认数据库版本对应的字符集支持情况ZHS16GBK 在 10g 里没有任何限制AL32UTF8 在 10.2.0.4 之后才比较稳定。3. Oracle 10g 安装与建库从响应文件到 DBCA3.1 静默安装响应文件配置把交互项提前固化服务器在机房、没显示器的情况下静默安装几乎是唯一选择。Oracle 10g 的安装程序支持通过-silent参数配合响应文件完成全流程响应文件的核心内容是把安装类型、目录路径、组信息、是否建库等交互项提前写死。先把安装包里的enterprise.rsp模板拷出来改不要直接改原文件保留一份原始模板方便对比排错。su - oracle ./runInstaller -silent -responseFile /home/oracle/enterprise.rsp响应文件里最关键的几项是这样配置的ORACLE_HOME/u01/app/oracle/product/10.2.0/db_1 ORACLE_BASE/u01/app/oracle ORACLE_SIDNC57DB UNIX_GROUP_NAMEoinstall INSTALL_TYPEEE COMPONENT_LANGUAGESzh_CN,en nls_langSIMPLIFIED CHINESE_CHINA.ZHS16GBKORACLE_HOME指定软件安装位置不要和ORACLE_BASE放在同一层否则后续打补丁或加组件会产生路径冲突。INSTALL_TYPEEE对应企业版NC57 生产环境基本都需要企业版特性标准版在分区表和并行查询上有限制。COMPONENT_LANGUAGES里我写了中英文两种避免安装界面因为语言包缺失显示方块。nls_lang这一项决定数据库默认字符集国内项目配合 NC57 最省事的是 ZHS16GBK后面建库和导入数据脚本都按这个字符集走不会出现中文乱码。静默安装执行完结尾会提示运行两个配置脚本。这一步我见过很多实施同事直接跳过导致后续 sqlplus 起不来。正确做法是安装程序输出中会显示root.sh和orainstRoot.sh的实际路径先以 root 身份执行orainstRoot.sh初始化 inventory 目录再执行root.sh设置软件文件的属主和权限。3.2 用 DBCA 创建 NC57 所需数据库建库参数取舍软件装完后建库用 DBCA 的静默模式最稳。NC57 对数据库的依赖集中在表空间、字符集、归档模式三项建库时一次配好后面不用再折腾。DBCA 的模板我选择定制数据库而不是默认的数据仓库或事务处理因为 NC57 的脚本会自己创建业务表空间建库时只要把系统表空间和辅助表空间设置够用就行。su - oracle dbca -silent -createDatabase \ -templateName Custom_Database.dbs \ -gdbName NC57DB \ -sid NC57DB \ -systemPassword oracle123 \ -sysPassword oracle123 \ -characterSet ZHS16GBK \ -nationalCharacterSet AL16UTF16 \ -memoryPercentage 40 \ -emConfiguration NONE \ -datafileDestination /u01/app/oracle/oradata-gdbName和-sid保持一致后续 JDBC 连接串里配置的 SID 就是它。-characterSet ZHS16GBK配合前面响应文件里的 nls_lang保证数据库层和应用层字符集统一。-memoryPercentage 40表示把系统可用内存的 40% 分配给 SGA 和 PGA如果机器内存只有 4GB这个比例要降到 30留足给 NC57 中间件的余量。-emConfiguration NONE关掉 Enterprise Manager这种内部部署场景用不到 EM 的网页监控开着反而占端口和内存。建库过程中最容易出问题的是磁盘空间。DBCA 默认在datafileDestination下创建数据文件如果该目录所在分区空间不足建库会在 92% 左右报错回滚。我一般在建库前先执行df -h确认该分区至少有 6 到 8GB 剩余空间因为除了系统表空间NC57 导入数据脚本时还会在同一个目录下扩张业务表空间数据文件。3.3 数据库创建后的基础状态验证建库完成后不要急着装 NC57先用几个命令验证数据库能正常启动和连接。常见做法是用 sqlplus 以 sysdba 身份登录执行select status from v$instance;确认 open 状态再用lsnrctl status检查监听是否注册了实例。监听配置默认在$ORACLE_HOME/network/admin/listener.ora如果没有自动生成可以手动写一个最小的监听配置。这里要特别注意10g 默认监听端口 1521和中间件端口、NC57 应用端口之间不要冲突如果这台机器上还跑着其他 Java 服务先统一规划端口段。4. NC57 应用部署与数据源配置4.1 NC57 应用包结构与部署流程NC57 的交付物通常是一个包含中间件和应用代码的目录包解压后大体会看到bin、config、modules、webapps几个核心目录。部署的第一步不是启动服务而是先把中间件目录单独划出来安装文档里常说的安装目录指的就是这里。我习惯把应用放在/u01/nc57/app下和数据库目录分盘放置避免日志写满同一块盘导致数据库挂掉。mkdir -p /u01/nc57/app tar -zxvf nc57_package.tar.gz -C /u01/nc57/app chown -R ncuser:ncgroup /u01/nc57/app解压过程看似简单但有个坑tar 包如果在 Windows 下解压过再传到 Linux文件权限会乱掉必须用chown -R重新归属否则启动脚本执行时会出现 permission denied。ncuser和ncgroup是应用专用账号不要复用 oracle 用户两个进程的日志混杂在一起排查问题非常费劲。4.2 数据源配置NC57 与 Oracle 10g 的连接参数详解NC57 连接数据库的方式是通过 JNDI 数据源对应的配置文件在config目录下。核心是datasource.xml里面定义了数据库类型、连接串、账号密码、连接池大小。编辑这个文件时最需要注意的是地址格式10g 的 JDBC 连接串有两种写法一种是 SID 方式一种是 ServiceName 方式两者用错一个就连接失败。datasource nameNC57DS/name jndi-namejdbc/NC57DS/jndi-name driver-classoracle.jdbc.driver.OracleDriver/driver-class connection-urljdbc:oracle:thin:192.168.1.10:1521:NC57DB/connection-url usernamenc57user/username passwordencrypted/password max-connection50/max-connection min-connection5/min-connection timeout30/timeout /datasource连接串jdbc:oracle:thin:192.168.1.10:1521:NC57DB里最后的NC57DB是 SID 而不是 ServiceName这是使用冒号分隔的 SID 格式。如果写成jdbc:oracle:thin://192.168.1.10:1521/NC57DB就是 ServiceName 格式。NC57 的默认配置模板两种都支持但实际连接行为不同。max-connection和min-connection我设置的是 50 和 5如果并发用户超过 300这个值要调到 150 以上同时要对应增加数据库端的 processes 参数否则连接池还没满数据库先报了 ORA-12519 无可用进程。password项默认是明文生产环境建议用中间件自带的加密工具处理后再填实施阶段图省事用明文可以但上线前必须改。4.3 中间件启动与初始化数据导入数据源配置完成后进入了 NC57 安装中比较关键的初始化环节。NC57 在首次启动前需要往数据库里导入底层基础数据这一步通常由安装包里的建库脚本完成。脚本分为表结构脚本和初始数据脚本两部分。表结构脚本负责创建 NC57 所需的所有业务表、索引和存储过程初始数据脚本则写入系统预置的科目、权限和配置项。执行顺序不能反先表结构后初始数据这个顺序错了外键约束会让后续脚本批量失败。su - ncuser cd /u01/nc57/app/bin ./startup.sh启动脚本跑完后观察日志输出比看进程是否存在更重要。NC57 的日志文件分布在logs目录下核心是console.log和sql.log。首次启动时中间件会自动执行一些数据校验和升级脚本如果数据库账号密码有误或字符集不匹配console.log 会在前 50 行内报出异常。一个简单的判断方法是启动后等两分钟访问http://服务器IP:端口/nc/login.jsp如果能弹出登录页说明应用层到数据库层的链路已经打通。如果页面打不开优先看中间件进程是否还活着其次看数据库监听状态不要一上来就怀疑配置文件的连接串顺序反了容易把没问题的配置改坏。5. 安装避坑六个让实施工程师反复返工的常见问题5.1 数据库层的三个经典坑版本识别、字符集、监听注册第一个高发问题是 Oracle 10g 安装程序拒装。现象是执行 runInstaller 后界面或日志里报系统版本不受支持或直接退出原因大多是操作系统内核超过了 Oracle 10g 的官方认证范围。解决方式有两种一是临时修改/etc/redhat-release文件里的版本号为 RHEL 5 的对应描述等安装完成后再恢复原文件二是直接绕过检查给 runInstaller 加-ignoreSysPrereqs参数。前者麻烦但干净后者简单但后续可能有些组件因内核版本不匹配而失效我优先用第一种。第二个高发问题是中文乱码。现象是 NC57 登录页面能打开但单据中的中文显示为问号。原因几乎都是字符集链路上某个环节用了 UTF-8而另一个环节用 GBK。完整的字符集链路包括操作系统 locale、Oracle 的 nls_lang、数据库字符集、JDBC 连接串里的编码设置。任何一个环节不一致就会出现乱码。解决方式是统一为 ZHS16GBK检查操作系统的/etc/sysconfig/i18n里的 LANG 设置是否为 zh_CN.GBK再确认数据库字符集和响应文件里配置一致。如果数据库已经建成 UTF-8想改字符集只能重建库没有后悔药所以这一步在建库前就要想清楚。第三个高发问题是监听没注册实例。现象是lsnrctl status能看到监听在运行但是看不到 NC57DB 实例。原因通常是数据库启动时动态注册没有成功或者是 listener.ora 里配置了静态注册但参数写错。解决方式是在 listener.ora 里加一段静态注册配置包含 SID 名称和 Oracle 主目录路径加完之后重启监听再执行lsnrctl services确认实例已注册。这个坑在每次服务器重启后最容易出现因为监听先于数据库启动动态注册找不到实例。5.2 应用层与网络层的两个翻车点权限、端口应用层第一个常见问题是启动脚本执行时报权限错误。现象是 startup.sh 执行到一半中止日志显示无法创建 pid 文件或无法写入日志文件。原因多半是应用目录属主不对或者在 Windows 下解压过 tar 包导致权限位丢失。解决方式是重新执行chown -R和chmod -R 755 bin然后检查是否有残留的旧进程占用了 pid 文件有就先 kill 再启动。这个坑在测试环境里频繁出现因为实施同事经常用 Xftp 或 WinSCP 直接传压缩包文件权限在传输过程中被打乱。第二个常见问题是连接超时或 Connection refused。现象是数据库能连、应用进程也在但页面访问时提示无法连接。原因集中在三个地方一是 Linux 防火墙没放行 NC57 端口二是中间件监听地址绑定了 127.0.0.1三是 Oracle 监听只监听了 localhost 而不是实际网卡地址。解决方式是逐个排查先确认进程监听在所有网卡的端口再用telnet 服务器IP 端口测试连通性最后确认防火墙规则里放行了对应的 TCP 端口。很多实施同事一遇到连不上就先关防火墙这在测试环境可行但生产环境最好还是按端口放行。5.3 初始化数据导入失败的排查从日志反推初始化数据脚本失败的情况现象是导入过程没有报错但某些模块运行时缺表。原因大多是脚本执行了一半手动终止或者导入时数据库默认提交关闭导致部分事务回滚。解决方式是把建库脚本分模块执行每跑完一个模块就查看对应的日志文件确认成功后再继续。NC57 的建库脚本支持断点续跑只需要找到最后一个成功执行的脚本编号从下一个编号继续即可。不要从头再来那样会把已有的表全部重建耗时且容易在重复建表时报错。6. 安装完成后的快速自检三条命令加一个验收清单整套环境装完不要急着让使用方登录先花五分钟做一次快速自检。这个习惯是我在某个项目上吃了亏之后养成的那次的教训是页面能打开但报某个模块的存储过程不存在查了半天才发现初始化脚本少跑了一段。su - oracle sqlplus / as sysdba select name, open_mode from v$database; select count(*) from dba_users where usernameNC57USER;第一条命令确认数据库处于 open 状态第二条确认 NC57 用户已创建。如果 dba_users 里查不到 NC57USER说明初始化脚本没有完整执行回去找脚本重新跑。数据库层确认没问题再看应用进程和端口ps -ef | grep nc57 | grep -v grep netstat -tlnp | grep 8080端口号按实际配置调整这条命令能确认中间件进程存活并实际监听在预期端口上。很多页面打不开的问题在这一步就能定位。最后给使用方提供一个最简单的验证路径浏览器打开登录页、用预置账号登录、打开一个带有单据录入的模块做一次保存操作。保存操作能过说明从浏览器到中间件再到数据库的完整链路都已经打通。我自己现在每次做完部署都会强制走一遍这三步检查确认数据库 open、进程监听、业务保存成功三个节点全部通过才交付。这十分钟的固定动作帮我挡掉了至少五成部署完成后第一天就报修的电话。希望这份流程和坑位清单对你也有用照着做一遍能少熬几个夜。本文还有配套的精品资源点击获取