银河麒麟V10 SP3系统安装Oracle 11g全流程与疑难问题解决
1. 项目概述与背景最近在给一个老客户的内部系统做迁移他们的服务器环境比较特殊用的是国产的银河麒麟操作系统具体版本是V10 SP3 for x86_64。这套系统上跑着一个核心的业务应用后端数据库是Oracle 11g。客户的目标很明确要把整个环境包括操作系统和应用从旧的硬件平移到新的国产服务器上。这意味着我得在全新的麒麟SP3 x86系统上从头搭建一套Oracle 11g数据库环境。这活儿听起来像是常规的数据库安装但真正动起手来才发现在麒麟系统上装Oracle跟我们在熟悉的CentOS或者RHEL上操作完全是两码事。麒麟系统虽然底层也是Linux内核但它在软件包管理、依赖库、甚至一些系统参数的默认配置上都有自己的一套“脾气”。网上能找到的教程大多是基于RedHat系的直接照搬过来十有八九会卡在某个依赖报错或者参数校验上。我花了差不多两天时间把各种坑都踩了一遍才最终把数据库稳稳当当地跑起来。今天就把这个完整的安装过程、遇到的典型问题以及解决办法系统地梳理出来。如果你也面临在银河麒麟V10 SP3x86上部署Oracle 11g的需求这篇记录应该能帮你省下不少折腾的时间。2. 安装前的深度准备工作在麒麟系统上安装Oracle准备工作的重要性要占到整个过程的50%以上。仓促开始安装几乎必然会在中途遇到各种依赖缺失和参数错误。我们必须把系统环境调整到Oracle安装程序期望的状态。2.1 系统与硬件资源核查首先我们需要确认系统环境是否满足Oracle 11g11.2.0.4版本的最低要求。通过SSH连接到目标麒麟服务器执行以下命令进行核查操作系统版本确认cat /etc/os-release确认输出中包含“Kylin Linux Advanced Server release V10 (SP3)”和“x86_64”字样。这是基础。内存与交换空间检查# 检查物理内存推荐至少2GB grep MemTotal /proc/meminfo # 检查交换空间推荐大小见下文计算 grep SwapTotal /proc/meminfo free -hOracle对交换空间有明确的计算公式当物理内存RAM在1GB到2GB之间时交换空间应为RAM的1.5倍。当RAM在2GB到16GB之间时交换空间等于RAM大小。当RAM大于16GB时交换空间固定为16GB。 例如我的服务器有8GB内存那么交换空间至少需要8GB。使用swapon -s或free -h查看现有交换分区大小。如果不足需要添加。磁盘空间检查df -h /tmp df -h /home # 假设Oracle安装在此 df -h/tmp目录至少需要1GB空间。Oracle软件安装目录如/u01/app/oracle建议预留15-20GB。数据文件存储目录根据业务量预留初期至少50GB。2.2 依赖软件包安装麒麟系统的特殊之处这是与RedHat系系统差异最大的地方。麒麟V10的软件源默认不包含Oracle所需的所有依赖包尤其是一些较老的32位i686兼容库。我们需要手动配置额外的源并安装。配置EPEL和RPM Fusion源可选但推荐 麒麟的默认源可能不全。可以尝试添加兼容的EPEL源。注意要选择与系统版本匹配的源。# 示例下载适用于CentOS 8的EPEL release包麒麟V10基于此 wget https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm sudo rpm -ivh epel-release-latest-8.noarch.rpm注意并非所有EPEL包都能完美兼容安装依赖时如果遇到冲突可能需要跳过EPEL转而手动寻找单个rpm包。安装核心依赖包组 使用yum命令安装以下包组和关键包。符号表示安装包组。sudo yum groupinstall -y Development Tools sudo yum install -y binutils compat-libcap1 compat-libstdc-33 gcc gcc-c glibc glibc-devel ksh libaio libaio-devel libgcc libstdc libstdc-devel libXi libXtst make sysstat unixODBC unixODBC-devel关键难点compat-libstdc-33、libaio-devel、ksh这几个包在麒麟默认源中可能没有或者版本不对。如果yum找不到你需要去诸如 rpmfind.net 这样的网站根据你的系统架构x86_64和大致版本对应CentOS 8手动下载对应的rpm包。使用rpm -ivh命令本地安装。安装时注意依赖顺序可能需要先安装compat-libstdc-33再安装其他。安装32位兼容库必须 Oracle安装程序特别是图形界面和某些库是32位的即使在64位系统上也需要安装对应的32位库。sudo yum install -y glibc.i686 libgcc.i686 libstdc.i686 libaio.i686同样如果yum源没有需要手动寻找下载glibc-2.xx.i686.rpm等包进行安装。2.3 创建Oracle用户与组并配置环境Oracle不建议使用root用户直接安装和运行数据库。我们需要创建专用的操作系统用户和组。创建用户和组sudo groupadd -g 54321 oinstall sudo groupadd -g 54322 dba sudo groupadd -g 54323 oper sudo useradd -u 54321 -g oinstall -G dba,oper oracle sudo passwd oracle # 为oracle用户设置密码创建目录并授权sudo mkdir -p /u01/app/oracle sudo mkdir -p /u01/app/oraInventory sudo chown -R oracle:oinstall /u01/app sudo chmod -R 775 /u01/app配置oracle用户的环境变量 切换到oracle用户su - oracle编辑其家目录下的.bash_profile文件vi ~/.bash_profile在文件末尾添加以下内容# Oracle Settings export ORACLE_BASE/u01/app/oracle export ORACLE_HOME$ORACLE_BASE/product/11.2.0/dbhome_1 export ORACLE_SIDorcl # 你的数据库实例名可自定义 export PATH$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH$ORACLE_HOME/lib:/usr/lib export NLS_LANGAMERICAN_AMERICA.AL32UTF8 # 设置字符集非常重要保存后执行source ~/.bash_profile使配置生效。这里有个坑LD_LIBRARY_PATH必须包含/usr/lib否则安装或运行时会找不到一些系统库。2.4 修改系统内核参数与资源限制Oracle数据库对系统内核参数有特定要求需要修改/etc/sysctl.conf文件。编辑sysctl.confsudo vi /etc/sysctl.conf在文件末尾添加或修改以下参数。数值可根据服务器配置调整但以下是一个适用于中等规模系统的起点# Oracle 11g Recommended Kernel Parameters fs.aio-max-nr 1048576 fs.file-max 6815744 kernel.shmall 2097152 # 共享内存总页数。单位是页通常4KB。值 总物理内存(字节) / 页大小(4096) kernel.shmmax 4294967295 # 最大单个共享内存段大小32位系统最大为4GB-1字节 kernel.shmmni 4096 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参数计算示例我的服务器有8GB内存8589934592字节页大小4KB4096字节。kernel.shmall 8589934592 / 4096 2097152。kernel.shmmax通常设置为物理内存的一半或更多这里设为4GB-14294967295。使内核参数生效sudo sysctl -p修改用户资源限制 编辑/etc/security/limits.conf文件sudo vi /etc/security/limits.conf在末尾为oracle用户添加oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240 oracle hard stack 32768同时检查/etc/pam.d/login文件确保包含session required pam_limits.so这一行。禁用透明大页和NUMA重要 对于Oracle数据库尤其是11g通常建议禁用透明大页Transparent HugePages以避免性能问题。# 检查当前状态 cat /sys/kernel/mm/transparent_hugepage/enabled # 输出为 [always] madvise never如果是always则需要禁用。 # 编辑GRUB配置 sudo vi /etc/default/grub # 在 GRUB_CMDLINE_LINUX 行末尾添加 transparent_hugepagenever numaoff # 例如GRUB_CMDLINE_LINUX... transparent_hugepagenever numaoff # 更新GRUB配置 sudo grub2-mkconfig -o /boot/grub2/grub.cfg # 重启后生效注意此操作需要重启服务器。务必在业务允许的时间窗口进行。3. Oracle 11g软件安装与配置详解当所有前置条件满足后我们就可以开始安装Oracle软件了。这里我选择使用图形界面GUI安装因为它对新手更友好也便于检查每一步的选项。3.1 获取安装文件与解压从Oracle官网下载适用于Linux x86-64的Oracle Database 11g Release 2 (11.2.0.4)安装包通常有两个文件linux.x64_11gR2_database_1of2.zip和linux.x64_11gR2_database_2of2.zip。上传与解压 将两个zip文件上传到服务器的一个临时目录例如/tmp。使用oracle用户操作。su - oracle cd /tmp unzip linux.x64_11gR2_database_1of2.zip unzip linux.x64_11gR2_database_2of2.zip解压后会生成一个database目录。处理中文环境问题可选但建议 如果服务器是纯英文环境安装界面会是英文。如果想用中文界面需要设置语言环境。但有时中文环境可能导致安装界面乱码。一个稳妥的做法是临时设置为英文环境进行安装export LANGen_US.UTF-83.2 启动图形化安装界面由于我们是通过SSH远程连接需要启用X11转发来显示图形界面。在本地客户端如Windows上的MobaXterm、Xshell或macOS/Linux终端确保X11转发已开启。SSH连接时使用-X或-Y参数例如ssh -X oracle服务器IP。在服务器端切换到oracle用户进入解压目录运行安装程序cd /tmp/database ./runInstaller如果遇到“无法打开显示器”的错误确认本地已安装X Server如Windows的VcXsrvmacOS的XQuartz。以oracle用户执行xhost 有时需要在本地执行。确保DISPLAY环境变量已正确设置echo $DISPLAY应输出类似localhost:10.0的内容。3.3 图形界面安装步骤与关键选择安装程序启动后按照向导一步步进行。以下是关键步骤的决策点配置安全更新取消勾选“我希望通过My Oracle Support接收安全更新”跳过电子邮件和密码填写。点击“下一步”会有一个警告选择“是”。安装选项选择“创建和配置数据库”。如果仅安装软件后续再建库可选“仅安装数据库软件”。系统类选择“服务器类”。桌面类功能有限不适用于生产环境。网格安装选项选择“单实例数据库安装”。RAC实时应用集群需要额外的网络和存储配置。安装类型选择“典型安装”。高级安装可以更精细地控制但典型安装已包含大部分必要配置。Oracle基目录会自动填入ORACLE_BASE环境变量的值/u01/app/oracle。软件位置会自动填入ORACLE_HOME/u01/app/oracle/product/11.2.0/dbhome_1。数据库文件位置使用默认的$ORACLE_BASE/oradata即可。数据库版本选择“企业版”。字符集至关重要务必选择“AL32UTF8”Unicode UTF-8字符集以支持中文和多国语言。默认的“ZHS16GBK”在全球化场景下限制较多。全局数据库名可填写orcl.yourdomain.com或简单的orcl。管理口令为SYS、SYSTEM等管理员账户设置一个强密码。务必牢记此密码。先决条件检查这是最容易卡住的一步。安装程序会自动检查所有依赖和参数。如果所有检查都通过标记为绿色直接点击“下一步”。如果出现警告黄色或失败红色“物理内存”或“交换空间”不足根据前面章节的计算扩容物理内存或交换分区。“包 ‘compat-libstdc-33’ 未找到”等依赖缺失这正是我们之前强调手动安装的原因。如果检查失败记下缺失的包名手动安装后回到此界面点击“重新检查”。“内核参数 ‘semmsl’ 设置不正确”说明/etc/sysctl.conf中的kernel.sem值未生效或不对。检查文件并执行sysctl -p然后重新检查。“用户 ‘oracle’ 的 ‘nofile’ 软限制小于 1024”检查/etc/security/limits.conf和/etc/pam.d/login配置并确保oracle用户已重新登录su - oracle。概要回顾所有安装设置确认无误后点击“完成”开始安装。安装过程此时安装程序会拷贝文件、链接库、编译代码。这个过程可能需要20分钟到1小时取决于服务器性能。请耐心等待。执行配置脚本软件安装完成后会弹出一个对话框提示需要以root权限执行两个脚本。打开一个新的终端以root用户登录服务器。按顺序执行提示路径下的脚本通常是sudo /u01/app/oraInventory/orainstRoot.sh sudo /u01/app/oracle/product/11.2.0/dbhome_1/root.sh执行root.sh时会询问“本地 bin 目录的位置”直接按回车使用默认值/usr/local/bin即可。脚本执行成功后回到安装界面点击“确定”。数据库配置助手DBCA随后安装程序会自动调用DBCA创建数据库。你会看到创建进度条。此过程也会持续一段时间。完成当出现“数据库创建完成”的提示并显示数据库的全局名称、服务器参数文件位置、企业管理器EMDatabase Express URL通常是https://主机名:1158/em时表示安装和建库全部成功。记下这些信息特别是EM URL。4. 安装后配置与基础验证安装完成并不意味着万事大吉还需要进行一些必要的配置和验证确保数据库可用、可管理。4.1 配置监听器与本地网络服务Oracle通过监听器Listener接收客户端连接。安装后通常已自动配置好一个监听器LISTENER但我们需要确认其状态并配置本地网络服务名TNS。检查监听器状态su - oracle lsnrctl status如果看到“STATUS of the LISTENER”为“READY”并且下面列出了服务如orcl说明监听器正常。启动/停止监听器如果需要lsnrctl start lsnrctl stop配置本地网络服务名TNSNAME 为了在本地方便地连接数据库需要配置$ORACLE_HOME/network/admin/tnsnames.ora文件。cd $ORACLE_HOME/network/admin vi tnsnames.ora添加以下内容根据你的实际主机名和SID修改ORCL (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST your_server_hostname_or_ip)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME orcl) # 或者 (SID orcl)通常用SERVICE_NAME ) )保存后就可以使用sqlplus sys/密码orcl as sysdba的方式连接了。4.2 验证数据库连接与基本操作使用SQL*Plus连接sqlplus / as sysdba这是操作系统认证方式无需密码直接以sysdba身份登录。如果成功会显示“Connected to: Oracle Database 11g Enterprise Edition ...”。执行基本SQL查询SELECT name, open_mode, log_mode FROM v$database; SELECT * FROM v$version;第一条语句查看数据库名和状态第二条查看数据库版本信息。创建测试用户和表CREATE USER testuser IDENTIFIED BY Test123456; GRANT CONNECT, RESOURCE TO testuser; ALTER USER testuser QUOTA UNLIMITED ON USERS; CONNECT testuser/Test123456; CREATE TABLE test_table (id NUMBER, name VARCHAR2(50)); INSERT INTO test_table VALUES (1, 麒麟系统Oracle测试); COMMIT; SELECT * FROM test_table;这一系列操作验证了数据库基本的用户管理、对象创建和DML操作功能是否正常。4.3 配置开机自启动默认情况下Oracle实例和监听器不会随系统自动启动。我们需要配置一个服务脚本。创建dbora服务脚本适用于Systemd系统如麒麟V10sudo vi /etc/systemd/system/dbora.service写入以下内容根据你的实际路径修改ORACLE_HOME和ORACLE[Unit] DescriptionOracle Database Service Afternetwork.target [Service] Typeforking EnvironmentORACLE_HOME/u01/app/oracle/product/11.2.0/dbhome_1 EnvironmentORACLE_SIDorcl Useroracle Groupoinstall ExecStart/u01/app/oracle/product/11.2.0/dbhome_1/bin/dbstart $ORACLE_HOME ExecStop/u01/app/oracle/product/11.2.0/dbhome_1/bin/dbshut $ORACLE_HOME Restarton-abort TimeoutSec300 [Install] WantedBymulti-user.target启用并启动服务sudo systemctl daemon-reload sudo systemctl enable dbora.service sudo systemctl start dbora.service sudo systemctl status dbora.service配置监听器自启动 编辑oracle用户的.bash_profile在最后添加一行让其在登录时自动启动监听器这是一种简单方法更规范的做法是再创建一个监听器的systemd服务# 在 ~/.bash_profile 末尾添加 if [ -f $ORACLE_HOME/bin/tnslsnr ]; then $ORACLE_HOME/bin/lsnrctl start /dev/null 21 fi或者也可以创建一个单独的systemd服务文件oracle-listener.service。5. 疑难问题排查与经验总结在整个安装和配置过程中我遇到了不少典型问题。这里把它们集中起来并提供排查思路。5.1 图形界面GUI无法启动问题现象执行./runInstaller后提示 “无法打开显示器” 或 “Can‘t open display”。排查步骤确认本地X ServerWindows用户确保VcXsrv或Xming已运行并设置了正确的显示编号如0.0。检查SSH连接参数连接时务必使用ssh -X userhost或ssh -Y userhost。检查DISPLAY变量在服务器上执行echo $DISPLAY。正常应为localhost:10.0或类似。如果为空手动设置export DISPLAY你的本地IP:0.0例如export DISPLAY192.168.1.100:0.0并确保本地防火墙允许了X11连接。使用xhost授权在本地X Server的命令窗口执行xhost 注意安全风险仅测试用。5.2 先决条件检查失败这是最常见的问题区域。依赖包缺失现象检查列表中出现大量红色的 “未找到” 错误。解决不要完全依赖yum。按照本文2.2节的方法手动从rpmfind等网站下载对应的.i686或.x86_64的rpm包用rpm -ivh --nodeps --force命令强制安装注意依赖关系可能需按顺序安装多个包。compat-libstdc-33、libaio-devel、pdksh或ksh是重灾区。内核参数不生效现象修改了/etc/sysctl.conf但检查仍然报错。解决执行sudo sysctl -p重新加载。检查参数名是否正确特别是kernel.sem的四个值用空格分隔。对于shmall和shmmax确保计算的值是整数没有小数点。用户资源限制未生效现象nofile或nproc限制检查失败。解决确认/etc/security/limits.conf中oracle用户的设置无误。检查/etc/pam.d/login或/etc/pam.d/sshd对于SSH登录是否包含session required pam_limits.so。最关键的一步oracle用户必须重新登录su - oracle才能使limits生效。仅仅source .bash_profile是不够的。5.3 OUIOracle Universal Installer运行缓慢或卡死可能原因主机名解析问题。OUI可能会尝试解析主机名如果/etc/hosts配置不正确会导致延迟。解决编辑/etc/hosts文件确保包含一行将主机名映射到127.0.0.1或本机实际IP。127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 your_hostname ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 your_hostname # 或者使用服务器实际IP 192.168.1.100 your_hostname修改后重启网络或直接重启服务器。5.4 数据库创建DBCA失败现象在安装最后阶段DBCA进度条卡住或报错退出。常见错误与解决ORA-27125: unable to create shared memory segment共享内存问题。检查/dev/shm挂载点大小df -h /dev/shm它应大于memory_target或sga_target参数设置。可以临时增大sudo mount -o remount,size8G /dev/shm。字符集相关问题如果在建库后期报字符集错误很可能是在安装时选错了字符集。最稳妥的方案是重装并在“典型安装”的字符集选项处明确选择“AL32UTF8”。试图后期修改字符集非常复杂且风险高。空间不足检查/tmp和 Oracle数据文件目标目录的剩余空间。5.5 安装后的连接问题监听器无法启动或连接超时检查监听器配置文件$ORACLE_HOME/network/admin/listener.ora。默认配置通常可用。检查防火墙是否放行了1521端口sudo firewall-cmd --list-ports麒麟可能使用firewalld。添加规则sudo firewall-cmd --permanent --add-port1521/tcp sudo firewall-cmd --reload。使用tnsping工具测试tnsping orcl前提是配置了tnsnames.ora。sqlplus: command not found 环境变量ORACLE_HOME和PATH未正确设置。确保已按照2.3节正确编辑了oracle用户的.bash_profile并执行了source。5.6 性能与稳定性调优初步建议安装只是第一步要让Oracle在麒麟系统上稳定高效运行后续还需要持续观察和调优。监控内存使用关注memory_target和sga_target的设置是否合理。初期可以设置为物理内存的40-60%。通过sqlplus连接后执行show parameter target查看。日志轮转定期检查$ORACLE_BASE/diag/rdbms/db_name/instance_name/trace目录下的告警日志alert_sid.log关注其中的错误ORA-和警告信息。备份策略即使是在测试环境也要尽早规划并实施RMAN备份策略。这是DBA的底线。系统层面持续监控服务器的CPU、内存、I/O和网络状况。麒麟系统自带的监控工具或top、vmstat、iostat是好朋友。整个安装过程最耗费时间的往往不是点击“下一步”而是前期依赖包的准备和系统参数的调试。尤其是在麒麟这样一个相对“非主流”的Linux发行版上更需要耐心和细致的排查。我的建议是严格按照检查清单操作遇到报错不要慌仔细阅读错误信息十有八九都能在本文提到的几个方面找到原因。成功安装并看到“Database creation complete”的那一刻你会觉得所有的折腾都是值得的。这套环境稳定运行了几个月承载的业务应用也没有出现兼容性问题证明了在麒麟SP3 x86系统上部署Oracle 11g是完全可行的技术路线。