简介这份资源面向需要在龙蜥Anolis操作系统上部署Oracle 11g数据库的运维与DBA人员提供了一套可自动化完成安装与数据恢复的整合包。Anolis OS作为阿里云维护的企业级Linux发行版是运行Oracle数据库的稳定基础环境而该包通过脚本方式简化了原本繁琐的安装流程。压缩包共11个文件以7个rpm安装包为主体另含chkconfig服务配置、S01shm_load共享内存加载脚本、install.sh自动化安装脚本及60-oracle.conf系统参数配置文件整体约334.17MB。安装脚本可自动处理环境变量设置、依赖安装、RPM解压安装、数据库实例创建、用户权限分配、监听器配置及TNS连接设置等环节同时支持通过数据泵工具还原DMP备份文件降低手动操作复杂度与出错概率。目前已有3017人学习下载适合希望快速搭建Oracle 11g实验或生产环境、并需要恢复既有数据的读者参考使用。1. 龙蜥 Anolis 上装 Oracle 11g为什么我坚持用 rpm 包而不是 runInstaller第一次在龙蜥 Anolis OS 8 上装 Oracle 11g 时我走了官方 runInstaller 那条路结果卡在 glibc 版本和 libaio 依赖上整整一个下午。后来换成 oracle11g.rpm 安装包二十分钟搞定实例创建。这不是说 rpm 包万能而是在龙蜥这种 RHEL 8 系衍生版上Oracle 11g 的官方安装器对系统库的假设太老了rpm 包反而把依赖关系提前锁死少踩很多玄学坑。这篇笔记记录的就是我反复装过几轮之后觉得最稳的一条路径从环境确认、rpm 包安装、参数配置到建库验证每一步都给出可复现的命令和参数取舍。适合正在龙蜥上折腾 oracle11g 数据库安装包、被依赖和内核参数卡住的开发者也适合想从 runInstaller 迁移到 rpm 方式的熟手参考。2. 装之前先把环境对齐龙蜥版本、内核参数和依赖清单2.1 确认龙蜥版本和 Oracle 11g 的兼容边界Oracle 11g 官方认证过的 Linux 版本停留在 RHEL 6/7 时代龙蜥 Anolis OS 8 虽然 ABI 兼容 RHEL 8但默认的 glibc 2.28 和 systemd 版本跟 Oracle 11g 预期的不完全一致。我一般会先确认三件事系统版本、内核版本、glibc 版本。命令很简单# 查看龙蜥发行版和内核 cat /etc/anolis-release uname -r # 查看 glibc 版本Oracle 11g 对 2.17 以上基本能跑 ldd --version | head -1如果/etc/anolis-release显示 Anolis OS 8.x内核在 4.18 以上glibc 不低于 2.28那就可以继续。这里有个版本取舍Anolis OS 7 更接近 RHEL 7理论上跟 Oracle 11g 的兼容性更好但 7 的软件源已经逐步收缩新机器我倾向用 8然后用 rpm 包绕过安装器的版本检查。如果你手头是 Anolis OS 7.9那更省事直接按 RHEL 7 的依赖清单准备即可。2.2 内核参数和用户资源限制怎么改Oracle 11g 对共享内存、信号量、文件句柄有硬性要求龙蜥默认值不够。我习惯在/etc/sysctl.d/下单独放一个配置文件而不是直接改/etc/sysctl.conf这样以后排查能一眼看出是 Oracle 加的。# 创建 Oracle 专用内核参数文件 cat /etc/sysctl.d/99-oracle11g.conf EOF # 共享内存段最大值Oracle 11g SGA 通常不超过 4G kernel.shmmax 4294967295 # 共享内存页数按物理内存的 90% 估算 kernel.shmall 1073741824 # 信号量Oracle 推荐值 kernel.sem 250 32000 100 128 # 文件句柄 fs.file-max 6815744 # 异步 IO 请求数 fs.aio-max-nr 1048576 # 网络端口范围 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 # 生效 sysctl -p /etc/sysctl.d/99-oracle11g.confkernel.shmmax这个值我一般设成比 SGA 目标值大一圈比如你计划 SGA 给 3G那 shmmax 至少 4G。kernel.sem四个数字分别是每个信号集最大信号数、系统级最大信号数、每次 semop 调用最大操作数、系统级最大信号集数Oracle 官方推荐的就是 250 32000 100 128照抄即可。改完用sysctl -a | grep shm确认一下别改完没生效就开始装。用户资源限制放在/etc/security/limits.d/下cat /etc/security/limits.d/99-oracle11g.conf EOF # 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 EOF这里nproc和nofile是必须的stack在 11g 的某些安装阶段会用到。改完重新登录 oracle 用户用ulimit -a验证别在当前 shell 里直接测limits 只对新会话生效。2.3 依赖包清单和 oracle 用户创建龙蜥 8 上 Oracle 11g 需要的依赖我整理成一张表装之前一次性装完比装到一半报错再补要省心依赖包用途龙蜥 8 安装命令libaio异步 IOdnf install -y libaiolibaio-devel开发头文件dnf install -y libaio-develcompat-libstdc-33C 旧版运行库dnf install -y compat-libstdc-33elfutils-libelf-devel编译工具dnf install -y elfutils-libelf-develgcc编译器dnf install -y gccgcc-cC 编译器dnf install -y gcc-cmake构建工具dnf install -y makesysstat系统监控dnf install -y sysstatunixODBCODBC 驱动dnf install -y unixODBCunixODBC-develODBC 开发dnf install -y unixODBC-develcompat-libstdc-33在龙蜥 8 默认源里可能没有常见做法是启用 EPEL 或者从 RHEL 7 的兼容包手动装。我一般先dnf install -y epel-release再试如果还找不到就去翻龙蜥的 extras 仓库。这个包不装rpm 安装阶段会直接报依赖错误别跳过。创建 oracle 用户和组# 创建 oinstall 和 dba 组 groupadd -g 54321 oinstall groupadd -g 54322 dba # 创建 oracle 用户家目录 /home/oracle useradd -u 54321 -g oinstall -G dba -m -s /bin/bash oracle # 设置密码 passwd oracle用户 ID 和组 ID 我习惯用 54321/54322 这种固定值多台机器上保持一致以后迁移或者挂共享存储时少很多权限麻烦。建完用id oracle确认一下组关系oinstall是主组dba是附加组这个顺序别搞反。3. 用 oracle11g.rpm 安装从上传到静默配置3.1 rpm 包上传、校验和安装顺序拿到 oracle11g.rpm 之后先别急着rpm -ivh。我一般先放到/opt/soft/下用sha256sum对一下哈希确认传输过程没损坏。然后看包结构# 查看 rpm 包信息确认版本和依赖 rpm -qpi oracle11g.rpm rpm -qpR oracle11g.rpmrpm -qpi看包名、版本、架构rpm -qpR列出依赖。如果依赖里有你没装的先补上。确认无误后安装# 安装 oracle11g.rpm-h 显示进度-v 显示详情 rpm -ivh oracle11g.rpm如果报依赖错误用rpm -ivh oracle11g.rpm --nodeps强制装但这是下策装完大概率跑不起来。我一般会先把缺的依赖补全再装。安装完成后Oracle 的二进制文件通常在/u01/app/oracle/product/11.2.0/dbhome_1/下具体路径看 rpm 包的打包方式用rpm -ql oracle11g.rpm | head -20可以看文件清单。这里有个关键取舍rpm 包安装不会自动创建实例只装软件。实例创建要靠dbca或者静默建库脚本。很多人以为 rpm 装完就能用结果连监听都没起这是最常见的误解。3.2 环境变量配置ORACLE_HOME 和 PATH 怎么写环境变量我习惯写在 oracle 用户的.bash_profile里而不是/etc/profile避免影响其他用户。# 切换到 oracle 用户后编辑 ~/.bash_profile su - oracle cat ~/.bash_profile EOF # Oracle 11g 环境变量 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:/lib:/usr/lib export NLS_LANGAMERICAN_AMERICA.AL32UTF8 EOF # 生效 source ~/.bash_profileORACLE_BASE是根目录ORACLE_HOME是产品目录ORACLE_SID是实例名这三个必须对。LD_LIBRARY_PATH不加的话sqlplus启动时会报找不到libclntsh.so。NLS_LANG设成AL32UTF8是为了避免中文乱码如果你确定只用英文可以不改但生产环境我建议统一 UTF8。验证环境变量echo $ORACLE_HOME which sqlplus sqlplus -Vsqlplus -V能输出版本号说明二进制和环境变量都对了。如果报command not found检查PATH里$ORACLE_HOME/bin是不是写在了前面。3.3 静默建库dbca 参数怎么给rpm 装完软件后建库我一般用dbca的静默模式比图形界面稳也方便脚本化。# 静默建库-silent 表示无交互 dbca -silent \ -createDatabase \ -templateName General_Purpose.dbc \ -gdbName orcl \ -sid orcl \ -responseFile NO_VALUE \ -characterSet AL32UTF8 \ -sysPassword Oracle123 \ -systemPassword Oracle123 \ -datafileDestination /u01/app/oracle/oradata \ -redoLogFileSize 100 \ -emConfiguration NONE-templateName用General_Purpose.dbc是通用模板-gdbName和-sid一般保持一致。-characterSet必须跟NLS_LANG匹配否则建完库连进去中文全是问号。-emConfiguration NONE是关掉 Enterprise Manager11g 的 EM 在龙蜥 8 上经常起不来关掉省事。建库过程大概五到十分钟看磁盘性能。建完会提示Database creation complete这时候监听可能还没起需要手动配。3.4 监听配置和启动listener.ora 和 tnsnames.ora监听用netca静默配或者直接手写listener.ora。我倾向手写因为参数一目了然。# 创建监听配置文件 mkdir -p $ORACLE_HOME/network/admin cat $ORACLE_HOME/network/admin/listener.ora EOF LISTENER (DESCRIPTION_LIST (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST 0.0.0.0)(PORT 1521)) ) ) EOF # 启动监听 lsnrctl start # 查看监听状态 lsnrctl statusHOST写0.0.0.0是监听所有网卡如果只想本机访问改成127.0.0.1。PORT默认 1521改端口的话记得防火墙同步放行。lsnrctl status里要能看到orcl实例的状态是READY如果是BLOCKED说明实例没注册上需要alter system register;手动注册。tnsnames.ora是客户端连接用的本机 sqlplus 连本地库其实可以不走 tnsnames但配了以后连接串更清晰cat $ORACLE_HOME/network/admin/tnsnames.ora EOF ORCL (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST 127.0.0.1)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME orcl) ) ) EOFSERVER DEDICATED是专用服务器模式11g 默认就是这个。SERVICE_NAME跟建库时的gdbName一致。配完用tnsping ORCL测一下能通说明监听和 tnsnames 都对上了。4. 避坑与排查龙蜥上装 Oracle 11g 最容易翻车的五件事4.1 现象rpm 安装报 libaio.so.1 缺失但 libaio 明明装了原因龙蜥 8 的 libaio 装的是 64 位版本但 Oracle 11g 的某些二进制是 32 位的需要libaio.i686。解决dnf install -y libaio.i686如果源里没有启用multilib仓库再装。装完用ldd $ORACLE_HOME/bin/oracle | grep libaio确认链接到了正确的库。4.2 现象dbca 建库到 80% 卡住日志显示 ORA-27125原因kernel.shmmax设得太小SGA 分配不到共享内存。解决把kernel.shmmax调到比 SGA 目标值大 1G 以上kernel.shmall同步调大然后sysctl -p生效重新建库。如果已经建了一半先dbca -silent -deleteDatabase -sourceDB orcl删掉再重建。4.3 现象sqlplus 能连但中文显示成问号原因NLS_LANG跟数据库字符集不匹配。解决确认数据库字符集是AL32UTF8然后export NLS_LANGAMERICAN_AMERICA.AL32UTF8重新登录 sqlplus。如果数据库字符集是ZHS16GBK那NLS_LANG要改成SIMPLIFIED CHINESE_CHINA.ZHS16GBK两边必须一致。4.4 现象监听启动报 TNS-12555权限不够原因/var/tmp/.oracle目录权限不对Oracle 11g 需要在这个目录下建 socket 文件。解决chown -R oracle:oinstall /var/tmp/.oracle如果目录不存在就手动建一个。龙蜥 8 的/var/tmp默认权限是 1777但.oracle子目录需要 oracle 用户可写。4.5 现象rpm 装完找不到 dbca 和 netca原因rpm 包可能只装了最小集管理工具在单独的包里。解决rpm -ql oracle11g.rpm | grep dbca确认工具路径如果确实没有需要补装oracle11g-tools.rpm之类的附属包。我一般会在安装前用rpm -qpl看完整文件列表确认dbca、netca、sqlplus都在。5. 装完怎么验证三条命令确认实例真的能跑装完不验证等于没装。我一般走三条命令从进程、连接、数据三个层面确认。第一条看进程和监听# 确认 Oracle 后台进程存在 ps -ef | grep ora_ | grep -v grep # 确认监听状态 lsnrctl statusps -ef里应该能看到ora_pmon_orcl、ora_smon_orcl、ora_dbw0_orcl这些关键进程。如果只有ora_pmon没有ora_smon说明实例启动到一半挂了去$ORACLE_BASE/diag/rdbms/orcl/orcl/trace/alert_orcl.log看报错。lsnrctl status里Service orcl has 1 instance(s)这行是关键实例状态必须是READY。第二条用 sqlplus 连进去查版本和状态# 以 sysdba 身份连接 sqlplus / as sysdba EOF -- 查看实例状态 SELECT status FROM v$instance; -- 查看数据库版本 SELECT banner FROM v$version WHERE ROWNUM 1; -- 查看字符集 SELECT value FROM nls_database_parameters WHERE parameter NLS_CHARACTERSET; EXIT; EOFv$instance的status应该是OPEN如果是MOUNTED说明数据库没完全打开执行ALTER DATABASE OPEN;。v$version会显示Oracle Database 11g Enterprise Edition Release 11.2.0.x.x确认版本号跟你装的 rpm 包一致。字符集查出来是AL32UTF8就对了。第三条建一张测试表验证读写sqlplus / as sysdba EOF -- 创建测试表空间和用户 CREATE TABLESPACE test_ts DATAFILE /u01/app/oracle/oradata/orcl/test_ts.dbf SIZE 100M; CREATE USER test_user IDENTIFIED BY Test123 DEFAULT TABLESPACE test_ts; GRANT CONNECT, RESOURCE TO test_user; -- 切换到测试用户建表插入 CONNECT test_user/Test123 CREATE TABLE t_check (id NUMBER, name VARCHAR2(50)); INSERT INTO t_check VALUES (1, anolis_oracle11g); COMMIT; SELECT * FROM t_check; EXIT; EOF能建表、能插入、能查出来说明实例的读写链路完全通了。如果建表时报ORA-01109: database not open回到上一步确认实例状态。如果插入中文乱码回到 4.3 检查NLS_LANG。这三条走完我才会把机器交给应用侧。从那以后我每次装完 Oracle 11g不管多急都强制走一遍ps -ef、lsnrctl status、sqlplus建表这三步少一步后面都可能出幺蛾子。希望帮到你。本文还有配套的精品资源点击获取