یکی از فیچرهای جدیدی که در اوراکل 18c ارائه شد Read-only Oracle Home بود که مطابق با آن، logfileها و فایلهای پیکربندی موجود در مسیر ORACLE_HOME نظیر listener.ora، sqlnet.ora، spfile.ora و … به دایرکتوریهای زیرشاخه ORACLE_BASE منتقل می شوند(عمده فایلهای پیکربندی، در زیر دایرکتوری network/admin و dbs قرار می گیرند).
انتقال فایلهای پیکربندی از ORACLE_BASE به ORACLE_HOME سبب شده تا نیاز به تغییر در فایلهای ORACLE_HOME به حداقل برسد به طوری که اگر یک Read-only Oracle Home را در پارتیشن read-only قرار دهیم، اوراکل بدون مشکل به کارش ادامه خواهد داد مگر آنکه نیاز به اعمال patch بر روی نرم افزار داشته باشیم که در این صورت باید پارتیشن را در حالت read write قرار دهیم.
Read-only Oracle Home در نسخه 18c به صورت پیش فرض فعال نیست و برای فعال کردن آن می بایست از دستور roohctl –enable استفاده کرد:
[oracle@RAC3 ~]$ cd /oracle18c/home/bin/
[oracle@RAC3 bin]$ orabasehome
/oracle18c/home
[oracle@RAC3 bin]$ ./roohctl -enable
Enabling Read-Only Oracle home.
Update orabasetab file to enable Read-Only Oracle home.
Orabasetab file has been updated successfully.
Create bootstrap directories for Read-Only Oracle home.
Bootstrap directories have been created successfully.
Bootstrap files have been processed successfully.
Read-Only Oracle home has been enabled successfully.
[oracle@RAC3 bin]$ orabasehome
/oracle18c/base/homes/OraDB18Home1
دستور orabasehome در محیط read-write Oracle home مقدار متغیر ORACLE_HOME را برمی گرداند این دستور در حالت read-only Oracle home مسیر ORACLE_BASE/homes را نمایش می دهد.
بنابرین با توجه به خروجی دستور orabasehome، مسیر فایلهای پیکربندی از oracle18c/home/ به oracle18c/base/homes/OraDB18Home1/ تغییر کرده است(منظور از عبارت OraDB18Home1 همان HOME_NAME است که در oraInventory ثبت می شود).
در اوراکل نسخه 19c تغییر جدی و مشهودی در این زمینه ایجاد نشده و صرفا امکان استفاده از این ویژگی همانند قبل در این نسخه هم وجود دارد اما در نسخه 21c، اوراکل ویژگی Read-only Oracle Home را به صورت پیش فرض فعال کرده و با نصب اوراکل نسخه 21c، فایلهای پیکربندی در sub-directoryهای ORACLE_BASE ایجاد خواهند شد.
[oracle@RAC3 ~]$ /oracle21c/home/bin/orabasehome
/oracle21c/base/homes/OraDB21Home1
با نصب نرم افزار در این نسخه شاهد دو دایرکتوری جدید در مسیر ORACLE_BASE خواهیم بود:
[oracle@RAC3 ~]$ cd /oracle21c/base
[oracle@RAC3 base]$ ls
cfgtoollogs dbs diag homes
دایرکتوری dbs معادل همان dbsای است که در نسخه های قبلی در ORACLE_HOME ایجاد می شد و همچنین ساختار دایرکتوری homes به شکل زیر است:
در محیط Read-Only Oracle home اگر فایلهای پیکربندی در مسیر ORACLE_HOME تنظیم شوند، عملا بلااستفاده خواهند بود:
[oracle@RAC2 ~]$ /oracle21c/home/bin/orabasehome
/oracle21c/base/homes/OraDB21Home1
[oracle@RAC2 ~]$ vi /oracle21c/home/network/admin/tnsnames.ora
PDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.20)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb1)
)
)
[oracle@RAC2 ~]$ tnsping pdb1
TNS Ping Utility for Linux: Version 21.0.0.0.0 – Production on 04-SEP-2021 16:11:09
Copyright (c) 1997, 2021, Oracle. All rights reserved.
Used parameter files:
TNS-03505: Failed to resolve name
[oracle@RAC2 ~]$
در صورتی که با تنظیم این net service name در مسیر ORACLE_BASE دستور tnsping بدون خطا اجرا خواهد شد:
[oracle@RAC2 ~]$ vi /oracle21c/base/homes/OraDB21Home1/network/admin/tnsnames.ora
PDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.20)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb1)
)
)
[oracle@RAC2 ~]$ tnsping pdb1
TNS Ping Utility for Linux: Version 21.0.0.0.0 – Production on 04-SEP-2021 16:13:45
Copyright (c) 1997, 2021, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.20)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdb1)))
OK (0 msec)
ایجاد دیتابیس در محیط Read-Only Oracle home
با ایجاد دیتابیس جدید خواهیم دید که spfile، password file و همه فایلهای که در نسخه های قبلی در مسیر ORACLE_HOME/dbs ایجاد می شدند، در این نسخه در مسیر ORACLE_BASE/dbs قرار گرفته اند:
[oracle@oLinux7 ~]$ cd /oracle21c/base/dbs/
[oracle@oLinux7 dbs]$ ls
hc_db21c.dat initdb21c.ora lkDB21C orapwdb21c snapcf_db21c.f spfiledb21c.ora
همچنین فایلهای پیکربندی Oracle Net در مسیر ORACLE_BASE/homes/OraDB21Home1/network/admin ایجاد خواهند شد:
[oracle@oLinux7 ~]$ cd /oracle21c/base/homes/OraDB21Home1/network/admin
[oracle@oLinux7 admin]$ ls
listener.ora tnsnames.ora
غیر فعال کردن Read-Only Oracle home در اوراکل 21c
اگر با Read-Only Oracle home در نسخه 21c راحت نیستید، می توانید بلافاصله بعد از نصب نرم افزار اوراکل، با اجرای دستور زیر، این ویژگی را غیرفعال کنید:
[oracle@RAC3 ~]$ /oracle21c/home/bin/roohctl -disable
Disabling Read-Only Oracle home.
Update orabasetab file to disable Read-Only Oracle home.
Orabasetab file has been updated successfully.
Read-Only Oracle home has been disabled successfully.
Check the log file /oracle21c/base/cfgtoollogs/roohctl/roohctl-210901PM051806.log for more details.
با ایجاد دیتابیس جدید در این محیط، فایلهای پیکربندی در مسیر ORACLE_HOME قرار خواهند گرفت:
[oracle@RAC3 ~]$ cd /oracle21c/home/dbs/
[oracle@RAC3 dbs]$ ls
hc_db21.dat init.ora lkDB21 orapwdb21 spfiledb21.ora