Sunday, May 4, 2014

Clone Oracle - Copy ระบบฐานข้อมูลแบบยกชุด

ข้อเขียนนี้ช่วยฉัน: 
โพสต์ครั้งแรก: 24 ธันวาคม 2511


บางครั้งบางคราว อาจไม่บ่อยนักที่เราจะต้องทำสำเนาทั้งฐานข้อมูล,ทั้งตัวโปรแกรมของ Oracle รวมทั้ง Configuration ทั้งหมดออกมา และนำไปติดตั้งไว้บนเครื่องอื่น (หรือเครื่องเดียวกัน) เพื่อวัตถุประสงค์บางอย่างเช่น การทำฐานข้อมูลทดสอบจากฐานข้อมูลตัวจริง (Production) โดยที่เราต้องการให้ฐานข้อมูลตัวใหม่ที่ทำสำเนาขึ้น มีคุณสมบัติทุกอย่างเหมือนกับฐานข้อมูลตัวต้นฉบับ ยกเว้นไว้แต่เพียงฮาร์ดแวร์เท่านั้นที่อาจจะแตกต่างกัน แม้ว่าการ Clone จะทำให้กระบวนการทำสำเนาทำได้อย่างรวดเร็ว และสะดวกมากขึ้น แต่ก็มีข้อควรระวังคือ
1) ไม่ควรใช้กับการ Install Production เนื่องจากการ Clone มีขั้นตอนค่อนข้างมาก และเป็นการทำแบบ Manual โอกาสผิดพลาดจึงมีสูง จึงไม่เหมาะที่จะใช้วิธีนี้ในการสร้างฐานข้อมูล Production
2) วิธีนี้ไม่ได้ครอบคลุมถึงระบบที่เป็น Cluster หรือเกี่ยวเนื่อง เช่น ASM หรือ RAC
3) เราตั้งสมมติฐานว่าเครื่องต้นทางกับปลายทางมีการเตรียมการติดตั้งไว้บน OS เหมือนกัน หมายถึงข้อกำหนดที่ต้องมีก่อนติดตั้ง Oracle ทั้งหลาย ได้จัดทำไว้แล้วบนเครื่องปลายทาง สิ่งที่ต่างกันจะมีเพียง Hostname และ IP Address เท่านั้น
4) มีวิธีอื่น ๆ ที่สามารถใช้ได้ในการ Clone เช่น Master Note For Cloning Oracle Database Server ORACLE_HOME's Using the Oracle Universal Installer (OUI) ซึ่งเป็นวิธีที่ได้รับการรับรองจาก Oracle

ขั้นตอนในการ Clone Oracle Database มีดังนี้
หยุดการทำงานของ Oracle
$ emctl stop dbconsole
$ dbshut $ORACLE_HOME

เช็คว่า Process ของ Instance กับ Listener ปิดไปหมดแล้วหรือยัง
$ ps -ef | grep pmon
oracle 1682 1507 0 13:16:21 pts/3 0:00 grep pmon <= ไม่มี Process PMON ของฐานข้อมูลแล้ว
$ ps -ef | grep lsnr
oracle 1684 1507 0 13:16:27 pts/3 0:00 grep lsnr <= ไม่มี Process ของ Listener แล้ว

สร้างไฟล์ TAR
ล็อกอินเป็น root แล้วทำการ TAR และ Zip ไดเรคทอรีของ Oracle ในที่นี้ทั้งโปรแกรม Oracle และ Datafile ทั้งหมดอยู่ใน /opt/oracle
# tar -cvf /tmp/clone.tar /opt/oracle
# gzip /data/clone.tar

ย้ายไฟล์ TAR ไปไว้ที่เครื่องปลายทาง
คุณสามารถใช้เครื่องมืออะไรในการย้ายไฟล์ก็ได้ ในที่นี้เราจะใช้ scp
# scp /data/clone.tar.gz root@192.168.25.101 :/data/clone.tar.gz

Unzip และ Extract ไฟล์ TAR
Unzip และดึงเอา Content ในไฟล์ TAR ออกมาไว้ที่พาธที่ต้องการในเครื่องปลายทาง ล็อกอินด้วย root แล้วรัน
# gunzip /data/clone.tar.gz
# cd /
# tar -xvf /data/clone.tar

ตรวจสอบความความเป็นเจ้าของ (Ownership)
ตรวจสอบความเป็นเจ้าของไดเรคทอรีที่เราเพิ่ง Extract ออกมา (/opt/oracle) ถ้าไม่ตรงกับ Ownership ของเครื่องต้นทางให้เปลี่ยน Ownership ให้ตรง
# chown -R oracle:dba /opt/oracle

รัน Root Configuration Scripts
ให้รัน Root Configuration Scripts ชื่อ orainstRoot.sh และ root.sh บนเครื่องปลายทาง ซึ่งเป็นการกำหนด Permission และสร้างไฟล์ Configuration ต่าง ๆ บน Host
รันคำสั่งข้างล่าง โดยยังคงล็อกอินเป็น root
# /opt/oracle/oraInventory/orainstRoot.sh
Changing permissions of /opt/oracle/oraInventory to 770.
Changing groupname of /opt/oracle/oraInventory to dba.
The execution of the script is complete
พาธที่เก็บไฟล์ orainstRoot.sh อาจจะต่างกันไปจากนี้บ้างนะครับ ขึ้นอยู่กับตอน Install เครื่องต้นทาง จากนั้นให้รันอีกไฟล์ครับชื่อ root.sh
bash-3.00# /opt/oracle/102/root.sh
Running Oracle 10g root.sh script...

The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /opt/oracle/102

Enter the full pathname of the local bin directory: [/usr/local/bin]:
The file "dbhome" already exists in /usr/local/bin. Overwrite it? (y/n) [n]: y
Copying dbhome to /usr/local/bin ...
The file "oraenv" already exists in /usr/local/bin. Overwrite it? (y/n) [n]: y
Copying oraenv to /usr/local/bin ...
The file "coraenv" already exists in /usr/local/bin. Overwrite it? (y/n) [n]: y Copying coraenv to /usr/local/bin ...

Creating /var/opt/oracle/oratab file...
Entries will be added to the /var/opt/oracle/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
ถ้าบนเครื่องมีไดเรคทอรี dbhome, oraenv และ coraenv อยู่แล้ว (ดังตัวอย่างข้างบน เพราะอาจจะเคยมี Oracle อยู่ในระบบมาก่อน) ก็อนุญาตให้ Replace ไป

แก้ไข Environment Variable ในไฟล์ Config
ถ้าคุณยังไม่ได้เตรียมไฟล์ .bash_profile ไว้ ให้ Copy ไฟล์จากเครื่องต้นทางไปไว้ยังปลายทาง ที่ Home Directory ของ User ที่เป็นเจ้าของ Oracle
# scp /export/home/oracle/.bash_profile oracle@192.168.25.101:/export/home/oracle/./bash_profile
แก้ไขไฟล์ .bash_profile บนเครื่องปลายทาง ใส่ค่าใน Environment Variable ต่าง ๆ ให้ถูกต้อง
แก้ไขชื่อ Host และ IP ในไฟล์ listener.ora และ tnsnames.ora ในพาธ $ORACLE_HOME/network/admin ให้ถูกต้อง
แก้ไขไฟล์ /var/opt/oracle/oratab (พาธอาจจะต่างออกไปจากนี้บ้าง ขึ้นอยู่กับ OS ที่ใช้) เพื่อระบุว่าจะให้เปิดฐานข้อมูลตอนบูธเครื่องหรือไม่ (Y|N) เช่น
PAO1:/opt/oracle/102:Y

Start Oracle
เปิด Listener และ Database ล็อกอินโดยใช้ user ที่เป็นเจ้าของ Oracle (ปกติจะเป็น User ชื่อ oracle หรือเป็นผู้ที่ Install Oracle)
$ lsnrctl start
$ dbstart $ORACLE_HOME

การแก้ไข Configuration เพิ่มเติม
ถ้าคุณต้องการให้ฐานข้อมูลของคุณ Start โดยอัตโนมัติหลังเปิดเครื่องให้ใช้วิธีใน เปิด Oracle อัตโนมัติตอนบูธเครื่อง Solaris

อ้างอิง: Manually Cloning an Existing Oracle Database Installation on Linux, ORACLE-BASE, Tim Hall

No comments:

Post a Comment