简介:面向用友NC57部署与Oracle 10g数据库安装的实战说明文档,适合ERP实施工程师、系统管理员及负责NC57环境搭建的技术人员。内容从Oracle数据库的软件准备、安装方法、口令设置,到表空间的规划与建立,再到NC57产品安装、NcSysConfig.bat配置、中间件启动及客户端设置,形成完整闭环。包内仅有1个doc文档,约2.77MB,文字说明简洁,可直接按章节逐步操作。目前已有345人学习下载。文档重点给出了Oracle 10g建表空间SQL示例(NNC_DATA01/02/03、NNC_INDEX01/02/03及NNC_iufo表空间),并附NC57各模块安装顺序(客户化、企业门户、财务会计、供应链、人力资源等),能有效避免因表空间缺失或安装顺序错误导致的安装失败。对于需要独立完成NC57+Oracle 10g环境部署的实施人员,这份文档可作为快速上手的参考手册。
1. NC57 装到一半卡住,问题多半出在 Oracle 10g:这篇安装笔记写给谁
企业信息系统上线时,NC57 和 Oracle 10g 是绕不开的一组老搭档。很多实施手册拿起来就照着点,但真正在服务器上跑一遍,卡住的往往不是 NC 的安装包,而是 Oracle 10g 的数据库环境没立住:监听器起不来、字符集对不上、表空间不够导致导数据导一半就断。这篇笔记把两段安装拆开讲,先走一遍 Oracle 10g 的部署路径和关键参数,再落到 NC57 侧的表空间、业务用户、数据导入和应用服务启动,最后补一批高频故障的排查顺序。写给正在做初装的新手,也写给接手存量老系统、要把环境重新搭起来的运维同学。
2. Oracle 10g 装出能用的库:介质检查、系统参数与两条部署路径
2.1 为什么这个组合还在大量服役:版本适配的现实约束
NC57 的文档里对数据库版本有明确的适配要求,Oracle 10g(实施时一般要求补丁打到 10.2.0.4 以上)是当年最常见的推荐组合。原因不复杂:NC57 的建库脚本和数据字典是在 Oracle 9i/10g 时代定型的,存储过程、视图和驱动都按那个时期的行为编写。换到更新版本的数据库不是不行,但升级意味着驱动要换、升级脚本要跑、几千个存储过程要重新验证,实施成本立刻翻倍。对大多数企业来说,老系统能平稳跑就不到处动,所以直到今天,新装机依然愿意按老组合来。
这里要先说一个选型上的现实问题:Oracle 10g 的官方服务周期早就结束了,新装环境最好只放在纯内网、没有对外暴露的机房里。如果公司有安全规范要求,需要先确认允许使用这类老版本数据库,否则环境搭好了却被拦着不让上线,白费功夫。另外内存和磁盘规划要在安装前定好:Oracle 10g 企业版安装完大约占用 2.5~3GB,NC57 的初始表空间建议预留 20GB 以上,这两个数字决定你分盘时的余量。
2.2 Windows 路径:图形安装的 6 个关键界面与参数
Windows Server 上装 Oracle 10g 是最常见的做法,图形界面简单,但每一步的选择都会影响后面 NC57 能不能跑。用 setup.exe 启动后,逐项确认下面这些界面:
- 安装类型选企业版,不要选标准版。NC57 的部分功能依赖企业版组件。
- Oracle 主目录路径不要带空格和中文,常见是 D:\oracle\product\10.2.0\db_1,路径越短越好。
- 数据库标识 SID 建议直接用规划好的名字,比如 ORCL 或 NC,避开安装程序默认演示名。SID 定了后面不好改。
- 字符集这一步最要紧,选 ZHS16GBK 还是 AL32UTF8 要结合 NC57 的历史数据。老项目实施包大多按 ZHS16GBK 准备,如果公司里已有历史库要合并,就跟着老库的字符集走,别在这里标新立异。
- 给 SYS、SYSTEM 设置密码时,按公司复杂度规范来,但别用 &、<、引号这类特殊字符,后面 JDBC 连接串和 NC 配置文件里转义会很头疼。
- 创建数据库完成后,记下全局库名和端口,端口默认 1521。
安装完成后,打开服务管理器确认 OracleServiceORCL 和 OracleOraDb10g_home1TNSListener 两个服务都已启动。这一步经常被忽略:装完重启服务器后,监听器服务没设成自动启动,NC57 第二天就连不上了。另外要提醒一句,NC 应用服务器用的是 JDBC thin 驱动,不需要单独装 Oracle 客户端,别多装一个增加环境变量冲突的风险。
2.3 Linux 路径:内核参数、oracle 用户与响应文件静默安装
Linux 下安装 Oracle 10g 比 Windows 啰嗦,主要是内核参数和用户环境。Oracle 安装程序在系统检查不通过时可能直接退出,所以前置参数要先落地。以 Red Hat 系为例,先创建用户和组:
groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle mkdir -p /data/oracle /data/oraInventory chown -R oracle:oinstall /data/oracle /data/oraInventory内核参数写在 /etc/sysctl.conf 里,至少要想清楚共享内存和信号量:
kernel.shmall = 2097152 kernel.shmmax = 2147483648 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 fs.file-max = 6815744 net.ipv4.ip_local_port_range = 9000 65500执行 sysctl -p 生效。shmmax 决定单个共享内存段上限,shmall 决定总页数。服务器物理内存 16GB 时,shmmax 给 8GB(按字节写)够用;内存更大的机器不必贪心,给到物理内存一半即可,给满反而影响同机其他应用。进程和文件句柄限制写到 /etc/security/limits.conf:
oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240图形界面不方便或要在多台机器重复安装时,用响应文件做静默安装。安装包解压后 database/response/db_install.rsp 就是模板,改关键几项:
ORACLE_HOME=/data/oracle/product/10.2.0/db_1 ORACLE_BASE=/data/oracle INVENTORY_LOCATION=/data/oraInventory s_nameForBaseDB=ORCL然后执行:
su - oracle ./runInstaller -silent -responseFile /home/oracle/db_install.rsp装完后用 root 执行 /data/oraInventory/orainstRoot.sh 和 ORACLE_HOME 下的 root.sh,它们负责目录权限和 /etc/oratab 注册,漏了后面建库会报权限问题。
注意:静默安装只是把软件装上,建库动作要单独跑 DBCA。很多实施环境在这步疏忽,导致 NC57 的建库脚本找不到可用实例,报 ORA-01033 或 ORA-12505。
DBCA 同样支持静默方式建库:
export ORACLE_HOME=/data/oracle/product/10.2.0/db_1 export ORACLE_SID=ORCL export PATH=$ORACLE_HOME/bin:$PATH dbca -silent -createDatabase -templateName General_Purpose.dbc \ -gdbname ORCL -sid ORCL \ -sysPassword oracle123 -systemPassword oracle123 \ -characterSet ZHS16GBK建库完成后,安装日志在 /tmp/OraInstall.log 和 oraInventory 下的 logs 目录,安装中途退出或 DBCA 失败时先翻这里,比瞎猜路径快得多。
3. NC57 数据库初始化:表空间、业务用户与导入顺序
3.1 表空间规划:数据、索引、临时表空间分开建
NC57 的建库要求里,数据与索引分开表空间是硬约束。原因不复杂:NC 有大量按组织、年度拆分的表和索引,索引与数据分开存放后,导入数据时可以只重建索引,日常维护也能单独处理。常见命名是 NNC_DATA01 放数据、NNC_INDEX01 放索引,临时表空间用数据库默认的 TEMP 即可。首次建库大小按用户数估:500 人以内,NNC_DATA01 给 5GB、NNC_INDEX01 给 2GB 起步,配合自动扩展;有历史数据要迁入的,按源库实际大小的 1.3 倍预留。
容量规划有两个常犯的错:一是初始就建太大,浪费磁盘,而且表空间文件后期不好收缩;二是不开自动扩展,导入中途数据量暴涨直接报 ORA-01653。另外要留意 Windows 与 Linux 的数据文件路径格式不同,脚本里写错路径会立刻报错。
3.2 建库 SQL:从 CREATE TABLESPACE 到 GRANT 的完整脚本
用 sqlplus 以 SYS 身份登录,执行下面的脚本。表空间名和用户名以你的安装包说明为准,这里用最常见的命名作为示例:
CREATE TABLESPACE NNC_DATA01 DATAFILE '/data/oracle/oradata/ORCL/nnc_data01.dbf' SIZE 5120M AUTOEXTEND ON NEXT 200M MAXSIZE UNLIMITED; CREATE TABLESPACE NNC_INDEX01 DATAFILE '/data/oracle/oradata/ORCL/nnc_index01.dbf' SIZE 2048M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED; CREATE USER nc57 IDENTIFIED BY nc57_password DEFAULT TABLESPACE NNC_DATA01 TEMPORARY TABLESPACE TEMP QUOTA UNLIMITED ON NNC_DATA01 QUOTA UNLIMITED ON NNC_INDEX01; GRANT CONNECT, RESOURCE, DBA TO nc57;这里 GRANT DBA 是 NC 实施包惯用做法,因为 NC57 的存储过程和定时任务需要的权限很高。如果公司有安全要求,可以在导入完成、业务验证通过后把 DBA 回收,改成最小授权。Windows 下 DATAFILE 路径要写成 D:\ORADATA\ORCL\NNC_DATA01.DBF 的形式,注意反斜杠和引号,别直接拿 Linux 脚本套。
3.3 导入基础数据:imp 与 impdp 的选择
业务用户能登录后,把 NC57 安装包里的初始数据导入。常见做法是用 dump 文件,导入工具用 10g 自带的 imp 最省事:
imp nc57/nc57_password@ORCL \ file=/data/nc57/init_data.dmp \ log=/data/nc57/init_imp.log \ full=y \ commit=ycommit=y 是导大表的血泪经验:不带这个参数时,导入按整个表做事务,几百万行的表中途报错会全部回滚,日志里看到的成功行数丢一半。加上 commit=y 后边导边提交,重来一次不用从头等。
如果安装包提供的是数据泵格式,先建目录对象再执行 impdp:
CREATE OR REPLACE DIRECTORY IMP_DIR AS '/data/nc57'; GRANT READ, WRITE ON DIRECTORY IMP_DIR TO nc57;impdp nc57/nc57_password@ORCL \ directory=IMP_DIR \ dumpfile=init_data.dmp \ logfile=impdp_init.logimp 与 impdp 二者不能混用:imp 只能读 exp 导出的文件,impdp 只能读 expdp 导出的文件。这是实施现场常见的翻车点,拿高版本 expdp 导出的文件给 10g 的 impdp 导,版本不兼容直接报错。判断方式很简单,先问提供 dump 的人用什么工具,或者看 dump 文件头部信息。
3.4 用 NC57 自带的数据库配置向导做校验
数据导完后,回到 NC57 安装界面,通常有一个数据库配置或初始化数据库的步骤。它做的事情是连接刚建好的库,核对版本、字符集和系统参数,把 NC 运行需要的初始化数据和配置补上,并把连接信息写入 NC 的配置文件。这一步会要求填数据库地址、端口 1521、SID 和 nc57 账号密码。
如果这步报错,优先回查字符集和实例名。字符集不一致会在这一步直接暴露,比进了系统再发现乱码成本低得多。这里出现的任何报错都要记下来,后面章节的排查清单覆盖了最常见的那几类。
4. NC57 应用服务部署:中间件、数据源与启动顺序
4.1 安装包结构与部署目录约定
NC57 服务器端安装包解压后,常见结构是 setup 引导程序加一组子目录:bin 里放启停脚本和配置工具,modules 放业务模块的 jar,ejb 放编译好的业务组件。实施规范一般要求 NCHOME 路径只含字母和数字,Windows 上不要装在 C:\Program Files 下,空格会让脚本传参和环境变量处理出现间距问题,这是老实施们默认避开的坑。
安装方式有图形向导和命令行两种,最终产物都落在 NCHOME 目录里。装完不要立刻启动,先做数据源配置,否则应用起来四处连不上库,日志会刷一整屏连接超时,排查成本比按顺序来高得多。
4.2 数据源配置:连接 Oracle 的关键参数与定位顺序
NC57 的中间件配置工具(不同渠道包命名不同,常见入口在 bin 下的 sysConfig 或 config 脚本)负责写数据源。关键参数有三类:驱动类、连接串、账号。驱动类是 oracle.jdbc.driver.OracleDriver,连接串用 thin 协议:
jdbc:oracle:thin:@192.168.1.10:1521:ORCL注意 thin 连接串里 1521 后面是冒号加 SID,不是斜杠加服务名。10g 时代很多材料里写成 @192.168.1.10:1521/ORCL,那是服务名格式,Oracle 10g 的默认监听配置下有时也能通,但容易在不同网络条件下出现偶发超时。统一按冒号写,少一个变量。
配置工具会把数据源写到 NC 的配置文件中。手工改配置文件也可以,但格式容易错,建议只在工具界面操作。填完保存后工具会测试连接,测试通过再进下一步。如果测试失败,按顺序查:监听是否在听、网络是否通、账号密码是否对、字符集是否匹配。别一上来就怀疑数据库没起来。
4.3 启动服务与端口验证
启动顺序有讲究:先确认数据库监听在听,1521 端口可通,再启动 NC 应用服务。NC57 在 Windows 上可以注册成系统服务用控制面板启停,也可以直接跑 bin 下的启动脚本。日志在 NCHOME 的 logs 目录下,启动报错先看这里的异常栈,不要只盯黑窗口。
验证分三步。第一步看端口,HTTP 服务默认端口常见为 80 或 8080,用 netstat 确认监听:
netstat -an | grep -E "8080|1521"第二步用浏览器访问 http://服务器IP:端口/nc/,能出登录页说明应用与数据库连接基本通了。第三步回库确认会话:
SELECT username, count(*) FROM v$session WHERE username IS NOT NULL GROUP BY username;能看到 nc57 的会话数大于 0,说明应用确实在拿数据库干活。如果登录页出来了但点登录就报错,重点查数据源里的账号密码和连接串,以及数据库 sessions 参数是否被连接池占满。
5. NC57 与 Oracle 10g 安装避坑:5 个高频故障的现象、原因与处置
5.1 监听器起不来或连不上,报 ORA-12541
现象:sqlplus 连接时报 ORA-12541: TNS:no listener,或 NC57 启动时报无法连接到数据库。 原因:最常见是监听服务没启动,其次是主机名解析问题。Oracle 10g 的监听默认按主机名注册,服务器改过机器名或 hosts 文件里没有对应条目时,监听会卡在解析环节。 解决:Windows 服务里手动启动 OracleOraDb10g_home1TNSListener;Linux 执行 lsnrctl start。仍不行就用 lsnrctl status 看监听地址,核对 /etc/hosts 里的主机名映射,再从应用服务器侧 tnsping 验证。
5.2 中文乱码和导入报错:字符集对不上
现象:NC 页面数据正常,但导入老库的中文变成问号,或初始化脚本报字符集相关错误。 原因:数据库端与客户端字符集不一致。NC57 老数据多在 ZHS16GBK 下,新建库若选了 AL32UTF8,再想改库字符集成本极高。 解决:建库前先问清源库字符集;已经建错且没有业务数据时,趁早重建实例。有历史数据时,10g 下用 exp/imp 做字符集转换限制很多,别指望一条命令解决,要用数据泵并控制 NLS_LANG 再逐表验证。
5.3 一并发就报 ORA-12516:连接数参数没调
现象:日常使用没问题,月底人多时应用频繁报 ORA-12516: TNS:listener could not find available handler。 原因:数据库 processes 和 sessions 参数偏小,NC57 的连接池按上限建连,把会话占满。 解决:先查询 v$resource_limit 或 show parameter processes 确认当前值,然后调整:
ALTER SYSTEM SET processes=500 SCOPE=SPFILE; ALTER SYSTEM SET sessions=555 SCOPE=SPFILE;sessions 一般按 processes 的 1.1 倍加 5 估算。两个参数都写在 SPFILE 里,重启实例才生效。重启前先确认监听服务和连接池配置能回来,避免改完参数反而连不上。
5.4 导入中途断掉:ORA-01653 表空间不足
现象:imp 导数据跑了一个小时,某个大表报 ORA-01653 unable to extend table。 原因:表空间文件到达初始大小上限,或 AUTOEXTEND 没有生效。 解决:查告警日志确认哪个表空间,用 ALTER DATABASE DATAFILE 打开自动扩展,或直接加数据文件:
ALTER TABLESPACE NNC_DATA01 ADD DATAFILE '/data/oracle/oradata/ORCL/nnc_data02.dbf' SIZE 2048M AUTOEXTEND ON NEXT 200M MAXSIZE UNLIMITED;加完不用重启,继续重跑导入即可。所以说前面建库时那个 AUTOEXTEND 参数不是锦上添花,是导入作业的保命设置。
5.5 内存抖动:ORA-04031 共享池不够
现象:NC57 长时间运行后,应用日志里出现 ORA-04031: unable to allocate bytes of shared memory,数据库告警日志也在报共享池相关错误。 原因:Oracle 10g 的共享池有碎片化问题,加上 NC 有大量动态 SQL,大并发下共享池被耗尽。 解决:优先调整 SGA 结构,不要只涨共享池:
ALTER SYSTEM SET sga_target=3G SCOPE=SPFILE; ALTER SYSTEM SET shared_pool_size=800M SCOPE=SPFILE; ALTER SYSTEM SET db_cache_size=1G SCOPE=SPFILE;改完重启。如果重启后又很快复现,要考虑共享池碎片,临时办法是定期执行 alter system flush shared_pool,但这是治标,攒到维护窗口分析 TOP SQL 才是正路。
6. 装完别急着交付:验证、备份与收尾的两个习惯
交付前按下面这张清单过一遍,能挡住大部分隐性问题:
| 检查项 | 命令或动作 | 期望结果 |
|---|---|---|
| 数据库监听 | lsnrctl status | 监听状态 READY,1521 在听 |
| 业务用户登录 | sqlplus nc57/密码@ORCL | 能进入 SQL 提示符 |
| 应用登录页 | 浏览器访问 /nc/ | 出现登录界面并能登录 |
| 后台会话 | 查 v$session 按用户分组 | nc57 会话数随登录人数增长 |
| 告警日志 | 查 alert_SID.log 的 ORA- 记录 | 无新增未处理错误 |
备份习惯要在装完当天就定,不要等上线后再补。常见做法是每晚 expdp 导出 nc57 用户,保留最近 7 天;出现大版本变更或打补丁前,额外做一次全库冷备份。NC57 的存储过程、定时任务都在库里,只备份应用目录没有意义。我自己的习惯是每改一个数据库参数,都先用 create pfile 把当前配置留一份,再改 SPFILE。这个动作五分钟不到,但遇到参数改错、实例起不来的紧急时刻,就是后悔药。另外用 exp 还是 expdp、dump 文件放在哪台机器,都写进实施交接文档,半年后有人接手才不会靠猜。
第一批用户真实跑两周、月结跑过一轮,才算真正验收。那双眼睛盯着连接数和告警日志,比任何交付报告都实在。希望帮到你。
本文还有配套的精品资源,点击获取