每次安装完Oracle实例或是集群后,GI是在主节点先先运行脚本,第二个节点再运行脚本,DB安装后每个节点,都要用root用户运行root.sh脚本。那么运行这些脚本的原因和功能是什么,脚本创建服务后,在reboot或是实例startup过程中是否还需要继续读取,步骤是什么
功能点:
root.sh:安装后的关键脚本,负责环境初始化、配置文件(oraInst.loc/oratab)的创建和系统服务集成。
oraInst.loc:作为Oracle软件的“注册表”,确保安装工具能正确管理多产品环境。
oratab:实现数据库实例的自动化生命周期管理,是DBA运维的核心配置文件。
三者共同构成Oracle环境的基础管理框架,任何配置错误都可能导致系统无法正常运行。
读取顺序:
实例启动时不读取/etc/oraInst.loc:该文件仅用于软件安装和配置管理
实例启动间接依赖/etc/oratab:通过dbstart脚本控制启动流程
之后就是数据库启动进程,取参数文件 → 控制文件 → 数据文件/日志文件,启动实例
一、安装后必须运行的脚本:root.sh
功能和技术原理
- 创建必要的操作系统目录结构
- 设置Oracle软件目录的所有权和权限(chown/chmod)
- 修复关键文件的SELinux上下文(在启用SELinux的系统上)
# 初始化集群守护进程
$GRID_HOME/bin/ohasd start
# 创建OCR和Voting Disk资源
$GRID_HOME/bin/crsctl add ocr /dev/asm/ocr
$GRID_HOME/bin/crsctl add css votedisk /dev/asm/vote
- 创建或更新/etc/oraInst.loc文件
- 在/etc/oratab中添加或更新数据库实例条目
- 为RAC环境配置节点间通信
- 创建Systemd服务单元或init.d脚本
- 注册Oracle Restart服务(单节点)或集群服务(RAC)
- 将新安装的软件注册到Oracle中央清单(oraInventory)
- 更新库存依赖关系
二、脚本与oraInst.loc、oratab的关系
- 首次安装时创建/etc/oraInst.loc
- 后续安装时更新现有文件
- 从$ORACLE_HOME/install/params.ini读取参数写入文件
- 添加新数据库实例条目(格式:SID:ORACLE_HOME:AUTO)
- 修改现有实例的ORACLE_HOME路径(升级时)
- 移除已删除实例的条目
- 确保oraInst.loc和oratab有正确的所有权(root:oinstall)
- 设置安全权限(640)
- 数据库实例无法自动启动
- OPatch和DBCA工具无法识别安装
- 集群资源无法管理
- 后续补丁安装失败
三、oraInst.loc文件的功能与技术原理
文件结构和位置
# 标准格式
inventory_loc=/u01/app/oraInventory
inst_group=oinstall
# 位置:
/etc/oraInst.loc
核心功能
- 指向Oracle中央清单目录(通常为/u01/app/oraInventory)
- 存储所有Oracle产品的安装元数据
- 指定有权修改清单的操作系统组(通常为oinstall)
- 控制哪些用户可以修改Oracle配置
- 使多个Oracle产品(RDBMS, GI, Client)共享同一清单
- 维护产品间的依赖关系
技术原理
/u01/app/oraInventory
├── ContentsXML # 包含inventory.xml
├── logs # 安装日志
└── backups # 清单备份
inventory.xml示例
--XML
<HOME NAME="OraDB19Home" LOC="/u01/app/oracle/product/19c/dbhome_1" TYPE="O">
<NODE_LIST>
<NODE NAME="oracle-server1"/>
</NODE_LIST>
</HOME>
- OUI(安装程序):读取oraInst.loc → 更新inventory.xml
- OPatch(补丁工具):检查目标ORACLE_HOME是否在清单中注册
- DBCA(数据库助手):验证软件完整性
注意事项
- 删除会导致后续安装失败
- 损坏需从备份恢复或手动重建
# 推荐权限
chown root:oinstall /etc/oraInst.loc
chmod 640 /etc/oraInst.loc
- RAC环境中需确保所有节点文件一致
- 节点添加/删除时需手动更新
三、oratab文件的功能与技术原理
文件结构和位置
# 标准格式
ORCL:/u01/app/oracle/product/19c/dbhome_1:Y
+ASM:/u01/app/grid/19c:N
# 位置:
/etc/oratab
核心功能
- 记录所有数据库实例的SID和ORACLE_HOME
- 标记实例是否应自动启动(AUTO=Y/N)
- dbstart/dbshut脚本的配置文件
- 控制实例的生命周期管理
- 支持单服务器运行多个独立实例
- 支持RAC节点管理本地实例
技术原理
while read line; do
if [ "Y" = $(echo $line | cut -d: -f3) ]; then
ORACLE_SID=$(echo $line | cut -d: -f1)
ORACLE_HOME=$(echo $line | cut -d: -f2)
$ORACLE_HOME/bin/sqlplus / as sysdba <<EOF
startup
exit
EOF
fi
done < /etc/oratab
与系统服务集成
# Systemd服务示例
[Unit]
Description=Oracle DB auto-start
After=dbora.service
[Service]
Type=oneshot
ExecStart=/u01/app/oracle/product/19c/dbhome_1/bin/dbstart /u01/app/oracle/product/19c/dbhome_1
- DBCA:创建/删除数据库时自动更新oratab
- RMAN:通过SID定位目标数据库
- srvctl:验证本地实例配置
注意事项
- 升级时需手动更新ORACLE_HOME路径
- 实例删除后应移除对应条目
# RAC节点配置示例
PRODCDB1:/u01/app/oracle/product/19c/dbhome_1:Y
PRODCDB2:/u01/app/oracle/product/19c/dbhome_1:Y
- 实例无法启动时检查:
- AUTO标志是否为Y
- ORACLE_HOME路径是否正确
- 文件权限(推荐640)
使用体验
组件 | 核心功能 | 依赖关系 | 关键影响 |
root.sh | 完成安装后配置 | 创建/更新oraInst.loc和oratab | 未执行导致功能不可用 |
oraInst.loc | 中央清单定位和权限控制 | OUI/OPatch/DBCA的基础 | 损坏导致安装/升级失败 |
oratab | 实例注册和生命周期管理 | dbstart/dbshut的配置源 | 错误配置导致实例无法自动启动 |
全链路工作流程: