原 Oracle 21c中的只读Oracle主目录特性(ROOH)
Tags: Oracle原创只读Oracle主⽬录
只读Oracle主目录特性(ROOH)介绍
当我们安装完成 Oracle Database 21c 数据库软件后,发现ORACLE_BASE ⽬录中出现了dbs和homes⽬录,其实这是只读Oracle主目录特性(ROOH,Read-Only Oracle Homes)特性所带来的变化。如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | [root@lhroracle21c /]# su - oracle Last login: Tue Oct 11 11:23:44 CST 2022 on pts/0 [oracle@lhroracle21c ~]$ cd $ORACLE_BASE [oracle@lhroracle21c oracle]$ pwd /u01/app/oracle [oracle@lhroracle21c oracle]$ ll total 64 drwxr-x--- 1 oracle oinstall 4096 Aug 16 2021 admin drwxr-x--- 3 oracle oinstall 4096 Aug 16 2021 audit drwxr-x--- 5 oracle oinstall 4096 Aug 16 2021 cfgtoollogs drwxr-x--- 1 oracle oinstall 4096 Oct 11 11:23 dbs drwxrwxr-x 1 oracle oinstall 4096 Aug 16 2021 diag drwxr-x--- 1 oracle oinstall 4096 Aug 16 2021 flash_recovery_area drwxr-x--- 1 oracle oinstall 4096 Aug 16 2021 homes drwxr-x--- 1 oracle oinstall 4096 Aug 16 2021 oradata drwxrwxr-x 1 oracle oinstall 4096 Aug 16 2021 product |
只读Oracle主目录特性(ROOH)是在 Oracle Database 18c 中引⼊的,从 Oracle Database 21c 开始,该特性是安装Oracle数据库软件后的唯⼀默认配置。
在只读 Oracle 主目录配置模式下,数据库运⾏时所有需要写⼊的⽂件都会移出ORACLE_HOME,如:实例相关⽂件,⽹络配置⽂件,运⾏时⽣成的⽇志⽂件等。留在ORACLE_HOME ⽬录中的Oracle软件部分在运⾏时是只读的。简单来说,通过只读Oracle主目录的特性,可以将数据库运⾏⽂件和数据库配置⽂件分开,这样我们就可以很轻松的替换数据库运⾏⽂件了。⽐如使⽤“Golden Image”镜像来分发oracle软件,达到快速部署和升级的⽬的。
ROOH特性的收益如下:
• ⽆需延⻓停机时间即可⽆缝修补和更新 Oracle 数据库二进制⽂件。
• 简化修补和⼤规模部署,因为只需更新⼀个映像即可将补丁分发到多台服务器。
• 通过实现安装和配置的分离来简化配置。
原理介绍
在Oracle Database 21c之前,默认的ORACLE_HOME 布局将 ORACLE_HOME、ORACLE_BASE_HOME 和 ORACLE_BASE_CONFIG组合到⼀个位置。从 Oracle Database 21c 开始,唯⼀可⽤的配置是只读 ORACLE_HOME,其中 ORACLE_BASE_HOME 和ORACLE_BASE_CONFIG 与 ORACLE_HOME 分开放置。
这三个变量的所代表的含义为:
• ORACLE_HOME:Oracle数据库软件所在主目录;
• ORACLE_BASE_HOME:特定于⽤户的⽂件,特定于实例的⽂件和⽇志⽂件等,如:network/admin,network/trace,network/log;
• ORACLE_BASE_CONFIG:实例相关配置⽂件所在⽬录,如dbs⽬录;
在⾮ROOH配置模式下,这三个变量所指向的路径都和ORACLE_HOME⼀致。
在ROOH模式下,ORACLE_HOME,ORACLE_BASE_HOME和ORACLE_BASE_CONFIG变量所指向的路径不在⼀致,各⾃配置了不同的路径,也就是分开配置。
orabasetab ⽂件⽤于定义只读ORACLE_HOME特性的相关基本⽬录。该⽂件中所配置的⽬录是基于 $ORACLE_HOME 、 $ORACLE_BASE 、 $ORACLE_BASE_HOME 和$ORACLE_BASE_CONFIG
相应路径⽽得出的
打印 ORACLE_BASE_HOME 的路径, 可以运⾏$ORACLE_HOME/bin⽬录中的 orabasehome 命令; 打印ORACLE_BASE_CONFIG 的路径, 可以运⾏$ORACLE_HOME/bin⽬录中的orabaseconfig 命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | -- 已开启 [oracle@lhroracle21c dbhome_1]$ orabasehome /u01/app/oracle/homes/OraDB21Home1 [oracle@lhroracle21c dbhome_1]$ orabaseconfig /u01/app/oracle [oracle@lhroracle21c dbhome_1]$ [oracle@lhroracle21c install]$ cat $ORACLE_HOME/install/orabasetab #orabasetab file is used to track Oracle Home associated with Oracle Base /u01/app/oracle/product/21c/dbhome_1:/u01/app/oracle:OraDB21Home1:Y: -- 未开启 [oracle@lhrora19c ~]$ $ORACLE_HOME/bin/orabasehome /opt/oracle/product/19c/dbhome_1 [oracle@lhrora19c ~]$ orabaseconfig /opt/oracle/product/19c/dbhome_1 [oracle@lhrora19c ~]$ cat $ORACLE_HOME/install/orabasetab #orabasetab file is used to track Oracle Home associated with Oracle Base /opt/oracle/product/19c/dbhome_1:/opt/oracle:OraDB19Home1:N: |
关于orabasetab⽂件的解释
orabasetab⽂件位于 $ORACLE_HOME/install/orabasetab
中。要确定 ORACLE_HOME 是否为只读,请检查 orabasetab ⽂件是否存在。
orabasetab⽂件还定义了Oracle主目录的ORACLE_BASE 和 HOME_NAME。HOME_NAME是ORACLE_HOME的内部名称。
orabasetab⽂件中以$ORACLE_HOME开头的最后⼀⾏定义了 $ORACLE_HOME 的⽬录。最后⼀⾏由四个字段组成,每个字段由冒号分隔符 (:) 分隔。
- 第⼀个字段:匹配当前的 $ORACLE_HOME。
- 第⼆个字段:定义当前 ORACLE_HOME 的 ORACLE_BASE。
- 第三个字段:定义 HOME_NAME,它⽤于在只读 ORACLE_HOME 中构建ORACLE_BASE_HOME 路径。 在只读 ORACLE_HOME 中,ORACLE_BASE_HOME 路径为ORACLE_BASE/homes/HOME_NAME,ORACLE_BASE_CONFIG 与 ORACLE_BASE 相同。
- 第四个字段:启⽤只读 ORACLE_HOME 则显示 Y,关闭只读ORACLE_HOME则显示 N。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | [oracle@lhroracle21c dbhome_1]$ cd $ORACLE_HOME/install [oracle@lhroracle21c install]$ pwd /u01/app/oracle/product/21c/dbhome_1/install [oracle@lhroracle21c install]$ ll total 1404 drwxr-xr-x 2 oracle oinstall 4096 Jul 28 2021 acls drwxrwx--- 2 oracle oinstall 4096 Jul 28 2021 chainedInstall drwxr-xr-x 3 oracle oinstall 4096 Aug 16 2021 config -rw-r----- 1 oracle oinstall 501 Aug 16 2021 envVars.properties -rw-r----- 1 oracle oinstall 1698 Jul 28 2021 envVars.properties.bak -rw-r--r-- 1 oracle oinstall 598851 Aug 16 2021 files.lst -rw-rw-r-- 1 oracle oinstall 598850 Aug 16 2021 files.lst_2021-08-16_12-38-04PM.bkp drwxr-xr-x 3 oracle oinstall 4096 Jul 28 2021 inst_plugin drwxr-x--- 2 oracle oinstall 4096 Jul 28 2021 jlib -rw-r----- 1 oracle oinstall 168576 Aug 16 2021 make.log drwxr-xr-x 2 oracle oinstall 4096 Jul 28 2021 mesg -rw-r----- 1 oracle oinstall 3190 May 29 2020 modmakedeps.pl -rw-rw-r-- 1 oracle oinstall 143 Aug 16 2021 orabasetab drwxr-xr-x 2 oracle oinstall 4096 Aug 16 2021 response -rw------- 1 oracle oinstall 531 Aug 16 2021 root_lhroracle21c_2021-08-16_12-42-20-668654355.log -rwxr-x--- 1 oracle oinstall 854 Aug 16 2021 root_schagent.sh drwxr-xr-x 2 oracle oinstall 4096 Jul 28 2021 sizes drwxr-xr-x 2 oracle oinstall 4096 Aug 16 2021 utl [oracle@lhroracle21c install]$ cat orabasetab #orabasetab file is used to track Oracle Home associated with Oracle Base /u01/app/oracle/product/21c/dbhome_1:/u01/app/oracle:OraDB21Home1:Y: |
只读Oracle主目录和读写Oracle主目录的对⽐
此示例显示了⼀个符合最佳灵活架构的 Oracle 数据库安装,适⽤于⽤户 oracle, 具有 ORACLE_HOME、ORACLE_BASE、ORACLE_BASE_HOME 和 ORACLE_BASE_CONFIG 逻辑位置。数据库⽂件挂载在 /u01 上,HOME_NAME 是 OraDB21Home1。
此示例还显示了与读/写 Oracle 主目录相⽐,只读 Oracle 主目录中配置⽂件、⽇志⽂件和其他⽬录的 Oracle 数据库软件定义路径的更改。
Table 1-1 只读Oracle主目录⽂件路径和读写Oracle主目录⽂件路径对比