☰
NC57与Oracle 10g安装部署实战:从系统参数到应用启动的完整避坑指南
2026/10/9 14:37:56 网站建设 项目流程

简介:这份文档面向用友NC57的部署实施人员与运维初学者,聚焦Oracle 10g数据库与NC57产品的完整安装流程,帮助读者在较短时间内理清从数据库准备到系统管理设置的各环节要点。资源包内共1个doc文件,压缩后约2.77MB,以图文步骤形式记录安装过程,便于对照操作与排查问题。内容涵盖Oracle数据库安装、表空间与用户创建、NC57产品安装顺序、NcSysConfig.bat配置、中间件启动、客户端与浏览器设置以及系统管理设置等模块,其中表空间脚本与用户授权语句可直接参考使用,产品安装部分还按客户化、企业门户、财务会计、供应链、人力资源等模块梳理了安装次序,有助于避免因顺序错误导致的部署异常。目前已有345人学习下载,适合需要快速上手NC57环境搭建或复盘安装细节的技术人员参考。

1. NC57 与 Oracle 10g 的安装:为什么老系统部署总在第一步翻车

接手一套基于 NC57 的老系统部署任务时,很多人第一反应是“装个数据库、跑个安装包,能有多难”。真正动手才发现,Oracle 10g 这个版本对操作系统、内核参数、依赖库、字符集极其挑剔,而 NC57 作为一套依赖中间件和数据库紧耦合的应用,安装顺序错一步,后面全是玄学报错。我见过太多人卡在监听起不来、实例连不上、NC57 启动报字符集不匹配这三件事上,反复重装三四天。

这篇笔记面向的是需要在一台干净服务器上把 NC57 和 Oracle 10g 完整跑起来的运维或实施人员。我会按“先立住原理、再给可复现步骤、最后讲坑”的顺序,把安装路径、参数含义、失败时看哪个日志都讲清楚。你跟着做,能少走至少两轮重装。需要说明的是,Oracle 10g 属于较早期版本,本文以常见的企业内网 Linux 环境为背景展开,具体补丁号以你手头介质为准。

2. 装之前先把地基打对:系统环境与依赖检查

2.1 为什么 Oracle 10g 对系统这么敏感

Oracle 10g 的安装程序在启动时会做一轮“先决条件检查”,检查项包括内核参数、内存与交换分区、临时目录空间、系统包版本、主机名解析等。它不像新版本那样宽容,任何一项不达标,安装界面可能直接闪退,或者装到一半报“ORA-27125”“ORA-12547”这类让人摸不着头脑的错误。

核心原因在于 10g 的实例进程依赖共享内存和信号量,而这两者由内核参数kernel.shmmax、kernel.shmall、kernel.sem控制。如果shmmax小于 SGA 目标值,实例根本起不来。另一个高频问题是主机名:10g 安装时会把主机名写进监听配置和实例参数,如果/etc/hosts里没有把主机名解析到本机 IP,监听器启动会卡住或报“TNS-12545”。

常见做法是先确认系统版本和位数,再逐项核对参数。我一般会先跑一遍检查脚本,把不达标项一次性改完,避免装到一半回头改。

2.2 系统参数与依赖包的一次性配置

下面这段脚本把内核参数、用户限制、依赖包检查合并在一起,适合在 CentOS 或 RHEL 系环境执行。执行前请确认你有 root 权限。

#!/bin/bash # 检查并设置 Oracle 10g 所需内核参数 # 注意:shmmax 建议设为物理内存的一半或 SGA 目标值以上 echo "=== 当前内存 ===" free -m # 设置共享内存参数 sysctl -w kernel.shmmax=4294967296 sysctl -w kernel.shmall=1048576 sysctl -w kernel.sem="250 32000 100 128" sysctl -w fs.file-max=6815744 sysctl -w net.ipv4.ip_local_port_range="9000 65500" sysctl -w net.core.rmem_default=262144 sysctl -w net.core.rmem_max=4194304 sysctl -w net.core.wmem_default=262144 sysctl -w net.core.wmem_max=1048576 # 持久化写入 cat >> /etc/sysctl.conf <<EOF kernel.shmmax=4294967296 kernel.shmall=1048576 kernel.sem=250 32000 100 128 fs.file-max=6815744 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 EOF # 设置 oracle 用户限制 cat >> /etc/security/limits.conf <<EOF oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 EOF # 检查关键依赖包 for pkg in binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc glibc-common glibc-devel libaio libaio-devel libgcc libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel; do rpm -q $pkg >/dev/null 2>&1 || echo "缺失: $pkg" done

这段脚本的逻辑分三块。第一块设置共享内存和信号量,shmmax给到 4G 是为了覆盖大多数中小型 NC57 库的 SGA 需求,如果你的物理内存只有 4G,建议降到 2G 左右,否则系统本身会吃紧。第二块把参数持久化,避免重启后失效。第三块检查依赖包,缺哪个补哪个,其中libaio和compat-libstdc++是 10g 安装程序最容易漏掉的两个。

参数说明:kernel.sem四个值分别是“信号量集合最大值、系统级信号量最大值、单次操作信号量最大值、信号量集合数”,10g 官方建议值就是250 32000 100 128,照抄即可。ip_local_port_range影响监听器和客户端连接可用的端口范围,给宽一点没坏处。

2.3 用户、目录与主机名解析

Oracle 不允许用 root 直接安装,必须建独立用户和组。目录规划上,我习惯把软件目录和数据目录分开,方便后续备份和迁移。

# 创建用户组和用户 groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle passwd oracle # 创建目录并授权 mkdir -p /u01/app/oracle/product/10.2.0/db_1 mkdir -p /u01/app/oracle/oradata chown -R oracle:oinstall /u01 chmod -R 775 /u01 # 配置 oracle 用户环境变量 su - oracle cat >> ~/.bash_profile <<EOF export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=\$ORACLE_BASE/product/10.2.0/db_1 export ORACLE_SID=nc57db export PATH=\$ORACLE_HOME/bin:\$PATH export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 EOF source ~/.bash_profile

这里ORACLE_SID我设成nc57db,你可以按项目规范改,但一旦定了,后面建库、监听、NC57 连接串都要一致。NLS_LANG设成AL32UTF8是为了和 NC57 常用的 UTF-8 字符集对齐,如果这里设错,后面 NC57 连上库也会出现中文乱码。

主机名解析这一步经常被跳过。执行hostname拿到主机名,然后确认/etc/hosts里有对应记录:

hostname # 假设输出 nc57-app grep nc57-app /etc/hosts || echo "127.0.0.1 nc57-app" >> /etc/hosts

没有这条记录,监听器配置时用主机名会解析失败,表现为lsnrctl start卡住或报 TNS 错误。

3. 静默安装 Oracle 10g:响应文件与建库命令

3.1 为什么推荐静默安装而不是图形界面

图形界面安装依赖 X11 转发,在内网服务器上要么没装桌面环境,要么转发卡顿,装到一半断连就得重来。静默安装用响应文件把所有制项提前写好,一条命令跑完,可重复、可记录、可审计。对于 NC57 这种需要反复部署的场景,静默方式明显更稳。

静默安装分两步:先跑数据库软件安装,再跑建库脚本。两步都用响应文件驱动。

3.2 数据库软件安装的响应文件与执行

把安装介质解压到某个目录,比如/soft/database,然后在里面找到response/db_install.rsp,复制一份修改。关键项如下:

# 复制并编辑响应文件 cd /soft/database/response cp db_install.rsp db_install_custom.rsp vi db_install_custom.rsp

需要改的项:

oracle.install.option=INSTALL_DB_SWONLY UNIX_GROUP_NAME=oinstall INVENTORY_LOCATION=/u01/app/oracle/oraInventory ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1 ORACLE_BASE=/u01/app/oracle oracle.install.db.InstallEdition=EE oracle.install.db.isCustomInstall=false oracle.install.db.DBA_GROUP=dba oracle.install.db.OPER_GROUP=dba

INSTALL_DB_SWONLY表示只装软件不建库,建库我们单独做,这样出问题好定位。InstallEdition选 EE 是企业版,如果你的介质是标准版就改成 SE。

执行安装:

cd /soft/database ./runInstaller -silent -responseFile /soft/database/response/db_install_custom.rsp -ignorePrereq

-ignorePrereq是跳过先决条件检查,只有在 2.2 节参数都确认过的情况下才建议加,否则可能装出一个跑不起来的实例。安装过程中会提示你用 root 执行两个脚本,按提示执行:

/u01/app/oracle/oraInventory/orainstRoot.sh /u01/app/oracle/product/10.2.0/db_1/root.sh

执行完回安装窗口按回车继续。看到Successfully Setup Software就说明软件层装好了。

3.3 用 DBCA 静默建库与监听配置

建库用dbca的静默模式。先准备一个建库响应文件,关键参数包括库名、字符集、内存分配、数据文件路径。

# 生成建库响应文件模板 dbca -silent -generateScripts -templateName General_Purpose.dbc -gdbName nc57db -sysPassword oracle123 -systemPassword oracle123 -responseFile /tmp/dbca.rsp

然后编辑/tmp/dbca.rsp,重点确认:

gdbName=nc57db sid=nc57db characterSet=AL32UTF8 nationalCharacterSet=AL16UTF16 totalMemory=2048 datafileDestination=/u01/app/oracle/oradata

totalMemory单位是 MB,按你服务器内存给,NC57 库一般 2G 到 4G 够用。characterSet必须是AL32UTF8,和前面NLS_LANG对齐。

执行建库:

dbca -silent -responseFile /tmp/dbca.rsp

建库完成后配置监听。10g 的监听配置文件在$ORACLE_HOME/network/admin/listener.ora,常见内容:

LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = nc57-app)(PORT = 1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = nc57db) (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1) ) )

启动监听并验证:

lsnrctl start lsnrctl status # 用 sqlplus 验证实例可连 sqlplus system/oracle123@nc57db as sysdba

lsnrctl status里能看到nc57db状态为 READY,就说明数据库层通了。

4. NC57 应用侧安装:连接串、字符集与启动顺序

4.1 NC57 与 Oracle 的对接点在哪

NC57 作为应用层,和 Oracle 的对接集中在三处:JDBC 连接串、字符集、事务隔离级别。连接串里如果 SID 写错或监听端口不对,应用启动直接报连接拒绝。字符集不一致则表现为登录后中文变问号。事务隔离级别如果和数据库默认值冲突,批量操作时可能出现锁等待。

安装 NC57 前,先确认它的中间件版本和 JDK 版本要求。常见做法是查安装介质里的说明文件,按它给的 JDK 版本准备环境,不要用系统自带的 JDK 硬套。

4.2 配置数据源与启动应用

假设 NC57 部署在/opt/nc57,配置文件在/opt/nc57/conf/datasource.properties,典型内容:

jdbc.driver=oracle.jdbc.driver.OracleDriver jdbc.url=jdbc:oracle:thin:@nc57-app:1521:nc57db jdbc.username=nc57user jdbc.password=nc57pass jdbc.initialSize=5 jdbc.maxActive=50 jdbc.validationQuery=SELECT 1 FROM DUAL

jdbc.url里@主机:端口:SID三段必须和监听配置完全一致。validationQuery用SELECT 1 FROM DUAL是 Oracle 的标准探活语句,别写成 MySQL 的写法。

启动前先在数据库里建好应用用户并授权:

-- 用 sysdba 登录后执行 CREATE USER nc57user IDENTIFIED BY nc57pass; GRANT CONNECT, RESOURCE TO nc57user; GRANT CREATE SESSION, CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER TO nc57user; ALTER USER nc57user DEFAULT TABLESPACE users QUOTA UNLIMITED ON users;

然后启动 NC57:

cd /opt/nc57/bin ./startup.sh tail -f /opt/nc57/logs/catalina.out

日志里看到数据源初始化成功、没有ORA-开头的错误,就说明应用层连上了。

4.3 启动顺序与依赖关系

正确的启动顺序是:先起监听,再起数据库实例,最后起 NC57。如果服务器重启,这个顺序不能乱。我一般会写一个启动脚本固化顺序:

#!/bin/bash # 按顺序启动 Oracle 监听、实例、NC57 su - oracle -c "lsnrctl start" su - oracle -c "sqlplus / as sysdba <<EOF startup exit EOF" sleep 10 su - nc57 -c "/opt/nc57/bin/startup.sh"

sleep 10是给实例留出完全打开的时间,实例没完全起来就启应用,连接池会报一堆超时。这个等待时间按你服务器性能调,机械盘环境建议给到 20 秒。

5. 安装过程中最容易踩的五个坑

5.1 坑一:监听启动报 TNS-12545

现象:lsnrctl start卡住十几秒后报TNS-12545: Connect failed because target host or object does not exist。

原因:listener.ora里HOST写的是主机名,但/etc/hosts没有把该主机名解析到本机 IP,或者解析到了错误的地址。

解决:执行hostname确认主机名,在/etc/hosts里加一行本机IP 主机名,重启监听。如果有多网卡,确认解析到的是你希望监听绑定的那个 IP。

5.2 坑二:建库时报 ORA-27125

现象:dbca建库到创建实例阶段报ORA-27125: unable to create shared memory segment。

原因:kernel.shmmax小于 SGA 目标值,或者kernel.shmall不够。10g 对共享内存的检查比新版本严格。

解决:把shmmax调到 SGA 目标值的 1.5 倍以上,shmall按页大小换算后给足。改完sysctl -p生效,重新建库。如果物理内存本身不够,就调低totalMemory参数。

5.3 坑三:NC57 连上库但中文乱码

现象:NC57 能启动,登录也正常,但页面里的中文显示成问号或方块。

原因:数据库字符集、NLS_LANG、JDBC 连接参数三者不一致。常见情况是库建成了ZHS16GBK,而NLS_LANG设的是AL32UTF8。

解决:查库字符集SELECT * FROM nls_database_parameters WHERE parameter='NLS_CHARACTERSET';,把NLS_LANG和 JDBC 连接串里的字符集参数改成一致。如果库已经建成 GBK 且数据不多,重建库改成AL32UTF8更彻底。

5.4 坑四:root.sh 执行报权限错误

现象:安装软件后执行root.sh报Failed to create /etc/oraInst.loc或类似权限错误。

原因:oraInventory目录属主不对,或者之前装过 Oracle 残留了旧的 inventory 文件。

解决:确认/u01/app/oracle/oraInventory属主是oracle:oinstall,删除残留的/etc/oraInst.loc和/etc/oratab后重新执行。如果之前装过其他版本 Oracle,建议先清理干净再装 10g。

5.5 坑五:应用启动报连接池耗尽

现象:NC57 启动后运行一段时间报Connection pool exhausted或大量ORA-00020: maximum number of processes exceeded。

原因:jdbc.maxActive设得过大,或者应用有连接泄漏,加上 Oracle 的processes参数默认值偏小。

解决:先查SHOW PARAMETER processes;,按需调大并重启实例。同时检查应用代码里是否有未关闭的连接。maxActive不要超过processes的 70%,留出余量给后台进程。

6. 装完之后怎么验证:三条命令加一个习惯

安装完成不等于交付完成。我一般用三条命令做最终验证,再养成一个看日志的习惯。

第一条,验证监听和实例状态:

lsnrctl status | grep -E "nc57db|READY" sqlplus -s system/oracle123@nc57db <<EOF SELECT status FROM v\$instance; SELECT name, open_mode FROM v\$database; EOF

v$instance返回 OPEN,v$database返回 READ WRITE,说明数据库层完全就绪。

第二条,验证字符集一致性:

SELECT parameter, value FROM nls_database_parameters WHERE parameter IN ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');

对照NLS_LANG和 JDBC 连接串,三者字符集必须能互相转换且不丢字符。

第三条,验证 NC57 应用层连通性:

curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/nc57/health

返回 200 说明应用层健康检查通过。如果没有健康检查接口,就看catalina.out里最近 100 行有没有ERROR或ORA-。

一个习惯:每次重启服务器后,按第 4.3 节的顺序手动走一遍,确认监听、实例、应用依次起来。我见过太多人图省事把三个服务设成同时自启,结果实例还没打开应用就抢连接,日志里一堆超时,排查半天才发现是启动顺序问题。这个顺序习惯坚持下来,能省掉大量“重启后应用起不来”的后悔药。

希望帮到你。

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询