บทความนี้อธิบายกระบวนการโคลน (Cloning) แบบขั้นตอนต่อขั้นตอน สำหรับ Oracle® E-Business Suite® (EBS) R12.2 แบบ On-premise บนฐานข้อมูลเวอร์ชัน 19c โดยใช้ Recovery Manager (RMAN) Hot backup บนเซิร์ฟเวอร์ Red Hat® Enterprise Linux® ขั้นตอนเหล่านี้ใช้ได้กับระบบปฏิบัติการอื่นๆ ด้วย
EBS Cloning
เพื่อดำเนินการโคลน EBS คุณต้องทำตามขั้นตอนระดับสูงดังต่อไปนี้:
- รันยูทิลิตี้ Pre-clone บนโหนดฐานข้อมูลและแอปพลิเคชันของแหล่งที่มา (Source)
- สำรองฐานข้อมูล Container Database (CDB) แบบเต็มพร้อม Archives โดยใช้ RMAN Hot backup และคัดลอกไปยังโหนดเป้าหมาย (Target)
- ทำความสะอาดโหนดฐานข้อมูลและแอปพลิเคชันของเป้าหมาย
- คัดลอก Application Binaries และ Database Binaries ของแหล่งที่มาไปยังโหนดเป้าหมาย
- กำหนดค่า $Oracle_Home บนโหนดฐานข้อมูลเป้าหมาย
- กู้คืน (Restore) และกู้คืนข้อมูล (Recover) ฐานข้อมูล
- ดำเนินขั้นตอนหลังกู้คืนบนโหนดฐานข้อมูลเป้าหมาย
- กำหนดค่าแอปพลิเคชันบนโหนดแอปพลิเคชันเป้าหมาย
- ดำเนินขั้นตอนหลังโคลนบนโหนดแอปพลิเคชัน
- เริ่มบริการแอปพลิเคชันเป้าหมาย
นี่คือขั้นตอนโดยละเอียด:
1. รันยูทิลิตี้ Pre-clone
รันยูทิลิตี้ Pre-clone บนโหนดฐานข้อมูลแหล่งที่มาและโหนดแอปพลิเคชัน เพื่อสร้าง Drivers และไฟล์การตั้งค่า ยูทิลิตีนี้ตั้งค่าฐานข้อมูลและ Application Binaries บนโหนดเป้าหมายก่อนคัดลอกฐานข้อมูลและ Application Binaries ไปยังโหนดเป้าหมาย
ก. รันคำสั่งต่อไปนี้เพื่อ Source ไฟล์สภาพแวดล้อม Pluggable Database (PDB) บนโหนดฐานข้อมูลที่ $ORACLE_HOME:
cd $ORACLE_HOME
. <PDB_NAME>_hostname.env
cd $ORACLE_HOME/appsutil/scripts/$CONTEXT_NAME
perl adpreclone.pl dbTier
ข. รันคำสั่งต่อไปนี้บนโหนดแอปพลิเคชัน:
. EBSApps run (Source RUN FS)
cd $ADMIN_SCRIPTS_HOME
perl adpreclone.pl appsTier
2. สำรอง CDB
สำรองฐานข้อมูล CDB แบบเต็มพร้อม Archives โดยใช้ RMAN Hot backup และคัดลอกไปยังโหนดเป้าหมาย:
ก. รันคำสั่งต่อไปนี้เพื่อ Source ไฟล์สภาพแวดล้อม CDB ที่ $ORACLE_HOME:
cd $ORACLE_HOME
. <CDB_NAME>_hostname.env
connect target /
ข. รันคำสั่งต่อไปนี้เพื่อทำขั้นตอนนี้ให้เสร็จ:
run {
allocate channel d1 type disk;
allocate channel d2 type disk;
allocate channel d3 type disk;
allocate channel d4 type disk;
BACKUP as compressed backupset FULL FILESPERSET 10 FORMAT '<Backup location>/<SID>_bk_%s_%p_%t.bak' DATABASE;
BACKUP as compressed backupset filesperset 10 FORMAT '<Backup location>/<SID>_arch_%s_%p_%t.bak' ARCHIVELOG ALL skip inaccessible;
BACKUP FORMAT '<Backup location>/<SID>_cntrl_%s_%p_%t.bak' CURRENT CONTROLFILE;
RELEASE CHANNEL d1;
RELEASE CHANNEL d2;
RELEASE CHANNEL d3;
RELEASE CHANNEL d4;
}
หลังจากสำรองเสร็จ ให้ย้ายไปยังตำแหน่งเป้าหมาย หรือแชร์ Mount point การสำรองผ่าน Network File System (NFS) ไปยังโหนดเป้าหมายเพื่อประหยัดเวลา
3. ทำความสะอาด (Clean up)
ทำความสะอาดโหนดฐานข้อมูลและแอปพลิเคชันของเป้าหมาย
รันขั้นตอนต่อไปนี้บนโหนดฐานข้อมูล:
ก. สำรองไฟล์การตั้งค่าและไดเรกทอรีสำคัญต่อไปนี้ก่อนทำความสะอาด:
- $CONTEXT_FILE
- Environment files
- dbs
- $TNS_ADMIN directories
ข. ลบ Target OH และ Drop ฐานข้อมูล
ค. ลบเนื้อหาของ oraInventory
โปรดทราบว่า ไดเรกทอรี UTL ไม่ควรมี Symbolic Links หากมี ให้ลบและสร้างโครงสร้างไดเรกทอรีทางกายภาพ (Physical directory structure)
รันขั้นตอนต่อไปนี้บนโหนดแอปพลิเคชัน:
ก. สำรอง RUN และ PATCH $CONTEXT_FILE และไดเรกทอรี $TNS_ADMIN ของ RUN FS
ข. จดบันทึก RUN FS ของโหนดเป้าหมายก่อนทำความสะอาดโหนดแอปพลิเคชัน
ค. ทำความสะอาดไดเรกทอรี FS1, FS2, FS_NE, และ oraInventory
4. คัดลอก Binaries
ดำเนินขั้นตอนต่อไปนี้เพื่อคัดลอก Application Binaries และ Database Binaries ของแหล่งที่มาไปยังโหนดเป้าหมาย
ก. บนโหนดฐานข้อมูล คัดลอกและถ่ายโอน Binaries เวอร์ชัน 19.0.0 (19c) ไปยังเซิร์ฟเวอร์ฐานข้อมูลเป้าหมาย
ข. บนโหนดแอปพลิเคชัน ถ่ายโอนเฉพาะไดเรกทอรี EBSapps ของ RUN FS จากแหล่งที่มาไปยังโหนดเป้าหมายภายใต้ RUN FS ของเป้าหมาย
5. กำหนดค่า $Oracle_Home
กำหนดค่า $Oracle_Home บนโหนดฐานข้อมูลเป้าหมาย
ก่อนรัน adcfgclone.pl เพื่อกำหนดค่า $Oracle_Home ให้ทำความสะอาดไดเรกทอรี oraInventory หากคุณโคลนครั้งแรกบนเซิร์ฟเวอร์ใหม่ ให้รันเฉพาะขั้นตอนต่อไปนี้และระบุค่าสำหรับ Inputs ทั้งหมด ดำเนินขั้นตอนต่อไปนี้:
ก. สร้าง Context File:
cd $ORACLE_HOME/appsutil/clone/bin
perl adclonectx.pl contextfile=<Source database context file> template=$ORACLE_HOME/appsutil/template/adxdbctx.tmp [pairsfile=<Pairs file Path>]
perl adcfgclone.pl dbTechStack <Full Path of CONTEXT_FILE>
ข. สร้าง listener.ora และ tnsnames.ora:
cd $ORACLE_HOME/appsutil
./txkSetCfgCDB.env -dboraclehome=<ORACLE_HOME>
cd $ORACLE_HOME/appsutil/bin
perl txkGenCDBTnsAdmin.pl -dboraclehome=$ORACLE_HOME -cdbname=<target CDB NAME> \
-cdbsid=<SID> -dbport=<Target DB port> -outdir=$ORACLE_HOME/appsutil/log \
-israc=<yes/no> [-virtualhostname=<virtual hostname>]
ค. หากเป็นอินสแตนซ์ที่โคลนซ้ำ ใช้การสำรอง CONTEXT_FILE เพื่อกำหนดค่า Database Binaries ของเป้าหมาย:
cd <RDBMS ORACLE_HOME>/appsutil/clone/bin
perl adcfgclone.pl dbTechStack <Full Path of CONTEXT_FILE backup location>
ง. หากเป็นอินสแตนซ์ที่โคลนซ้ำ ให้ย้อนกลับไฟล์ dbs และ TNS เพื่อให้ไฟล์การตั้งค่าและ Init parameters ทั้งหมดสมบูรณ์หลังการกำหนดค่า
จ. เริ่ม Listener
6. กู้คืนและกู้คืนข้อมูลฐานข้อมูล (Restore and Recover)
หลังจากกำหนดค่า $Oracle_Home เริ่มกู้คืนฐานข้อมูลเป้าหมายโดยใช้การสำรองที่ทำไว้ก่อนหน้านี้:
ก. ก่อนกู้คืน ตรวจสอบว่าพารามิเตอร์ต่อไปนี้ถูกต้องบนโหนดเป้าหมาย:
- db_file_name_convert
- log_file_name_convert
ข. เริ่มฐานข้อมูลเป้าหมายในสถานะ nomount และรันคำสั่ง RMAN ต่อไปนี้เพื่อกู้คืนฐานข้อมูล:
Rman auxiliary /
run {
allocate auxiliary channel d1 device type disk;
allocate auxiliary channel d2 device type disk;
allocate auxiliary channel d3 device type disk;
duplicate database to '<CDB NAME>' backup location '<RMAN backup location>' nofilenamecheck;
release channel d1;
release channel d2;
release channel d3;
}
7. ขั้นตอนหลังกู้คืนบนเป้าหมาย (Target Post-Restore Steps)
ดำเนินขั้นตอนหลังกู้คืนบนโหนดฐานข้อมูลเป้าหมาย
หลังจากกู้คืนฐานข้อมูล CDB เสร็จและเปิดอินสแตนซ์ CDB ให้ทำขั้นตอนต่อไปนี้:
ก. Source ไฟล์ CDB env และเปลี่ยนชื่อ PDB เนื่องจากคุณกู้คืนเป็นชื่อ PDB ของแหล่งที่มา ใช้คำสั่งต่อไปนี้เพื่อเปลี่ยนชื่อ PDB เป้าหมาย:
sqlplus / as sysdba
SQL> alter pluggable database "<Source PDB Name>" close;
SQL> alter pluggable database "<Source PDB Name>" unplug into '<ORACLE_HOME>/dbs/<Source PDB Name>_PDBDesc.xml';
SQL> drop pluggable database "<Source PDB Name>";
SQL> create pluggable database "<Target PDB Name>" using '<ORACLE_HOME>/dbs/<PDB Name>_PDBDesc.xml' NOCOPY SERVICE_NAME_CONVERT=('ebs_<Source PDB Name>','ebs_<Target PDB Name>','<Source PDB Name>_ebs_patch','<Target PDB Name>_ebs_patch');
SQL> alter pluggable database "<Target PDB Name>" open read write;
SQL> alter pluggable database all save state instances=all;
SQL> sho pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
------ ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
4 <PDB Name> READ WRITE NO
ข. Source ไฟล์ PDB env และรันคำสั่งต่อไปนี้เพื่อตั้งค่าค่า UTL_FILE_DIR เป้าหมายใน Oracle Database:
perl $ORACLE_HOME/appsutil/bin/txkCfgUtlfileDir.pl -contextfile=$CONTEXT_FILE -oraclehome=$ORACLE_HOME -outdir=$ORACLE_HOME/appsutil/log -mode=getUtlFileDir
ค. รันคำสั่งต่อไปนี้เพื่อแก้ไขไฟล์ <PDB Name>_utlfiledir.txt ภายใต้ Oracle_Home/dbs และเปลี่ยน UTL Path ตามที่เหมาะสม:
perl $ORACLE_HOME/appsutil/bin/txkCfgUtlfileDir.pl -contextfile=$CONTEXT_FILE -oraclehome=$ORACLE_HOME -outdir=$ORACLE_HOME/appsutil/log -mode=setUtlFileDir
ง. รันสคริปต์ต่อไปนี้สำหรับแต่ละ Path ใน <PDB Name>_utlfiledir.txt:
perl $ORACLE_HOME/appsutil/bin/txkCfgUtlfileDir.pl -contextfile=$CONTEXT_FILE -oraclehome=$ORACLE_HOME -outdir=$ORACLE_HOME/appsutil/log -mode=createDirObject
perl $ORACLE_HOME/appsutil/bin/txkCfgUtlfileDir.pl -contextfile=$CONTEXT_FILE -oraclehome=$ORACLE_HOME -outdir=$ORACLE_HOME/appsutil/log -mode=syncUtlFileDir -skipautoconfig=yes
cd $ORACLE_HOME/appsutil/install/$CONTEXT_NAME
sqlplus / as sysdba @adupdlib.sql <libext>
clean FND_NODE table
sqlplus apps/<Source Apps password>
EXEC FND_CONC_CLONE.SETUP_CLEAN;
Commit;
จ. ใช้คำสั่งต่อไปนี้เพื่อรัน adautocfg.sh:
cd <$ORACLE_HOME/appsutil/scripts/$CONTEXT_NAME>
sh adautocfg.sh
8. กำหนดค่าแอปพลิเคชันเป้าหมาย
กำหนดค่าแอปพลิเคชันบนโหนดแอปพลิเคชันเป้าหมาย:
ก. ก่อนเริ่ม adcfgclone.pl ให้ทำความสะอาดไดเรกทอรี PATCH FS, FS_NE, และ oraInventory
ข. รันคำสั่งต่อไปนี้เพื่อกำหนดค่าแอปพลิเคชัน:
cd <COMMON_TOP>/clone/bin
export TIMEDPROCESS_TIMEOUT=-1
export T2P_JAVA_OPTIONS="-Djava.io.tmpdir=<Temp directory location>"
perl ./adcfgclone.pl appsTier dualfs
ค. ให้ Inputs ทั้งหมดที่นี่
ง. หากเป็นอินสแตนซ์โคลนซ้ำ คุณสามารถใช้การสำรอง CONTEXT_FILE ได้ รันคำสั่งต่อไปนี้:
perl ./adcfgclone.pl appsTier <location of CONTEXT_FILE backup> dualfs
9. ขั้นตอนหลังโคลนแอปพลิเคชัน (Application Post-Clone Steps)
ดำเนินขั้นตอนหลังโคลนบนโหนดแอปพลิเคชัน:
ก. หลังจากกำหนดค่าแอปพลิเคชัน ให้เปลี่ยนรหัสผ่าน apps, sysadmin, และ custom schema (ถ้ามี) โดยใช้คำสั่ง FNDCPASS
ข. หลังจากเปลี่ยนรหัสผ่าน apps ให้รัน Autoconfig บนโหนดฐานข้อมูลและโหนดแอปพลิเคชัน
ค. ดำเนินขั้นตอน Custom อื่นๆ (ถ้ามี) สำหรับอินสแตนซ์ที่โคลน
10. เริ่มบริการแอปพลิเคชันเป้าหมาย
ตอนนี้คุณสามารถเริ่มบริการแอปพลิเคชันทั้งหมดของอินสแตนซ์โคลนเป้าหมาย และดำเนินการตรวจสอบความสมบูรณ์ (Sanity checks) ทั้งหมดสำหรับอินสแตนซ์ที่โคลน
สรุป
โดยใช้ขั้นตอนข้างต้น คุณสามารถโคลนหรือ Refresh อินสแตนซ์ PROD ไปยังเซิร์ฟเวอร์ Non-prod ด้วยฐานข้อมูลเวอร์ชัน 19c ที่มีสถาปัตยกรรม Multitenant
ใช้แท็บ Feedback เพื่อแสดงความคิดเห็นหรือถามคำถาม คุณยังสามารถเริ่มการสนทนากับเราได้