Sunday, June 14, 2009

การแบ็คอัพฐานข้อมูลในโหมด No Archivelog โดยใช้ Enterprise Manager

Oracle ได้เตรียมวิธีการแบ็คอัพแบบที่เชื่อถือได้ว่าจะสามารถกู้ข้อมูลคืนได้เมื่อเกิดการสูญเสียของข้อมูลอันเนื่องมาจาก Media Failure (การเสียของอุปกรณ์เช่นฮาร์ดดิสก์ หรือการที่ไฟล์เกิดเสียเป็นต้น) ลองดูสิครับ วิธีนี้ช่วยชีวิตผมมาได้หลายครั้งแล้วครับ

Database ในโหมด No Archivelog
เพื่อเป็นการลดภาระของเครื่อง server ที่ใช้ในการพัฒนาระบบ ซึ่งมักจะเป็นเครื่องที่มีประสิทธิภาพปานกลาง หรือค่อนข้างต่ำ หรือเพื่อให้สามารถรองรับงานของระบบทดสอบอื่น ๆ ได้ไปพร้อม ๆ กัน ระบบฐานข้อมูลที่ใช้บนเครื่องทดสอบอาจจะคอนฟิคให้เป็นระบบ no archivelog mode โดยในโหมดนี้การแบ็คอัพจะต้องทำการปิดระบบฐานข้อมูล (cold or offline backup) และการจะ recover ก็จะทำได้ถึงจุดที่ได้ทำการ backup ไว้เท่านั้น เนื่องจากระบบฐานข้อมูลในโหมดนี้ไม่มี archivelog (ซึ่งช่วยในการบันทึกรายละเอียดการทำงานบนฐานข้อมูลระหว่างแต่ละชุดของแบ็คอัพ)

1. ขั้นตอนแรกเราจะเช็คดูว่า database อยู่ใน no archivelog mode
การดูว่าดาต้าเบสอยู่ใน mode archivelog หรือเปล่า

เปิด Oracle Enterprise Manager(EM) => คลิ๊ก Maintenance tab => คลิ๊ก Recovery Setting => ตรงหัวข้อ Media Recovery
เช็คดูว่า ARCHIVLOG mode ไม่มีเครื่องหมายถูก



ถ้าหากมีเครื่องหมายถูกหน้า ARCHIVELOG Mode แสดงว่าฐานข้อมูลอยู่ใน archivelog mode ให้คลิ๊กที่หน้า ARCHIVELOG Mode เพื่อลบเครื่องหมายถูก แล้วคลิ๊ก Apply จะมีหน้า Confirmation ขึ้นมาเตือนว่าฐานข้อมูลจะ restart ให้คลิ๊ก Yes จะปรากฏหน้า Restart Database: Specify Host and Target Database Credentials



- ตรง Host Credentials ให้ใส่ OS username / password ที่มีสิทธิ์ในไดเรคทอรีที่เกี่ยวข้องเช่น flash_recovery_area
- ตรง Database Credentials ให้ใส่ user ที่ได้สิทธิ์ SYSDBA เช่น SYS เป็นต้น
- คลิ๊ก OK จะปรากฎหน้า Restart Database: Confirmation
- คลิ๊ก YES ระบบฐานข้อมูลจะ shutdown และ เปิดขึ้นมาด้วย no archivelog mode

อาจจะต้องรอสักพักแล้วจึงกด refresh ดูว่า Database start เสร็จแล้วหรือยัง

2. กำหนดขนาดของ Flash Recover Area โดยให้มีขนาดอย่างน้อยที่สุดเท่ากับ
ขนาดของ datafile (.DBF) ทั้งหมดรวมกัน ยกเว้น datafile ที่เป็นของ temporary tablespace
+ ขนาดของไฟล์ incremental backup จำนวน 1 ไฟล์

เปิด em => คลิ๊ก Maintenance tab => คลิ๊ก Recovery Setting => ตรงหัวข้อ Flash Recovery
ในตัวอย่างนี้ เราจะตั้งเป็น 5GB

- พิมพ์ 5 ลงในช่อง Flash Recovery Area Size และคลิ๊ก Apply



3. เมื่อตั้งค่าสถานที่จัดเก็บและโหมดของ database แล้ว ต่อไปคือการตั้งค่าให้กับโปรแกรมการแบ็คอัพ หรือ RMAN ดังนี้
เปิด em => คลิ๊ก Maintenance tab => คลิ๊ก Backup Setting => คลิ๊ก Policy



- ตรง Retention Policy เพื่อกำหนดว่าจะให้คงไฟล์แบ็คอัพไว้ได้นานแค่ไหน เช่น RETENTION POLICY=1 หมายความว่าจะเก็บไฟล์แบคอัพไว้เพียงชุดเดียว ถ้ามีไฟล์แบ็คอัพใหม่ออกมาตัวเก่าก็จะถูกกำหนดให้ obsolete รอเวลาการลบออกเป็นต้น ให้เลือก ’Retain at least the specified number of full backups for each datafile’
- ภายใต้หัวข้อ Backup Policy เช็คถูกที่ Optimize the whole database by skipping unchanged… ถ้าใน Flash Recovery Area มีไฟล์แบ็คอัพที่มีข้อมูลแบ็คอัพชุดเดียวกัน (เช่นมี SCN ชุดเดียวกัน) อยู่แล้ว ก็จะไม่แบ็คอัพซ้ำเพื่อประสิทธิภาพในการแบ็คอัพและพื้นที่จัดเก็บ
- ภายใต้หัวข้อ Backup Policy เช็คถูกที่ Automatically backup the contro lfile… เพื่อกำหนดให้แบ็คอัพ controlfile และ spfile ทุกครั้งที่แบ็คอัพ กรณีไม่ได้ใช้ RMAN catalog ควรใช้ฟีเจอร์นี้
- ภายใต้หัวข้อ Host Credentials ใส่ username และ password ของ OS
- อันนี้ ถ้ามีเชื่อมต่อกับเทปแบ็คอัพก็คลิ๊ก Device แท็ป แล้วใส่ Media Management Vendor Library Parameters ในหัวข้อ Media Management Setting

4. เมื่อจบขั้นตอนที่ 3 เราก็พร้อมที่จะทำการแบ็คอัพแล้ว กลับไปที่แท็ป Maintenance ตรงหัวข้อ High Availability / Backup/Recovery => คลิ๊ก Schedule



- ภายใต้หัวข้อ Host Credentials ใส่ username และ password ของ OS แล้ว คลิ๊ก Schedule customized backup
- คลิ๊ก Schedule Oracle-Suggested Backup



ที่หน้า Schedule Oracle-Suggested Backup: Destination
- เลือก Disk
- คลิ๊ก Next



ที่หน้า Schedule Oracle-Suggested Backup: Setup
เป็นการอธิบายถึงการทำงานของ backup process สังเกต Disk Settings จะบอกตำแหน่งของ Flash Recovery Area
- คลิ๊ก Next



ที่หน้า Schedule Oracle-Suggested Backup: Schedule
ให้กำหนดเวลาที่จะแบ็คอัพในหน้านี้ ถ้าจะให้เริ่มวันนี้เลยก็ปล่อยค่าใน Start Date เป็นค่า default ปล่อยค่า Time Zone เป็น GMT +7:00 และตั้งค่าเวลาที่ต้องการให้เริ่ม backup
- คลิ๊ก Next



หน้าสุดท้ายจะเป็นหน้าสรุปเพื่อให้เราตรวจสอบอีกทีหนึ่ง โดยสคริปต์ที่ได้จะมีลักษณะดังต่อไปนี้

Daily Script:
run {
allocate channel oem_disk_backup device type disk;
recover copy of database with tag 'ORA$OEM_LEVEL_0';
backup incremental level 1 cumulative copies=1 for recover of copy with tag 'ORA$OEM_LEVEL_0' database;
}

บรรทัดที่ 1 เป็นคำสั่งรันคำสั่งต่าง ๆ ที่อยู่ในวงเล็บปีกกา
บรรทัดที่ 2 เป็นการ allocate device channel ที่จะใช้ในการรันคำสั่งอาจจะเป็น disk หรือ tape (sbt)
บรรทัดที่ 3 ให้อัพเดท ( recover) ไฟล์แบ็คอัพ level 0 ด้วยไฟล์แบ็คอัพ incremental level 1ตัวล่าสุด
บรรทัดที่ 4 แบ็คอัพทั้งฐานข้อมูลแบบ incremental level 0 ก่อนในวันแรก และ level 1 ในวันต่อๆ ไป โดยใช้ชื่อแบ็คอัพว่า ORA$OEM_LEVEL_0

ตัวอย่างนี้เป็นการที่จะให้ rman ทำการแบ็คอัพแบบ whole database ในวันแรก และ incremental ในวันถัดไป โดยตัวที่เป็น whole database แบ็คอัพนั้น จะถูกอัพเดทด้วยไฟล์ incremental แบ็คอัพทุก ๆ วัน ทำให้เราสามารถใช้ file ที่เกิดจาก whole backup ร่วมกับไฟล์แบ็คอัพ incremental ของแต่ละวันในการกู้ข้อมูลกลับมาได้ โดยจะได้เท่าที่ได้แบ็คอัพไว้

ผลของการรันสคริปต์ข้างบนทุกวันจะเป็นดังนี้
> ในวันแรก, คำสั่ง RECOVER จะไม่มีผลอะไร, ส่วนคำสั่ง BACKUP... FOR RECOVER OF COPY... จะสร้างไฟล์แบ็คอัพ level 0 (คล้ายการ copy ไฟล์จาก original datafiles)
> วันที่สอง, คำสั่ง RECOVER ยังคงไม่ทำอะไร เพราะว่ายังไม่มีไฟล์แบ็คอัพ incremental level1 มาให้อัพเดท, ส่วนคำสั่ง BACKUP... จะสร้างไฟล์แบ็คอัพที่เป็น incremental level 1
> วันต่อมา, คำสั่ง RECOVER จะเอาไฟล์ incremental level 1 ที่ได้จากวันก่อนหน้ามาอัพเดทไฟล์แบ็คอัพ level 0 ที่ได้จากวันแรก ทำให้ไฟล์แบ็คอัพ level 0 นี้มีความทันสมัยขึ้นเทียบเท่ากับวันที่สอง, คำสั่ง BACKUP... จะทำการแบ็คอัพ incremental level 1 ของวันนี้

สมมติอีกว่าแผนการแบ็คอัพนี้ให้เริ่มต้นเมื่อวันที่ 1 กุมภาพันธ์ ข้อมูลข้างล่างนี้แสดงให้เห็นว่าเนื้อหาใน flash recovery area เปลี่ยนไปอย่างไรในแต่ละวันเมื่อใช้แผนการแบ็คอัพแบบนี้ สังเกตว่าระบบฐานข้อมูลจะปิดตัวเองก่อนทำการแบ็คอัพทุกครั้ง และเปิดเมื่อได้ทำการแบ็คอัพเสร็จเรียบร้อยแล้ว



หมายเหตุ เนื่องจากเรากำหนด Flash Recover Area Size ไว้เท่ากับ 10G การแบ็คอัพโดยอัตโนมัติที่เราตั้งไว้นี้จะทำการแบ็คอัพไปเรื่อย ๆ จนกว่าจะเต็มพื้นที่ 10G จากนั้นถ้ามันต้องการพื้นที่เพิ่มมันจะเริ่มทำการลบเอาไฟล์เก่าที่ไม่อัพเดทแล้ว (เนื่องมาจากมีไฟล์แบ็คอัพอันใหม่ที่ทันสมัยกว่าเป็นต้น) หรือที่เรียกว่า obsolete ออกไปแล้วจึงทำการแบ็คอัพ

5. การตรวจสอบ Backup Jobs ที่ได้ตั้งไว้
จากหน้า Home => คลิ๊กแท็ป Maintenance ตรงหัวข้อ High Availability / Backup/Recovery => คลิ๊ก Schedule Backup
ตรง Current Database Information คลิ๊กที่ Backup Jobs จะแสดงรายการแบ็คอัพที่ได้ตั้งค่าไว้ในหน้า Job Activity

1 comment:

Up2Gu said...

ขอบคุณครับได้ ความรู้มากๆ ตอนนี้ผมติดปัญหาที่ว่า มันไม่ลบ datafilecopy ตัวเก่าทิ้ง เลยทำให้ backup piece โต ขึ้นเรื่อย ๆครับ
ใน catalog datafilecopy ก็มี datafilecopy อยู่นะครับ ไม่ทราบว่ามีวิธีแก้ไขอย่างไรได้บ้างโดยที่ไม่ต้อง down database ขอบคุณครับ

Post a Comment