说实话,如果是新项目,我绝对不会首选 Oracle 10g。但工作中你难免会遇到一些老系统的迁移工作,这就没有办法了。之前我也分享过使用 Docker 来进行快速部署,但并不是每个项目都能允许我这样做,因此 Oracle 的 Linux 部署多多少少也要会一点(可能是公司的业务缘故,我参与的项目用 Oracle 的还是比较多)。
但不得不说 Oracle 10g 对系统环境的苛刻程度,反而非常适合用来测试自己的 Linux 基本功。
一、Oracle 部署的难点不在 Oracle
真正的难点在这三点:
- Oracle 假设你在用 RHEL / CentOS
- Ubuntu 的 库版本、包名、目录结构都不一样
- 安装脚本写死了很多“旧时代假设”
过往的经验告诉我,Oracle 安装失败,80% 是系统没准备好,而不是安装步骤错了。
二、安装前准备
1.操作系统选择
Oracle 10g 对内核和 glibc 非常挑剔。在 Ubuntu 上,我默认遵循三个原则:
- 尽量使用 LTS 版本
- 不追新内核(重点)
- 不混用奇怪的第三方源
2.创建 Oracle 专用用户与用户组
这个是多次惨痛经历换来的教训,不要用 root 跑 Oracle。
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
passwd oracle
在 Oracle 的世界里,用户就相当于“安全边界”、“权限模型”和“安装与运行的唯一载体”,这就是底线。
3.目录规划
mkdir -p /u01/app/oracle
chown -R oracle:oinstall /u01
chmod -R 775 /u01
我永远不用随意路径,免得出现奇奇怪怪的情况。
三、内核参数与系统限制
这是 最关键、最容易被忽略的一步。
1.修改 /etc/sysctl.conf
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
net.ipv4.ip_local_port_range = 9000 65500
然后:
sysctl -p
以上参数不能“照抄”,这是 Oracle 对系统资源的最低预期而已,建议根据用户的实际情况进行配置。
2.用户级限制 /etc/security/limits.conf
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
如果这里没配置好,那么你会发现你安装的时候虽然能够通过,但数据库启动时会死的很难看。
四、Ubuntu 与 Oracle 依赖冲突(重点)
Oracle 10g 依赖了一堆早已被 Ubuntu 淘汰的库。
我遇到最多的是 libaio、libstdc++5 和 gcc 的版本不匹配问题。
我的解决办法是:
- 缺什么 → 查包名 → 找 Ubuntu 对应版本
- 没有 → 用兼容包 / 手动安装
- 能不用
--force就不用
坦白说,有时候真的会被折腾到没脾气,因此现在我是宁可多花时间补依赖,也不轻易破坏系统包管理一致性。
五、Oracle 安装
如果将上面的难关都过了,后面基本上就没什么问题了。
su - oracle
./runInstaller
安装过程我只盯三件事:
- 警告(Warning)和错误(Error)
- 是否卡在 linking 阶段
- 是否提示 kernel / OS 不支持
很多“看起来可怕的警告”,其实都可以忽略的。譬如,系统版本校验失败,swap 大小不满足推荐值等。但当出现“共享内存不足”,“文件句柄不够”、“权限错误”的时候就应该注意了,这些才是致命的。
六、root.sh
安装过程中会提示执行:
/u01/app/oracle/oraInventory/orainstRoot.sh
/u01/app/oracle/product/10.2.0/db_1/root.sh
这是我唯一一次允许 root 介入 Oracle 安装流程(这没有办法)。但原则上只执行安装器明确要求的 root 操作,其余一律不要多做。
七、环境变量
在 oracle 用户下的 .bash_profile 我是这样写的:
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin
以前的我会选择将配置拆的稀碎,然后到处引用。经过多年的淬炼,现在的我不追求“灵活”,只追求“可读”、“可复制”、“可复现”。
八、我最怕的几类错误
当出现:
ORA-27102: out of memoryORA-01034: ORACLE not availableORA-12541: TNS:no listener
我知道肯定是我系统又没有配置好了,因为这些错误的出现 90% (盲猜)指向:
- 内核参数
- 用户限制
- 环境变量
这意味着我又要重头检查一遍了,艹。
九、真正学到的东西
Oracle 并没有教会我如何使用数据库,它逼着我学会了如何对待一台 Linux 服务器。
从那之后,我对系统的态度不再是“尽量让它跑起来”,而是“在明确理解代价的前提下,让它长期、可控、可恢复地运行”。
这可能是我从 Oracle 安装这件事里,真正带走、并且一直沿用至今的东西。