ORACLE_HOME / ORACLE_BASE / OFA 标准

ORACLE_HOME / ORACLE_BASE / OFA 标准

适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

OFA(Optimal Flexible Architecture) 是 Oracle 推荐的目录结构标准[1],通过规范化的目录命名与组织,简化多版本、多实例的数据库管理。

核心环境变量

变量作用示例
ORACLE_BASEOracle 软件根目录/u01/app/oracle
ORACLE_HOMEOracle 软件安装目录$ORACLE_BASE/product/19.3.0/dbhome_1
ORACLE_SID实例标识orcl
LD_LIBRARY_PATH共享库搜索路径$ORACLE_HOME/lib
PATH可执行文件路径包含 $ORACLE_HOME/bin

2. OFA 标准目录结构

/u01/app/oracle/                       ← ORACLE_BASE
├── admin/                              ← 管理/诊断
│   └── orcl/
│       ├── adump/                      ← Audit dump
│       ├── dpdump/                     ← Data Pump 目录
│       └── xdb_wallet/                 ← Wallet
├── audit/                              ← 审计日志
├── product/                            ← ORACLE_HOME 集合
│   ├── 11.2.0/
│   │   └── dbhome_1/                   ← 11g Home
│   ├── 12.2.0/
│   │   └── dbhome_1/                   ← 12c Home
│   └── 19.3.0/
│       └── dbhome_1/                   ← 19c Home(ORACLE_HOME)
├── oradata/                            ← 数据文件
│   └── orcl/
│       ├── control01.ctl
│       ├── control02.ctl
│       ├── system01.dbf
│       ├── sysaux01.dbf
│       ├── undotbs01.dbf
│       ├── users01.dbf
│       ├── redo01.log
│       ├── redo02.log
│       └── redo03.log
├── fast_recovery_area/                 ← FRA 闪回区
│   └── orcl/
│       ├── archivelog/
│       ├── flashback/
│       └── backupset/
└── diag/                               ← ADR 诊断信息
    └── rdbms/
        └── orcl/
            └── orcl/
                ├── trace/
                │   ├── alert_orcl.log   ← 警报日志
                │   └── orcl_ora_*.trc   ← 跟踪文件
                ├── alert/               ← XML 格式警报
                └── incident/

3. ORACLE_BASE

作用:所有 Oracle 软件的根目录。

配置

# /etc/profile.d/oracle.sh
export ORACLE_BASE=/u01/app/oracle

# 用户配置文件 ~/.bash_profile
ORACLE_BASE=/u01/app/oracle
export ORACLE_BASE

特点

  • 全局唯一(一台主机一个 ORACLE_BASE)
  • 包含所有版本 ORACLE_HOME
  • 包含诊断信息(ADR base)
  • 推荐独立文件系统

4. ORACLE_HOME

作用:单个 Oracle 软件版本的安装目录[1]。

命名规范

$ORACLE_BASE/product/<version>/<type>_<n>

例:
/u01/app/oracle/product/19.3.0/dbhome_1   ← 19c 数据库 Home 1
/u01/app/oracle/product/19.3.0/dbhome_2   ← 19c 数据库 Home 2(多 Home 场景)

配置

export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

4.1 多 ORACLE_HOME 场景

场景用途
多版本共存11g + 19c 同时安装
主备 Home用于补丁滚动升级
不同 DB 版本CDB Home + GI Home

4.2 ORACLE_HOME 关键子目录

目录作用
bin/可执行文件(sqlplus、rman、lsnrctl)
lib/共享库
dbs/参数文件、密码文件(Linux)
database/参数文件、密码文件(Windows)
network/admin/listener.ora、sqlnet.ora、tnsnames.ora
rdbms/admin/SQL 脚本(catalog.sql、catproc.sql)
inventory/安装清单
OPatch/补丁工具

5. ORACLE_HOME 与 oraInventory

每个 ORACLE_HOME 在 oraInventory 中注册:

# 查看 oraInventory 位置
cat /etc/oraInst.loc
# inventory_loc=/u01/app/oraInventory
# inst_group=oinstall

# 查看已安装的 Home
ls -l /u01/app/oraInventory/ContentsXML/

oraInventory 损坏修复

# 重新附加 ORACLE_HOME
$ORACLE_HOME/oui/bin/runInstaller -silent -attachHome \
  ORACLE_HOME="/u01/app/oracle/product/19.3.0/dbhome_1" \
  ORACLE_HOME_NAME="OraDb19Home1"

6. /etc/oratab 维护

/etc/oratab 记录实例与 ORACLE_HOME 的对应关系:

# /etc/oratab
# 格式:<SID>:<ORACLE_HOME>:<Y|N>
# Y: dbstart 启动时自动启动该实例
# N: 不自动启动

orcl:/u01/app/oracle/product/19.3.0/dbhome_1:Y
sales:/u01/app/oracle/product/19.3.0/dbhome_1:N
testdb:/u01/app/oracle/product/12.2.0/dbhome_1:N

用途

  • oraenv 命令切换 ORACLE_SID 时查找对应 ORACLE_HOME
  • dbstart / dbshut 批量启停
  • 系统启动时自动启动数据库

7. ADR(Automatic Diagnostic Repository)

ADR 是 11g 引入的统一诊断目录[2]:

# ADR Base
$ORACLE_BASE/diag/

# 单个实例 ADR Home
$ORACLE_BASE/diag/rdbms/<db_unique_name>/<sid>/
├── alert/ XML 格式警报日志
├── trace/ 文本警报日志 + .trc
   └── alert_<sid>.log
├── incident/ 严重错误
├── hm/ Health Monitor
├── lck/ 锁文件
└── stage/ 暂存
-- 查看 ADR 配置
SHOW PARAMETER diagnostic_dest;

-- 查询 ADR 信息
SELECT * FROM v$diag_info;

ADRCI 工具

# 进入 ADRCI
adrci

# 查看警报日志
adrci> show alert -tail -f

# 查看事件
adrci> show incident

# 清理过期文件
adrci> set control (SHORTP_POLICY=168)
adrci> set control (LONGP_POLICY=720)
adrci> purge

8. 多实例目录管理

8.1 多实例在同一 ORACLE_HOME

/u01/app/oracle/product/19.3.0/dbhome_1/dbs/
├── initorcl.ora              ← 实例 orcl 的 PFILE
├── spfileorcl.ora            ← 实例 orcl 的 SPFILE
├── orapworcl                 ← 实例 orcl 的密码文件
├── initsales.ora             ← 实例 sales 的 PFILE
├── spfilesales.ora
└── orapwsales

8.2 多实例切换

# 使用 oraenv 切换
. oraenv
# ORACLE_SID = [orcl] ? sales
# The Oracle base remains unchanged with value /u01/app/oracle

# 验证
echo $ORACLE_SID
echo $ORACLE_HOME

9. 常见坑与排错

9.1 ORACLE_HOME 不一致

现象:不同工具的 ORACLE_HOME 不一致,导致行为异常。

排查

# 检查环境变量
echo $ORACLE_HOME
echo $PATH

# 检查 /etc/oratab
cat /etc/oratab

# 检查实际运行的 Oracle 进程
ps -ef | grep ora_pmon | grep -v grep
# 进程名后缀即为 SID

9.2 oraInventory 损坏

现象:安装/打补丁时报 OUI-10133 错误。

修复

# 1. 备份当前 inventory
mv /u01/app/oraInventory /u01/app/oraInventory.bak

# 2. 重新创建 inventory
$ORACLE_HOME/oui/bin/runInstaller -silent -attachHome \
  ORACLE_HOME="$ORACLE_HOME" \
  ORACLE_HOME_NAME="OraDb19Home1"

9.3 /etc/oratab 不存在

现象oraenv 命令报错,无法切换实例。

修复

# 手工创建
cat > /etc/oratab <<EOF
orcl:/u01/app/oracle/product/19.3.0/dbhome_1:Y
EOF

9.4 ORACLE_BASE 与 ORACLE_HOME 嵌套错误

现象:升级或打补丁时报路径冲突。

修复:确保 ORACLE_HOME 是 ORACLE_BASE 的子目录:

# 正确
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1

# 错误(ORACLE_HOME 不在 ORACLE_BASE 下)
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/opt/oracle/product/19.3.0/dbhome_1

9.5 ADR 空间不足

现象$ORACLE_BASE/diag 目录过大。

修复

# 使用 ADRCI 清理
adrci> show homes
adrci> set homepath diag/rdbms/orcl/orcl
adrci> purge -age 720  # 清理 720 小时前的文件

10. 最佳实践

  1. 严格遵循 OFA 标准:简化多版本管理
  2. ORACLE_BASE 独立文件系统:避免与其他文件冲突
  3. 数据文件与软件分离oradata/ 单独挂载
  4. FRA 独立存储:便于备份管理
  5. 保持 /etc/oratab 最新:每新增实例同步更新
  6. 定期清理 ADR:使用 ADRCI 自动清理
  7. 使用 oraenv 切换实例:避免硬编码环境变量
  8. 多 Home 用于滚动升级:主备 Home 切换降低停机时间

11. 参考资料

[1] Oracle Database Administrator’s Guide 19c, “Optimal Flexible Architecture” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/optimizing-database-availability.html

[2] Oracle Database Administrator’s Guide 19c, “Automatic Diagnostic Repository” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/diagnostic-and-tuning-features.html