简介:涵盖用友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 安装与建库:从响应文件到 DBCA
3.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_SID=NC57DB UNIX_GROUP_NAME=oinstall INSTALL_TYPE=EE COMPONENT_LANGUAGES=zh_CN,en nls_lang="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"ORACLE_HOME指定软件安装位置,不要和ORACLE_BASE放在同一层,否则后续打补丁或加组件会产生路径冲突。INSTALL_TYPE=EE对应企业版,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> <name>NC57DS</name> <jndi-name>jdbc/NC57DS</jndi-name> <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> <connection-url>jdbc:oracle:thin:@192.168.1.10:1521:NC57DB</connection-url> <username>nc57user</username> <password>encrypted</password> <max-connection>50</max-connection> <min-connection>5</min-connection> <timeout>30</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 username='NC57USER';第一条命令确认数据库处于 open 状态,第二条确认 NC57 用户已创建。如果 dba_users 里查不到 NC57USER,说明初始化脚本没有完整执行,回去找脚本重新跑。
数据库层确认没问题,再看应用进程和端口:
ps -ef | grep nc57 | grep -v grep netstat -tlnp | grep 8080端口号按实际配置调整,这条命令能确认中间件进程存活并实际监听在预期端口上。很多页面打不开的问题在这一步就能定位。
最后给使用方提供一个最简单的验证路径:浏览器打开登录页、用预置账号登录、打开一个带有单据录入的模块做一次保存操作。保存操作能过,说明从浏览器到中间件再到数据库的完整链路都已经打通。我自己现在每次做完部署,都会强制走一遍这三步检查,确认数据库 open、进程监听、业务保存成功三个节点全部通过才交付。这十分钟的固定动作,帮我挡掉了至少五成"部署完成后第一天就报修"的电话。希望这份流程和坑位清单对你也有用,照着做一遍,能少熬几个夜。
本文还有配套的精品资源,点击获取