در این مقاله، فرآیند تغییر hostname در سروری با Oracle Linux 8.10 و Oracle Database نسخه 19.25 که از Oracle Restart و دیسکهای AFD استفاده میکند، مرحله به مرحله شرح داده شده است. این سناریو در محیط مجازی تست و اجرا شده و تمام جزئیات و دستورات واقعی ارائه شدهاند. دلیل نیاز من به این موضوع این بود که احتیاج به چند سرور دیتابیس داشتم که برای صرفه جویی در زمان، از یکی از آنها که بصورت کامل نصب شده بود clone گرفتم و چندین سرور با hostname های مستقل ساختم.
مرحله اول: ذخیره اطلاعات پیش از تغییر
قبل از هرگونه تغییر، اطلاعات مربوط به دیتابیس و ASM را ذخیره میکنیم. در داکیومنت اوراکل که کمی بعد به آن اشاره میکنم، در اواسط داکیومنت دستوراتی وجود دارد که نیازمند این است که از پیش اطلاعات آنها را ذخیره کرده باشیم.
[oracle@oracle8101924 ~]$ . oraenv
ORACLE_SID = [oracle] ? orcl
The Oracle base has been set to /u01/app/oracle
[oracle@oracle8101924 ~]$ srvctl config database -d orcl
Database unique name: orcl
Database name: orcl
Oracle home: /u01/app/oracle/product/19c/dbhome
Oracle user: oracle
Spfile: +DATA/ORCL/PARAMETERFILE/spfile.270.1184680669
Password file:
Domain: vahiddb.com
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Disk Groups: DATA
Services:
OSDBA group:
OSOPER group:
Database instance: orcl
و برای asm نیز اینکار را انجام می دهیم:
[oracle@oracle8101924 ~]$ . oraenv
ORACLE_SID = [orcl] ? +ASM
[oracle@oracle8101924 ~]$ sqlplus / as sysasm
create pfile from spfile;
بررسی محتویات:
cd /u01/app/19c/grid/dbs/
[oracle@oracle8101924 dbs]$ cat init+ASM.ora
*.asm_diskstring='/dev/nv*','AFD:*'
*.asm_power_limit=1
*.large_pool_size=12M
*.remote_login_passwordfile='EXCLUSIVE'
مرحله دوم: حذف Oracle Restart قدیمی
طبق مستند Oracle Doc ID 1552810:
با کاربر root
و با تنظیم ORACLE_HOME بر روی Grid:
[root@oracle8101924 ~]# . oraenv
ORACLE_SID = [orcl] ? +ASM
$ORACLE_HOME/crs/install/roothas.pl -deconfig -force
با اجرای این دستور احتمالا به خطای زیر برخورد میکنید:
./roothas.pl: line 8: =head1: command not found
...
به این معنیست که perl
نصب نیست. راهحل:
export PATH=$ORACLE_HOME/perl/bin:$PATH
perl $ORACLE_HOME/crs/install/roothas.pl -deconfig -force
من از خود perl موجود در oracle_home استفاده کردم
مرحله سوم: تغییر Hostname
hostnamectl set-hostname nearguard.vahiddb.com
در یک سشن جدید بررسی می کنیم و کار را ادامه می دهیم:
[root@nearguard ~]# . oraenv
ORACLE_SID = [root] ? +ASM
مرحله چهارم: اجرای مجدد Oracle Restart
[root@nearguard ~]# cd $ORACLE_HOMEcrs/install/
[root@nearguard install]# ./roothas.sh
خروجی دستور:
Using configuration parameter file: /u01/app/19c/grid/crs/install/crsconfig_params
The log of current session can be found at:
/u01/app/oracle/crsdata/nearguard/crsconfig/roothas_2025-06-30_03-24-31AM.log
Redirecting to /bin/systemctl restart rsyslog.service
LOCAL ADD MODE
Creating OCR keys for user 'oracle', privgrp 'oinstall'..
Operation successful.
LOCAL ONLY MODE
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
CRS-4664: Node nearguard successfully pinned.
2025/06/30 03:24:48 CLSRSC-330: Adding Clusterware entries to file 'oracle-ohasd.service'
nearguard 2025/06/30 03:25:39 /u01/app/oracle/crsdata/nearguard/olr/backup_20250630_032539.olr 760403972
2025/06/30 03:25:40 CLSRSC-327: Successfully configured Oracle Restart for a standalone server
مرحله پنجم: افزودن مجدد دیتابیس
با اطلاعاتی که از قبل ذخیره کردیم دیتابیس را مجدداً اضافه می کنیم:
srvctl add database -db orcl -oraclehome $ORACLE_HOME -spfile +DATA/ORCL/PARAMETERFILE/spfile.270.1184680669 -domain vahiddb.com -startoption open -stopoption immediate -role primary -policy AUTOMATIC -dbname orcl
مرحله ششم: فعالسازی CSS و HAS
$ORACLE_HOME/bin/crsctl modify resource "ora.cssd" -init -attr "AUTO_START=1" -unsupported
crsctl stop has
crsctl start has
crsctl check has
crsctl check css
crsctl stat resource
خروجی دستور:
NAME=ora.cssd
TYPE=ora.cssd.type
TARGET=ONLINE
STATE=ONLINE on nearguard
NAME=ora.diskmon
TYPE=ora.diskmon.type
TARGET=OFFLINE
STATE=OFFLINE
NAME=ora.driver.afd
TYPE=ora.driver.afd.type
TARGET=ONLINE
STATE=ONLINE on nearguard
NAME=ora.evmd
TYPE=ora.evm.type
TARGET=ONLINE
STATE=ONLINE on nearguard
NAME=ora.ons
TYPE=ora.ons.type
TARGET=OFFLINE
STATE=OFFLINE
NAME=ora.orcl.db
TYPE=ora.database.type
TARGET=OFFLINE
STATE=OFFLINE
سپس دستور زیر را برای چک کردن می زنیم:
crsctl stat res -t
خروجی دستور:
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.ons
OFFLINE OFFLINE nearguard STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
1 ONLINE ONLINE nearguard STABLE
ora.diskmon
1 OFFLINE OFFLINE STABLE
ora.driver.afd
1 ONLINE ONLINE nearguard STABLE
ora.evmd
1 ONLINE ONLINE nearguard STABLE
ora.orcl.db
1 OFFLINE OFFLINE STABLE
--------------------------------------------------------------------------------
مرحله هفتم: افزودن Listener
srvctl add listener
srvctl start listener
lsnrctl status
خروجی دستور:
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 30-JUN-2025 03:57:36
Copyright (c) 1991, 2024, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date 30-JUN-2025 03:57:22
Uptime 0 days 0 hr. 0 min. 14 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/19c/grid/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/nearguard/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.188.4)(PORT=1521)))
The listener supports no services
The command completed successfully
مرحله هشتم: آمادهسازی ASM
بازنویسی فایل init+ASM.ora یا استفاده از بکاپی که تهیه کرده بودیم.
cat init+ASM.ora
*.asm_diskstring='/dev/nv*','AFD:*'
*.asm_power_limit=1
*.large_pool_size=12M
افزودن ASM:
srvctl add asm
crsctl modify resource "ora.asm" -init -attr "AUTO_START=1" -unsupported
بررسی دیسکها:
kfod asm_diskstring='/dev/nv*','AFD:*' disks=all
خروجی دستور:
--------------------------------------------------------------------------------
Disk Size Path User Group
================================================================================
1: 20479 MB AFD:DATA02
2: 20479 MB AFD:DATA1
KFOD-00313: No ASM instances available. CSS group services were successfully initialized by kgxgncin.
KFOD-00312: Error discovering diskstring /dev/nvme0n3p1
ORA-27041: unable to open file
KFOD-00312: Error discovering diskstring /dev/nvme0n2p1
ORA-27041: unable to open file
KFOD-00312: Error discovering diskstring /dev/nvme0n3
ORA-27041: unable to open file
KFOD-00312: Error discovering diskstring /dev/nvme0n2
ORA-27041: unable to open file
KFOD-00312: Error discovering diskstring /dev/nvme0n1p2
ORA-27041: unable to open file
KFOD-00312: Error discovering diskstring /dev/nvme0n1p1
ORA-27041: unable to open file
KFOD-00312: Error discovering diskstring /dev/nvme0n1
ORA-27041: unable to open file
KFOD-00312: Error discovering diskstring /dev/nvme0
ORA-27041: unable to open file
KFOD-00312: Error discovering diskstring /dev/nvram
ORA-27041: unable to open file
مرحله نهم: راهاندازی ASM
sqlplus / as sysasm
SQL> startup pfile=init+ASM.ora
SQL> alter diskgroup data mount;
SQL> select path from v$asm_disk;
SQL> create spfile from pfile;
SQL> shut immediate;
خروجی های دستور:
[oracle@nearguard dbs]$ sqlplus / as sysasm
SQL*Plus: Release 19.0.0.0.0 - Production on Mon Jun 30 04:18:37 2025
Version 19.25.0.0.0
Copyright (c) 1982, 2024, Oracle. All rights reserved.
Connected to an idle instance.
idle> startup pfile=init+ASM.ora
ASM instance started
Total System Global Area 1976086808 bytes
Fixed Size 8958232 bytes
Variable Size 1941962752 bytes
ASM Cache 25165824 bytes
ORA-15110: no diskgroups mounted
idle> show parameter disk
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
asm_diskgroups string
asm_diskstring string /dev/nv*, AFD:*
idle> alter diskgroup data mount;
Diskgroup altered.
Elapsed: 00:00:06.22
idle> select path from v$asm_disk;
PATH
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
AFD:DATA1
AFD:DATA02
Elapsed: 00:00:00.02
idle> create spfile from pfile;
File created.
Elapsed: 00:00:00.03
idle> shut immediate;
ASM diskgroups volume disabled
ASM diskgroups dismounted
ASM instance shutdown
idle> exit
اعمال تغییرات در srvctl
srvctl modify asm -p /u01/app/19c/grid/dbs/spfile+ASM.ora
srvctl modify asm -l LISTENER
مرحله دهم: تست نهایی سرویسها
crsctl stop has
crsctl start has
crsctl stat res
crsctl stat res -t
راهاندازی دیتابیس:
srvctl start database -d orcl
خروجی دستورات:
[oracle@nearguard dbs]$ crsctl stop has
CRS-2791: Starting shutdown of Oracle High Availability Services-managed resources on 'nearguard'
CRS-2673: Attempting to stop 'ora.evmd' on 'nearguard'
CRS-2673: Attempting to stop 'ora.LISTENER.lsnr' on 'nearguard'
CRS-2677: Stop of 'ora.LISTENER.lsnr' on 'nearguard' succeeded
CRS-2677: Stop of 'ora.evmd' on 'nearguard' succeeded
CRS-2673: Attempting to stop 'ora.cssd' on 'nearguard'
CRS-2677: Stop of 'ora.cssd' on 'nearguard' succeeded
CRS-2673: Attempting to stop 'ora.driver.afd' on 'nearguard'
CRS-2677: Stop of 'ora.driver.afd' on 'nearguard' succeeded
CRS-2793: Shutdown of Oracle High Availability Services-managed resources on 'nearguard' has completed
CRS-4133: Oracle High Availability Services has been stopped.
[oracle@nearguard dbs]$ crsctl start has
CRS-4123: Oracle High Availability Services has been started.
[oracle@nearguard dbs]$ crsctl stat res
NAME=ora.DATA.dg
TYPE=ora.diskgroup.type
TARGET=ONLINE
STATE=ONLINE on nearguard
NAME=ora.LISTENER.lsnr
TYPE=ora.listener.type
TARGET=ONLINE
STATE=ONLINE on nearguard
NAME=ora.asm
TYPE=ora.asm.type
TARGET=ONLINE
STATE=ONLINE on nearguard
NAME=ora.cssd
TYPE=ora.cssd.type
TARGET=ONLINE
STATE=ONLINE on nearguard
NAME=ora.diskmon
TYPE=ora.diskmon.type
TARGET=OFFLINE
STATE=OFFLINE
NAME=ora.driver.afd
TYPE=ora.driver.afd.type
TARGET=ONLINE
STATE=ONLINE on nearguard
NAME=ora.evmd
TYPE=ora.evm.type
TARGET=ONLINE
STATE=ONLINE on nearguard
NAME=ora.ons
TYPE=ora.ons.type
TARGET=OFFLINE
STATE=OFFLINE
NAME=ora.orcl.db
TYPE=ora.database.type
TARGET=OFFLINE
STATE=OFFLINE
[oracle@nearguard dbs]$ crsctl stat res -t
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.dg
ONLINE ONLINE nearguard STABLE
ora.LISTENER.lsnr
ONLINE ONLINE nearguard STABLE
ora.asm
ONLINE ONLINE nearguard Started,STABLE
ora.ons
OFFLINE OFFLINE nearguard STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
1 ONLINE ONLINE nearguard STABLE
ora.diskmon
1 OFFLINE OFFLINE STABLE
ora.driver.afd
1 ONLINE ONLINE nearguard STABLE
ora.evmd
1 ONLINE ONLINE nearguard STABLE
ora.orcl.db
1 OFFLINE OFFLINE STABLE
--------------------------------------------------------------------------------
[oracle@nearguard dbs]$ ps -ef | grep pmon
oracle 14091 1 0 04:26 ? 00:00:00 asm_pmon_+ASM
oracle 14219 12254 0 04:27 pts/6 00:00:00 grep --color=auto pmon
[oracle@nearguard dbs]$ srvctl start database -d orcl
[oracle@nearguard dbs]$ ps -ef | grep pmon
oracle 14091 1 0 04:26 ? 00:00:00 asm_pmon_+ASM
oracle 14280 1 0 04:27 ? 00:00:00 ora_pmon_orcl
oracle 14710 12254 0 04:28 pts/6 00:00:00 grep --color=auto pmon