资讯动态

银河麒麟V10离线部署Oracle XE 11.2.0.2完整指南

发布时间:2026/9/28 13:14:00 来源:尧图企业网站定制
1. 为什么偏偏是XE 11.2.0.2离线环境下的选型取舍做国产化替代和信创环境的朋友应该对“银河麒麟高级服务器操作系统 V10”不陌生。它兼容Red Hat Enterprise Linux的应用程序接口这让不少RHEL系的软件包可以直接迁移过去Oracle Database 11g Express Edition (XE) 11.2.0.2 就是一个典型例子。我这次接的客户环境完全离线内网没有yum源没有外网权限唯一能用的就是一个U盘。数据库选型时客户明确要求用Oracle XE 11.2.0.2理由也很现实核心应用是早期基于Oracle开发的11g的兼容性最好19c XE还得改连接配置很多旧存储过程根本不想动。其实从技术角度讲在银河麒麟 V10 上部署 Oracle Database 11g Express Edition 11.2.0.2并不是什么高深操作。本质上就是把Oracle官方针对RHEL/CentOS 6编译的RPM包装到一个兼容RHEL API的国产系统上。落地难点不在“装不上”而在“离线依赖”和“内核参数调校”。这两件事处理不好安装过程就会反复报错好不容易装完数据库也可能起不来。选型时我特意对比过 Oracle XE 11.2.0.2 与新版 XE 的差异。新版 XE 从 18c 开始使用 RPM 包也支持离线安装但要求更高的内核版本和更多的依赖库。而 11.2.0.2 的 RPM 是针对 RHEL 6 构建的依赖的 glibc、libaio、ksh 等软件包在老麒麟 V10 上普遍都有对应版本内核也兼容。更重要的是11.2.0.2 的配置过程是交互式脚本/etc/init.d/oracle-xe configure没有那么多复杂的容器化、多租户概念对不熟悉 Oracle 新架构的运维同事非常友好。下面这张表是我在选型时整理的对比对比项Oracle XE 11.2.0.2Oracle XE 19c / 21c安装包格式RPM压缩包RPM压缩包基础OS要求RHEL 6 / 兼容内核RHEL 7 / 兼容内核内存下限1GB左右可跑建议2GB以上配置复杂度init.d脚本交互式配置需要手动初始化PDB典型依赖libaio, glibc, ksh, bc, net-tools更多含compat-libstdc等离线友好度高中如果你也接到一个内网、无外网、需要部署 Oracle 的任务我建议先想清楚需求是不是有 Web 管理界面是不是有存量 SQL 要跑内存资源有多少如果内存只有 2GB 且业务不复杂XE 11.2.0.2 完全够用。如果业务并发较高那还是上企业版或者 19c XE别在 11g 上死磕。1.1 版本选择的现实约束官方文档里 Oracle XE 11.2.0.2 的安装包是oracle-xe-11.2.0-1.0.x86_64.rpm.zip解压后会得到Disk1/目录里面有oracle-xe-11.2.0-1.0.x86_64.rpm和oracle-xe-11.2.0-1.0.x86_64.rpm所需的响应文件。奇怪的是这个包虽然是给 Oracle Linux 6 准备的但因为它只依赖基本的 glibc、libaio、unixODBC 等库所以在一众兼容 RHEL 的操作系统上几乎都能装。银河麒麟 V10 的x86_64架构正好在对齐的轨道上。另一个现实约束是补丁问题。11.2.0.2 的官方支持早已结束不能指望 Oracle 再给出针对国产操作系统的补丁。所以部署时我们要把“能让它稳定运行”放在第一位别一上来就去升级 PSU很容易引入新的依赖。离线环境下我的原则是能用原装 RPM 启动就不额外打补丁。1.2 离线部署的整体思路离线部署的完整逻辑链是这样的准备一个能联网的跳板机下载所有需要的 RPM 包和 Oracle 安装包拷贝到内网机器上然后在内网机器上先解决依赖顺序再安装 Oracle RPM最后执行 configure 脚本初始化数据库。整个过程可以分解成四个阶段环境检查、依赖准备、包安装、配置验证。这四步看似简单但每一步都有坑。环境检查时最容易被忽略的是/dev/shm大小和tmpfs依赖准备时容易被忽略的是pdksh或ksh的选择包安装时容易被忽略的是rpm的安装顺序配置验证时容易被忽略的是/etc/oratab和/etc/sysconfig/oracle的权限。下面我把每一步都展开讲照着做就能少走弯路。2. 部署前的环境准备能省的事千万别省环境准备阶段看似不产生任何“直接成果”却是整个部署中最影响心情的部分。我见过太多人在这个阶段图省事跳过了系统检查结果装到一半发现库文件路径不对、内存限制过低、安装包缺依赖最后又回去补课。准备工作做到位后续安装可以在十分钟内完成。2.1 检查操作系统版本、架构与内核参数首先确认系统基本信息。在银河麒麟 V10 上执行以下命令把结果记录下来cat /etc/os-release uname -a uname -m free -h df -h //etc/os-release会输出系统代号比如Kylin V10 SP1或SP2这决定你后续要不要更换软件源。uname -m必须返回x86_64如果返回aarch64那这个 amd64 的 Oracle XE 包就装不了需要另找 ARM 版本通常没有。内存建议不少于 1.5GB空闲磁盘不少于 10GB否则 Oracle 的数据文件加上日志文件很容易把盘撑满。内核参数是很多人忽略的坑。银河麒麟 V10 默认的内核参数不完全满足 Oracle 11g R2 的要求尤其是信号量semmsl和共享内存shmall。最好在安装前就检查sysctl kernel.sem sysctl kernel.shmmax sysctl kernel.shmall cat /proc/sys/fs/file-max我遇到过一台机器kernel.sem的semmsl只有 250Oracle 启动时报ORA-27102: out of memory排查了很久才发现是信号量不足。所以建议提前一次性把参数配置好配置方法见第 4 章。2.2 创建专用用户与目录结构Oracle 不允许直接用 root 运行数据库实例需要创建专用用户。按照官方惯例创建oracle用户并归入oinstall和dba组groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle passwd oracle注意银河麒麟 V10 和 RHEL 一样useradd默认不会创建家目录如果你想用/home/oracle最好加-m参数useradd -m -g oinstall -G dba oracle然后建立标准目录mkdir -p /u01/app/oracle chown -R oracle:oinstall /u01 chmod -R 775 /u01Oracle 的ORACLE_HOME默认在 XE 中会被配置为/u01/app/oracle/product/11.2.0/xe这个路径在 configure 脚本初始化时会自动创建我们提前把父目录权限放好就行。2.3 准备离线安装包与依赖清单离线部署的核心麻烦在于依赖包。你可以在有外网的机器上访问镜像源把下面这些包下载好架构均选择x86_64binutilscompat-libstdc-33compat-libcap1gccgcc-cglibcglibc-develkshlibaiolibaio-devellibgcclibstdclibstdc-devellibXextlibXtstlibXimakenet-toolsnfs-utilssysstatunixODBCunixODBC-devel下载时不要只下最新版本Oracle 11g R2 对 glibc 版本比较敏感太新的 glibc 可能不是问题但缺compat-libstdc-33一定会报错。如果镜像源里找不到compat-libstdc-33可以去 EPEL 6 的存档池里找或者直接在 RHEL 6 ISO 的Packages目录中提取。我自己习惯的做法是在外网机器上下载一个Packages目录的完整快照用createrepo做成一个本地 repo然后在内网机器上配置一个指向 U 盘或内网服务器的 yum 源。这样后面使用yum localinstall或者rpm -ivh就会自动解析依赖省去手动一个一个找包的痛苦。除此之外Oracle XE 的安装包本身要提前下载好文件名是oracle-xe-11.2.0-1.0.x86_64.rpm.zip大约 290MB。把 zip 包和依赖包统一放在/opt/oracle-iso/下方便后续操作。3. 一步一步装上Oracle XE从RPM到数据库初始化环境准备好之后正式安装其实非常机械。我习惯用 root 用户操作避免权限问题。整个过程我拆成三块解压与安装 RPM、配置数据库、验证监听每一步都有一看就会的命令。3.1 解压RPM包并处理依赖关系先把安装包解压cd /opt/oracle-iso unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip cd Disk1 ls -lh正常会看到oracle-xe-11.2.0-1.0.x86_64.rpm和response/目录。response/里通常有一个xe.rsp文件但实际配置时我们并不直接使用这个文件configure 脚本会交互式读取输入。接下来先安装依赖。如果你已经配好了本地 repo最简单的做法是yum localinstall -y oracle-xe-11.2.0-1.0.x86_64.rpmyum localinstall会自动安装 RPM 依赖前提是这个 repo 里有全部依赖包。如果没有 repo就老老实实用rpm -ivh按顺序装依赖rpm -ivh binutils-*.rpm compat-libstdc-33-*.rpm compat-libcap1-*.rpm \ gcc-*.rpm gcc-c-*.rpm glibc-*.rpm glibc-devel-*.rpm \ ksh-*.rpm libaio-*.rpm libaio-devel-*.rpm libgcc-*.rpm \ libstdc-*.rpm libstdc-devel-*.rpm libXext-*.rpm libXtst-*.rpm \ libXi-*.rpm make-*.rpm net-tools-*.rpm nfs-utils-*.rpm \ sysstat-*.rpm unixODBC-*.rpm unixODBC-devel-*.rpm如果依赖之间有顺序问题比如glibc-devel依赖glibc你可以在一次命令里把多个包都列上rpm 会自动处理大多数顺序。但有一点要特别提醒pdksh和ksh二选一即可不要同时装。Oracle 官方文档写的是需要pdksh但在 RHEL 6 里已经用ksh替代了我们直接装ksh就行。3.2 运行RPM安装Oracle XE本体依赖解决后安装主包rpm -ivh oracle-xe-11.2.0-1.0.x86_64.rpm安装成功的标志是看到提示信息大意是“Oracle Database 11g Express Edition 安装完成接下来需要运行 /etc/init.d/oracle-xe configure”。如果这里报错常见的有两类一类是“Failed dependencies”说明某些依赖包缺失或版本不对另一类是“error: unpacking of archive failed”通常是磁盘空间不足或 RPM 包损坏。安装完成后检查关键文件是否生成ls -l /etc/init.d/oracle-xe ls -l /etc/sysconfig/oracle ls -l /etc/oratab/etc/sysconfig/oracle和/etc/oratab是后续配置时必须用到的。如果没有出现说明 RPM 安装不完整需要卸载重装rpm -e oracle-xe3.3 执行oracle-xe configure完成数据库初始化这是最关键的一步。用 root 执行/etc/init.d/oracle-xe configure脚本会依次交互式询问HTTP 监听端口默认 8080如果端口被占用就换一个比如 8180。Oracle 数据库监听端口默认 1521。SYS 和 SYSTEM 账户的密码一定要记住必须是至少 8 位且包含数字和字母。是否随系统自动启动选择y或n建议选y。整个交互过程大概半分钟。执行完成后脚本会启动实例并创建XE数据库。成功时终端会显示类似Oracle Database 11g Express Edition is configured successfully的信息。注意这一步必须保证服务器内存至少在 1GB 以上否则脚本可能在创建实例时直接退出报ORA-00845: MEMORY_TARGET not supported on this system。这个ORA-00845我见得太多了本质是/dev/shm比MEMORY_TARGET小。11g XE 默认的MEMORY_TARGET可能在 808MB 到 1GB 之间如果/dev/shm只有默认的一半就会触发这个错误。解决办法是加大/dev/shm我后面会详细说。3.4 验证监听与数据库实例配置完成后先用监听命令确认状态/etc/init.d/oracle-xe status lsnrctl statuslsnrctl status的路径需要先加载 Oracle 环境变量。你可以手动设置export ORACLE_HOME/u01/app/oracle/product/11.2.0/xe export ORACLE_SIDXE export PATH$PATH:$ORACLE_HOME/bin export LD_LIBRARY_PATH$ORACLE_HOME/lib:$LD_LIBRARY_PATH然后执行sqlplus / as sysdba如果 SQL*Plus 能进入执行select status from v$instance;返回OPEN就说明实例正常。也可以执行select name, open_mode from v$database;。这部分放在第 5 章再细讲。4. 离线环境真正磨人的地方依赖缺失与内核参数很多人以为装完 RPM、跑通 configure 就大功告成其实真正磨人的是安装过程中遇到的依赖错误以及装完后数据库起不来的内核参数问题。这一章的内容全是我在离线环境里实测踩过坑后的总结。4.1 依赖缺失的排查链路离线环境下使用rpm -ivh oracle-xe-11.2.0-1.0.x86_64.rpm时最常见的报错是error: Failed dependencies: libaio-devel is needed by oracle-xe-11.2.0-1.0.x86_64 unixODBC-devel is needed by oracle-xe-11.2.0-1.0.x86_64 ksh is needed by oracle-xe-11.2.0-1.0.x86_64看到这种提示后别急着--nodeps硬装。虽然可以用rpm -ivh --nodeps oracle-xe-...rpm跳过依赖检查但跳过的依赖若是数据库运行真正需要的后续初始化必出问题。正确做法是逐个排查。先检查系统里是否已经安装了名为“类似”的包rpm -qa | grep unixODBC rpm -qa | grep libaio rpm -qa | grep ksh rpm -qa | grep compat-libstdc很多时候银河麒麟 V10 自带的是unixODBC2.x而 Oracle 需要的版本也是 2.x那就可以直接在Packages目录里找到对应 rpm手动安装后再重新执行。如果缺的是compat-libstdc-33这个包在较新的源里已经移除了可以从 RHEL 6.10 的 DVD 镜像中提取。安装命令rpm -ivh compat-libstdc-33-3.2.3-69.el6.x86_64.rpm如果执意要用--nodeps我的经验是只对compat-libstdc-33这类非核心依赖使用对glibc、libaio、ksh这些核心依赖绝不能用。因为glibc一旦被覆盖成不兼容的版本系统都可能崩溃。稳妥安装顺序是先装所有能正常解析的核心依赖再装compat-libstdc-33等老版本兼容库最后安装 Oracle RPM。4.2 内核参数、共享内存与监听配置安装成功后数据库起不来最常见的原因是共享内存和信号量参数不达标。Oracle 11g R2 要求的最低参数如下kernel.semmsl 250 kernel.semmns 32000 kernel.semopm 100 kernel.semmni 128 kernel.shmall 1073741824 kernel.shmmax 17179869184 kernel.shmmni 4096 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在银河麒麟 V10 上直接编辑/etc/sysctl.conf追加上述内容然后执行sysctl -p生效。我建议生产环境把shmmax设成物理内存的一半左右shmall设成总页数这样能减少 11g 自动内存管理AMM在启动时的奇怪报错。接着处理/dev/shm大小。11g XE 的自动内存管理默认使用共享内存文件系统如果/dev/shm小于MEMORY_TARGET就会出现ORA-00845。查看当前大小df -h /dev/shm如果只有 1GB 或更小需要重新挂载mount -o remount,size2G /dev/shm为了让重启后也生效编辑/etc/fstab找到包含tmpfs的那一行改成tmpfs /dev/shm tmpfs defaults,size2G 0 0建议size不低于物理内存的 1/3。这个改动是必须的千万不要跳过。监听配置也可能坑人。安装好后有时候lsnrctl status显示TNS-01189: The listener may not exist or could not be reached原因也大多数是/dev/shm或端口被防火墙拦截。可以在/etc/sysconfig/oracle中检查LISTENER配置但最简单的是直接重启监听lsnrctl stop lsnrctl start如果监听能起来但数据库实例没起来就执行sqlplus / as sysdba startup通常到这里数据库就能正常打开。5. 验证安装、设置开机自启动与日常运维数据库能启动只是第一步接下来要把自启动、环境变量、日常命令这些收尾工作做完否则下次机器重启数据库又躺平了。5.1 验证数据库可用性与版本信息进入 SQL*Plus 后执行select banner from v$version; select name, open_mode from v$database;正常能看到Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production之类的输出OPEN_MODE为READ WRITE。还可以验证一下连接是否正常。用system用户通过网络服务名连接sqlplus system/密码//localhost:1521/XE如果报ORA-12154: TNS:could not resolve the connect identifier说明tnsnames.ora没有配置好需要检查$ORACLE_HOME/network/admin/tnsnames.ora是否包含XE的条目。默认内容应该类似XE (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST localhost)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME XE) ) )5.2 配置开机自启动银河麒麟 V10 使用 systemd最简单的自启方式是把oracle-xe这个 init 脚本服务化。编辑/etc/systemd/system/oracle-xe.service[Unit] DescriptionOracle Database 11g Express Edition Aftersyslog.target network.target [Service] Typeforking ExecStart/etc/init.d/oracle-xe start ExecStop/etc/init.d/oracle-xe stop RemainAfterExityes Userroot [Install] WantedBymulti-user.target然后执行systemctl daemon-reload systemctl enable oracle-xe systemctl start oracle-xe systemctl status oracle-xe另外还需要确认/etc/oratab文件里XE的条目末尾是Y而不是N。oratab是数据库实例启动脚本判断“是否随系统启动”的依据。如果文件中是XE:/u01/app/oracle/product/11.2.0/xe:N改成XE:/u01/app/oracle/product/11.2.0/xe:Y改完重启后执行/etc/init.d/oracle-xe status如果显示Oracle Database 11g Express Edition is running就说明自启动配置成功。5.3 环境变量、账号安全与日常运维中的几个坑日常运维最烦的就是每次开终端都要手动export ORACLE_HOME。建议把环境变量写入oracle用户的.bash_profilecat /home/oracle/.bash_profile EOF export ORACLE_HOME/u01/app/oracle/product/11.2.0/xe export ORACLE_SIDXE export PATH$PATH:$ORACLE_HOME/bin export LD_LIBRARY_PATH$ORACLE_HOME/lib:$LD_LIBRARY_PATH EOF然后切换用户测试su - oracle sqlplus / as sysdba这里有几个日常运维中我反复踩的坑密码过期XE 默认的SYS/SYSTEM账号不受密码过期影响但应用账号可能会。用alter profile default limit password_life_time unlimited;可以解决。会话连接数限制XE 限制并发会话数和 CPU 使用量如果应用连接池配置过大会报ORA-12518需要在应用侧调整连接池。磁盘空间Oracle 的alert_sid.log在/u01/app/oracle/diag/rdbms/xe/XE/trace/下如果长期不清理会占满磁盘。建议写一个 cron 脚本定期清理三天前的 trace 文件。字符集问题很多国产业务库默认使用ZHS16GBK如果一开始装的时候没注意后面导入数据容易乱码。创建数据库时 configure 脚本没有提供字符集选项但安装后可以在初始化参数里设置NLS_LANGAMERICAN_AMERICA.AL32UTF8或ZHS16GBK配合应用端。6. 离线部署中我最后悔没早知道的几个细节这一章算是给后面还要做类似事情的人提个醒都是我实际操作中吃过亏才总结出来的。第一离线环境一定要保留一份日志。我在安装时习惯用script install.log记录整个终端输出这样一旦后期排查问题能快速定位是哪一步报错。Oracle 的alert_sid.log也要经常看很多时候数据库起不来的真正原因不在 init 脚本而在日志末尾的 ORA- 错误。第二不要在 configure 过程中随意中断。我当时因为端口被占用中途 CtrlC 了一次结果导致/etc/sysconfig/oracle内容不完整再次 configure 时反复报错。解决办法是彻底清理后重装rpm -e oracle-xe然后删除/u01/app/oracle目录再重新rpm -ivh。所以最好提前用ss -lntp检查 8080 和 1521 端口是否被占用。第三关于备份恢复虽然是 XE但数据一样重要。备份用最简单实用的方式即可例如使用expdp工具导出核心用户数据到本地目录再定时同步走。不要尝试用rman做增量备份XE 在 11.2 里对 RMAN 的支持有限折腾的时间足够你导出好几遍。第四如果条件允许在做正式部署之前先搭一个一模一样的测试环境。离线的坑往往不在于操作复杂度而在于你无法随时上网查资料。一台同样安装了银河麒麟 V10 的虚拟机按本文流程跑一遍把报错信息记下来再去生产环境动手效率会高很多。最后留一个我个人觉得非常好用的小技巧在离线环境下把用到的 RPM 包、Oracle 安装包、依赖包、sysctl 配置、systemd 单元文件全部放在同一个目录里并写一个README.md记录安装顺序。下次不管换到哪台机器只要照做就能复现不用再从头理清依赖关系。这种“离线部署文档标准化”的习惯能让你在后续运维中省出大量时间。

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

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

免费获取报价 →
↑