简介这份资源面向需要在龙蜥Anolis操作系统上部署Oracle 11g数据库的运维与DBA人员提供了一套可自动化完成安装与数据恢复的整合包。Anolis OS作为阿里云维护的企业级Linux发行版是运行Oracle数据库的稳定基础环境而Oracle 11g的常规安装涉及依赖处理、环境变量配置、实例创建与监听器设置等繁琐环节本包通过脚本将这些步骤串联起来降低手动操作复杂度。压缩包共11个文件以7个rpm安装包为主另含chkconfig、S01shm_load、install.sh及conf配置文件整体约334.17MB覆盖安装介质、系统参数调优与自动化执行脚本。已有3017人学习下载。读者可借助install.sh完成环境变量设置、依赖安装、RPM部署与数据库实例初始化并利用包内工具还原DMP备份文件适合希望快速搭建测试环境或迁移恢复数据的数据库从业者参考。1. 龙蜥 Anolis 上装 Oracle 11g为什么我坚持用 rpm 包而不是 runInstaller第一次在龙蜥 Anolis OS 上装 Oracle 11g 的人十有八九会卡在同一个地方图形化 runInstaller 跑不起来或者跑起来了在链接阶段报一堆.so找不到。我见过太多人在这上面耗掉一整个下午最后放弃转去装 MySQL。其实在 Anolis 8 这类 RHEL8 系发行版上最稳的路子反而是用 oracle11g.rpm 这套预编译包——它把依赖、内核参数、用户组、systemd 服务全打包好了装完直接systemctl start oracle就能连。这套方案适合两类人一是要在国产化环境里跑老业务系统、必须上 Oracle 11g 的运维二是做数据库实验、不想折腾图形界面的开发者。前提是你的机器是 x86_64 架构、内存不低于 2GB、磁盘留够 15GB。装不好会怎样轻则监听起不来重则把系统自带的 glibc 搞乱连 yum 都用不了。所以下面每一步我都按「先看环境、再动手、最后验证」的顺序写你照着走就行。2. 装之前先把环境对齐Anolis 版本、内核参数和依赖清单2.1 确认 Anolis 版本和系统架构Oracle 11g 的 rpm 包对系统版本很挑。Anolis 8.x 对应的是 RHEL8 内核 4.18而 Oracle 11g 官方只认证到 RHEL7。所以第一步不是急着下载而是先看清楚自己站在哪块地上。# 查看发行版和内核 cat /etc/anolis-release uname -r # 查看架构必须是 x86_64 arch输出里如果anolis-release显示 8.x内核是 4.18 或 5.10那就可以继续。如果是 Anolis 7.x内核 3.10那更省事兼容性更好。架构必须是x86_64aarch64 的机器别往下走Oracle 11g 没有对应的 rpm 包。我一般还会顺手看一眼 glibc 版本ldd --version | head -1Anolis 8 自带 glibc 2.28Oracle 11g 的二进制是在 2.17 上编的所以后面要装兼容包。这一步先记下版本号等会儿选 compat 包要用。2.2 内核参数和资源限制怎么调Oracle 对共享内存和信号量的要求是硬性的不调的话实例根本起不来。Anolis 8 默认的kernel.shmmax往往偏小需要手动改。# 编辑 sysctl 配置 cat /etc/sysctl.d/99-oracle.conf EOF # Oracle 11g 共享内存段最大值按物理内存一半给 kernel.shmmax 2147483648 # 共享内存页数 kernel.shmall 524288 # 信号量250 个数组每个 32000 个信号 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-oracle.confkernel.shmmax这个值我一般设成物理内存的一半2GB 内存就写 10737418244GB 写 2147483648。设太大浪费设太小 Oracle 会报ORA-27102: out of memory。kernel.sem四个数字分别是信号量数组最大数、每个数组的信号量数、单次 semop 调用最大操作数、系统级信号量最大数。Oracle 官方推荐值就是250 32000 100 128照抄即可。资源限制改/etc/security/limits.confcat /etc/security/limits.conf EOF 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这里oracle是后面要建的用户名。如果你打算用别的名字这里同步改。nofile给到 65536 是为了避免监听器在高并发下报TNS-12500。2.3 依赖包和兼容库一次装齐Anolis 8 的仓库里没有 Oracle 需要的全部老库尤其是libaio和compat-libstdc。我习惯先把能装的都装上缺的再单独找。# 基础依赖 dnf install -y binutils compat-libcap1 compat-libstdc-33 \ gcc gcc-c glibc glibc-devel ksh libaio libaio-devel \ libgcc libstdc libstdc-devel make sysstat unixODBC \ unixODBC-devel readline readline-devel libXext libXtst \ libX11 libXau libXi如果compat-libstdc-33提示找不到说明 Anolis 8 的源里已经移除了这个包。常见做法是从 Anolis 7 的源里单独下 rpm 手动装或者用libstdc的兼容软链接顶一下。我一般会先试# 检查是否已有兼容库 ls /usr/lib64/libstdc.so.6 # 如果版本够高做个软链 ln -s /usr/lib64/libstdc.so.6 /usr/lib64/libstdc.so.5但软链不是长久之计最好还是找到compat-libstdc-33的 rpm 装上。装完用rpm -qa | grep compat确认一下。提示依赖装完后先别急着装 Oracle跑一遍ldd检查关键二进制缺不缺库比装完再回头补要省事得多。3. 下载和安装 oracle11g.rpm用户、目录、包顺序一个都不能乱3.1 建 oracle 用户和目录结构Oracle 不允许用 root 跑实例必须单独建用户。这一步看着简单但目录权限写错的话后面 sqlplus 连不上会查半天。# 建用户组和用户 groupadd -g 54321 oinstall groupadd -g 54322 dba useradd -u 54321 -g oinstall -G dba -m -s /bin/bash oracle # 设密码 passwd oracle # 建目录 mkdir -p /u01/app/oracle/product/11.2.0/dbhome_1 mkdir -p /u01/app/oraInventory mkdir -p /u01/app/oracle/oradata # 改属主 chown -R oracle:oinstall /u01 chmod -R 775 /u01oinstall是 Oracle 清单组dba是数据库管理员组。用户 ID 和组 ID 用 54321/54322 是 Oracle 的惯例不是必须但保持一致以后迁移省心。目录结构里dbhome_1是 Oracle 主目录oraInventory是安装清单oradata放数据文件。这三个目录分开建以后备份和扩容都清楚。3.2 rpm 包的安装顺序和参数oracle11g.rpm 通常不是一个包而是一组oracle11g-database.rpm、oracle11g-client.rpm、oracle11g-preinstall.rpm。安装顺序有讲究先装 preinstall 再装 database。# 先装预配置包它会自动建用户和调参数 rpm -ivh oracle11g-preinstall-11.2.0-1.el8.x86_64.rpm # 再装数据库主包 rpm -ivh oracle11g-database-11.2.0-1.el8.x86_64.rpm # 最后装客户端工具 rpm -ivh oracle11g-client-11.2.0-1.el8.x86_64.rpm如果 preinstall 包已经帮你建好了 oracle 用户那 3.1 里的建用户步骤可以跳过但目录还是要手动建因为 rpm 不会自动创建/u01下的数据目录。装的时候如果报依赖冲突用--nodeps强行装不是好习惯先看看缺什么# 查看 rpm 依赖 rpm -qpR oracle11g-database-11.2.0-1.el8.x86_64.rpm把缺的包装上再重试。--force和--nodeps只在确认不影响系统库的时候用否则容易把 glibc 搞坏。3.3 环境变量配置和生效装完 rpm 后Oracle 的二进制在/usr/lib/oracle/11.2/client64/bin或者/u01/app/oracle/product/11.2.0/dbhome_1/bin取决于包怎么打的。我一般统一在 oracle 用户的.bash_profile里配# 切到 oracle 用户 su - oracle # 编辑环境变量 cat ~/.bash_profile EOF 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/lib64 export NLS_LANGAMERICAN_AMERICA.AL32UTF8 EOF # 生效 source ~/.bash_profileORACLE_SID是实例名我习惯用orcl你可以在建库时改成别的。NLS_LANG设成AL32UTF8是为了避免中文乱码如果业务库是 ZHS16GBK这里要对应改。LD_LIBRARY_PATH里加上/usr/lib64是为了让 Oracle 能找到系统的兼容库。注意环境变量一定要在 oracle 用户下配root 下配了没用因为实例是以 oracle 身份跑的。4. 建库和监听配置dbca 静默模式与 netca 的取舍4.1 用 dbca 静默建库rpm 包装完后数据库软件有了但实例还没建。图形化 dbca 在 Anolis 上经常因为缺 X11 转发而失败所以直接用静默模式。# 以 oracle 用户执行 dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbName orcl \ -sid orcl \ -responseFile NO_VALUE \ -characterSet AL32UTF8 \ -memoryPercentage 40 \ -emConfiguration NONE \ -datafileDestination /u01/app/oracle/oradata \ -redoLogFileSize 100 \ -sampleSchema false-gdbName和-sid一般保持一致都写orcl。-memoryPercentage 40表示用物理内存的 40% 给 SGA 和 PGA2GB 内存的机器就是 800MB 左右够用。-emConfiguration NONE是关掉 Enterprise Manager那东西在 Anolis 8 上基本跑不起来关了省心。-sampleSchema false不建示例用户避免多余的表空间占用。建库过程大概 3 到 5 分钟看到Database creation complete就算成功。如果中途报ORA-00845: MEMORY_TARGET not supported说明/dev/shm太小改一下# 查看 /dev/shm 大小 df -h /dev/shm # 临时扩大 mount -o remount,size2G /dev/shm # 永久生效写 fstab echo tmpfs /dev/shm tmpfs defaults,size2G 0 0 /etc/fstab4.2 配置监听器监听器是客户端连进来的入口不配的话本地 sqlplus 能连远程连不上。# 以 oracle 用户执行 netca -silent -responseFile /u01/app/oracle/product/11.2.0/dbhome_1/assistants/netca/netca.rsp如果 netca 的响应文件找不到就手写listener.oracat $ORACLE_HOME/network/admin/listener.ora EOF LISTENER (DESCRIPTION_LIST (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST 0.0.0.0)(PORT 1521)) ) ) EOFHOST写0.0.0.0表示监听所有网卡写localhost就只能本机连。生产环境建议写具体 IP避免暴露太多。然后启动监听lsnrctl start lsnrctl statusstatus里看到Instance orcl, status READY就对了。如果显示BLOCKED多半是local_listener参数没设进 sqlplus 执行ALTER SYSTEM SET local_listener(ADDRESS(PROTOCOLTCP)(HOST127.0.0.1)(PORT1521)); ALTER SYSTEM REGISTER;4.3 建表空间和用户实例起来后别急着用 sys 干活先建业务表空间和用户。-- 以 sysdba 登录 sqlplus / as sysdba -- 建表空间 CREATE TABLESPACE app_data DATAFILE /u01/app/oracle/oradata/orcl/app_data01.dbf SIZE 500M AUTOEXTEND ON NEXT 100M MAXSIZE 10G; -- 建用户 CREATE USER appuser IDENTIFIED BY App2024 DEFAULT TABLESPACE app_data TEMPORARY TABLESPACE temp; -- 授权 GRANT CONNECT, RESOURCE TO appuser; GRANT CREATE SESSION, CREATE TABLE, CREATE SEQUENCE TO appuser; -- 退出 EXIT;表空间AUTOEXTEND ON一定要开不然数据写满 500M 就报ORA-01653。用户密码用双引号包起来因为里面有特殊字符。授权按最小权限给别直接GRANT DBA生产环境这是大忌。5. 避坑排查装 Oracle 11g 在 Anolis 上最容易翻车的五件事5.1 现象sqlplus 报error while loading shared libraries: libclntsh.so.11.1原因LD_LIBRARY_PATH没包含$ORACLE_HOME/lib或者环境变量在 root 下配了但用 oracle 用户跑。解决确认当前用户是 oracle然后echo $LD_LIBRARY_PATH看有没有$ORACLE_HOME/lib。没有就重新source ~/.bash_profile。如果还不行检查$ORACLE_HOME/lib下有没有libclntsh.so.11.1这个文件rpm 装的时候可能漏了。5.2 现象dbca 建库到 45% 卡住日志报ORA-27102: out of memory原因kernel.shmmax设得比物理内存还大或者/dev/shm太小。解决sysctl kernel.shmmax看当前值改成物理内存的一半。df -h /dev/shm看大小小于 1G 就按 4.1 里的方法扩。改完重启一下sysctl -p再重新建库。5.3 现象监听器启动报TNS-12547: TNS:lost contact原因listener.ora里HOST写了一个本机没有的 IP或者 1521 端口被占用。解决netstat -tlnp | grep 1521看谁占了端口。如果是别的服务改监听端口或者停掉那个服务。HOST改成0.0.0.0或127.0.0.1再试。5.4 现象rpm 安装时提示file /usr/lib64/libstdc.so.6 from install conflicts原因系统自带的 libstdc 和 rpm 包里带的版本冲突。解决不要用--force覆盖先rpm -qa | grep libstdc看已装版本。如果系统版本更高用rpm -ivh --replacefiles让 rpm 包里的文件覆盖但覆盖前备份/usr/lib64/libstdc.so.6。更稳的做法是只装 client 包不装 database 包里的兼容库。5.5 现象sqlplus 连上后执行查询报ORA-12705: Cannot access NLS data files原因NLS_LANG设成了系统不支持的字符集或者$ORACLE_HOME/nls/data目录权限不对。解决echo $NLS_LANG确认是AMERICAN_AMERICA.AL32UTF8。然后ls -l $ORACLE_HOME/nls/data看权限必须是 oracle 用户可读。权限不对就chown -R oracle:oinstall $ORACLE_HOME/nls。提示这五条里前三条我几乎每次装都会碰到至少一条建议装之前先把 5.1 和 5.2 的检查命令跑一遍能省不少回头路。6. 装完怎么验证三条命令确认实例真的能跑装完不验证等于没装。我一般按「监听通不通、实例活没活、数据写不写得进去」三步走。第一步用lsnrctl status看监听器状态。输出里要有Instance orcl, status READY并且下面列出至少一个Handler。如果只有status BLOCKED说明实例没注册到监听回 4.2 检查local_listener。第二步用 sqlplus 以 sysdba 登录查实例状态sqlplus / as sysdba SELECT instance_name, status, database_status FROM v$instance;期望输出INSTANCE_NAMESTATUSDATABASE_STATUSorclOPENACTIVE如果STATUS是MOUNTED说明数据库没打开执行ALTER DATABASE OPEN;。如果是STARTED那实例还没挂载检查控制文件路径。第三步用业务用户连一次建表插数据再删掉确认读写都正常-- 用 appuser 登录 sqlplus appuser/App2024localhost:1521/orcl -- 建测试表 CREATE TABLE t_test (id NUMBER, name VARCHAR2(50)); -- 插数据 INSERT INTO t_test VALUES (1, anolis); -- 查数据 SELECT * FROM t_test; -- 删表 DROP TABLE t_test; -- 退出 EXIT;这三步都过了才算真正装完。我见过有人lsnrctl status看到 READY 就以为完事了结果业务连上来一写就报ORA-01653回头查表空间发现没开自动扩展。所以第三步的建表插数据不能省它同时验证了表空间、权限和字符集。从那以后我每次装完 Oracle不管多急都强制走一遍这三条命令尤其是第三步的建表插数据——它花不了两分钟但能挡住后面几小时的排查。希望帮到你。本文还有配套的精品资源点击获取