银河麒麟V10 SP3系统安装Oracle 11g全流程与疑难问题解决
1. 项目概述与背景
最近在给一个老客户的内部系统做迁移,他们的服务器环境比较特殊,用的是国产的银河麒麟操作系统,具体版本是V10 SP3 for x86_64。这套系统上跑着一个核心的业务应用,后端数据库是Oracle 11g。客户的目标很明确:要把整个环境,包括操作系统和应用,从旧的硬件平移到新的国产服务器上。这意味着,我得在全新的麒麟SP3 x86系统上,从头搭建一套Oracle 11g数据库环境。
这活儿听起来像是常规的数据库安装,但真正动起手来才发现,在麒麟系统上装Oracle,跟我们在熟悉的CentOS或者RHEL上操作,完全是两码事。麒麟系统虽然底层也是Linux内核,但它在软件包管理、依赖库、甚至一些系统参数的默认配置上,都有自己的一套“脾气”。网上能找到的教程,大多是基于RedHat系的,直接照搬过来,十有八九会卡在某个依赖报错或者参数校验上。我花了差不多两天时间,把各种坑都踩了一遍,才最终把数据库稳稳当当地跑起来。今天就把这个完整的安装过程、遇到的典型问题以及解决办法,系统地梳理出来。如果你也面临在银河麒麟V10 SP3(x86)上部署Oracle 11g的需求,这篇记录应该能帮你省下不少折腾的时间。
2. 安装前的深度准备工作
在麒麟系统上安装Oracle,准备工作的重要性要占到整个过程的50%以上。仓促开始安装,几乎必然会在中途遇到各种依赖缺失和参数错误。我们必须把系统环境调整到Oracle安装程序期望的状态。
2.1 系统与硬件资源核查
首先,我们需要确认系统环境是否满足Oracle 11g(11.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_SID=orcl # 你的数据库实例名,可自定义 export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 # 设置字符集,非常重要!保存后,执行
source ~/.bash_profile使配置生效。这里有个坑:LD_LIBRARY_PATH必须包含/usr/lib,否则安装或运行时会找不到一些系统库。
2.4 修改系统内核参数与资源限制
Oracle数据库对系统内核参数有特定要求,需要修改/etc/sysctl.conf文件。
编辑sysctl.conf:
sudo 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字节),页大小4KB(4096字节)。
kernel.shmall = 8589934592 / 4096 = 2097152。kernel.shmmax通常设置为物理内存的一半或更多,这里设为4GB-1(4294967295)。使内核参数生效:
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_hugepage=never numa=off` # 例如:GRUB_CMDLINE_LINUX="... transparent_hugepage=never numa=off" # 更新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 LANG=en_US.UTF-8
3.2 启动图形化安装界面
由于我们是通过SSH远程连接,需要启用X11转发来显示图形界面。
- 在本地客户端(如Windows上的MobaXterm、Xshell,或macOS/Linux终端)确保X11转发已开启。
- SSH连接时使用
-X或-Y参数(例如:ssh -X oracle@服务器IP)。 - 在服务器端,切换到oracle用户,进入解压目录,运行安装程序:
如果遇到“无法打开显示器”的错误:cd /tmp/database ./runInstaller- 确认本地已安装X Server(如Windows的VcXsrv,macOS的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等管理员账户设置一个强密码。务必牢记此密码。
- Oracle基目录:会自动填入
先决条件检查:这是最容易卡住的一步。安装程序会自动检查所有依赖和参数。
- 如果所有检查都通过(标记为绿色),直接点击“下一步”。
- 如果出现警告(黄色)或失败(红色):
- “物理内存”或“交换空间”不足:根据前面章节的计算,扩容物理内存或交换分区。
- “包 ‘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创建数据库。你会看到创建进度条。此过程也会持续一段时间。
完成:当出现“数据库创建完成”的提示,并显示数据库的全局名称、服务器参数文件位置、企业管理器(EM)Database 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系统,如麒麟V10):
sudo vi /etc/systemd/system/dbora.service写入以下内容(根据你的实际路径修改
ORACLE_HOME和ORACLE):[Unit] Description=Oracle Database Service After=network.target [Service] Type=forking Environment="ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1" Environment="ORACLE_SID=orcl" User=oracle Group=oinstall 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 Restart=on-abort TimeoutSec=300 [Install] WantedBy=multi-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 2>&1 & fi或者,也可以创建一个单独的systemd服务文件
oracle-listener.service。
5. 疑难问题排查与经验总结
在整个安装和配置过程中,我遇到了不少典型问题。这里把它们集中起来,并提供排查思路。
5.1 图形界面(GUI)无法启动
- 问题现象:执行
./runInstaller后提示 “无法打开显示器” 或 “Can‘t open display”。 - 排查步骤:
- 确认本地X Server:Windows用户确保VcXsrv或Xming已运行,并设置了正确的显示编号(如
0.0)。 - 检查SSH连接参数:连接时务必使用
ssh -X user@host或ssh -Y user@host。 - 检查DISPLAY变量:在服务器上执行
echo $DISPLAY。正常应为localhost:10.0或类似。如果为空,手动设置:export DISPLAY=你的本地IP:0.0(例如export DISPLAY=192.168.1.100:0.0),并确保本地防火墙允许了X11连接。 - 使用xhost授权:在本地X Server的命令窗口执行
xhost +(注意安全风险,仅测试用)。
- 确认本地X Server:Windows用户确保VcXsrv或Xming已运行,并设置了正确的显示编号(如
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 OUI(Oracle 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,size=8G /dev/shm。 - 字符集相关问题:如果在建库后期报字符集错误,很可能是在安装时选错了字符集。最稳妥的方案是重装,并在“典型安装”的字符集选项处明确选择“AL32UTF8”。试图后期修改字符集非常复杂且风险高。
- 空间不足:检查
/tmp和 Oracle数据文件目标目录的剩余空间。
- ORA-27125: unable to create shared memory segment:共享内存问题。检查
5.5 安装后的连接问题
监听器无法启动或连接超时:
- 检查监听器配置文件
$ORACLE_HOME/network/admin/listener.ora。默认配置通常可用。 - 检查防火墙是否放行了1521端口:
sudo firewall-cmd --list-ports(麒麟可能使用firewalld)。添加规则:sudo firewall-cmd --permanent --add-port=1521/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是完全可行的技术路线。