温馨提示×

Ubuntu Oracle常见问题如何解决

小樊
36
2025-11-23 03:04:53
栏目: 云计算

Ubuntu 上 Oracle 常见问题与解决方案

一 安装与依赖

  • 建议使用专用系统用户与组:创建 oinstalldba,并指定 Oracle 家目录;不要用 root 直接安装。
  • 安装常用依赖(以 11g/12c 为例):libaio1libaio-devbuild-essentialunzipwget 等;若安装介质为 RPM,可借助 alien 转换为 DEB 再装(注意校验与兼容性)。
  • 安装 Oracle XE 11gR2 时,若 postinst 脚本报错缺少 /sbin/chkconfig,可编辑 /var/lib/dpkg/info/oracle-xe.postinst,注释相关 chkconfig 行并改用 update-rc.d 注册服务,然后执行配置:/etc/init.d/oracle-xe configure
  • 若遇到安装器链接阶段卡住或报错,可按需打补丁(示例为 32 位环境下的链接参数修正,64 位请谨慎对照版本与路径):
    • ins_emagent.mk:sed -i ‘s/^\s*$(MKEMAGENTNMECTL)\s*$/\1 -lnnz11/g’ $ORACLE_HOME/sysman/lib/ins_emagent.mk
    • 网络/内核库链接:在 $ORACLE_HOME/network/lib/env_network.mk、$ORACLE_HOME/rdbms/lib/env_rdbms.mk 等文件相应行尾追加 -Wl,–no-as-needed 后点 Retry。

二 环境变量与命令找不到

  • 正确做法是在 Oracle 用户的 profile 中设置环境变量,而不是拷贝二进制到 /bin。在 ~/.bashrc/etc/profile 中加入(路径按实际调整):
    • export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe
    • export ORACLE_SID=XE
    • export PATH=$ORACLE_HOME/bin:$PATH
    • 使配置生效:source ~/.bashrc(或 source /etc/profile)。
  • 若仍提示 sqlplus: command not found,先确认 echo $PATH 包含 $ORACLE_HOME/bin,再检查文件权限与所属用户组。
  • 不建议将 $ORACLE_HOME/bin/sqlpluslsnrctl 等复制到 /bin;这会带来维护与安全风险,且不利于多用户环境。

三 监听与连接故障

  • 首次登录报 ORA-12162: TNS:net service name is incorrectly specified,通常是 ORACLE_SID 未设置:执行 export ORACLE_SID=orcl(或你的实例名)。
  • 客户端连不上或报 ORA-12514: TNS:listener does not currently know of service,需确认监听已启动并注册服务:
    • 启动监听:lsnrctl start
    • $ORACLE_HOME/network/admin/listener.ora 的 SID_LIST_LISTENER 中显式声明 SID:
      • SID_LIST_LISTENER =
        (SID_LIST =
        (SID_DESC =
        (SID_NAME = orcl)
        (ORACLE_HOME = /u01/app/oracle/product/11.2.0/xe)))
    • 重启监听:lsnrctl stop && lsnrctl start
  • 远程访问需开放 1521 端口(云主机安全组/本机防火墙),并确保客户端使用正确的 HOSTPORTSERVICE_NAME/SID

四 存储与内存相关错误

  • 启动数据库出现 ORA-00845: MEMORY_TARGET cannot be created,多因 /dev/shm 不足或挂载不当。Ubuntu 使用 /run/shm,可做符号链接或挂载共享内存:
    • 创建挂载脚本 /etc/init.d/oracle-shm,内容示例:
      • #!/bin/sh
        case “$1” in
        start) mkdir -p /dev/shm
        mount -t tmpfs -o rw,nosuid,nodev,noexec,relatime,size=1G tmpfs /dev/shm ;;
        stop) umount /dev/shm ;;
        *) echo “Usage: $0 {start|stop}” ;;
        esac
    • 赋权并注册:chmod +x /etc/init.d/oracle-shm && update-rc.d oracle-shm defaults
    • 重启后确认:df -h | grep shm
  • 初始化或运行期间若提示共享内存不足,可适当增大 MEMORY_TARGET 或改用 SGA_TARGET/PGA_AGGREGATE_TARGET 分步配置。

五 快速替代方案与后续优化

  • 快速体验可用 Docker 运行 Oracle XE:
    • 拉取镜像:docker pull oracleinanutshell/oracle-xe-11g
    • 启动容器:docker run -d -p 1521:1521 --name oracle11g oracleinanutshell/oracle-xe-11g
    • 环境变量示例:ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe,ORACLE_SID=XE,PATH 包含 $ORACLE_HOME/bin
    • 连接测试:sqlplus system/oracle(或 docker exec -it oracle11g sqlplus / as sysdba)
  • 上线前的稳定性与性能建议:
    • 配置开机自启:在 /etc/oratab 将实例设为 Y,并编写 systemd 单元或 init 脚本管理 listener 与数据库;
    • 参数与容量:结合负载设置 SGA/PGA、连接数、日志缓冲区;大表考虑 分区;SQL 使用 索引绑定变量
    • 存储与 OS:优先 SSD/NVMe,合理文件系统挂载选项;按需调优内核网络/文件句柄;
    • 运维:定期收集统计信息、监控 alert.log、验证备份恢复流程。

0