Thursday, 8 November 2007

Oracle Database Backup with RMAN

เรื่องราวในตอนนี้จะเกี่ยวกับการ Backup Oracle database แบบ physical backup โดยจะใช้ utility ที่ชื่อว่า Recovery Manager (RMAN)

ศัพท์ที่เกี่ยวข้องเกี่ยวกับการ backup

    การ backup มีโดยหลักๆแล้วมี 2 แบบ
  • Backup database ทั้งก้อน
  • Backup แค่เฉพาะบางส่วนของ database เช่น backup เฉพาะบาง tablespace หรือบาง datafile
    ประเภทการ backup
  • Full backup คือทุกครั้งที่ทำการ backup จะสร้าง backup ด้วยข้อมูลใหม่ทั้งหมด
  • Incrememtal backupคือ backup เฉพาะข้อมูลส่วนที่ต่าง ส่วนที่มีการเปลี่ยนแปลง แต่แบบนี้จะต้องมี backup ตัวเก่าอยู่ก่อนด้วยเพื่อเอาไว้เปรียบเทียบว่ามันต่างกันตรงไหน
    Mode การ backup
  • Offline backup อาจเรียกว่า consistent backup คือการ backup ขณะที่ database ไม่ได้ถูกทำงาน
  • Online backup อาจเรียกว่า inconsistent backup หรือ hot backup คือการ backup ขณะที่ database กำลังทำงานอยู่
    Format ของการ backup
  • Image Copies รูปแบบนี้จะเหมือนกับการ copy physical file ระดับ os เช่น data file ต้นฉบับมีขนาดเท่าไหร่ backup ก็จะมีขนาดเท่ากัน ข้อเสียของการ backup ในรูปแบบนี้คือเปลืองเนื้อที่
  • Backup set รูปแบบนี้เป็น format ของ Oracle โดยเฉพาะ Oracle เลือก backup set รุปแบบนี้เป็น default backup set แตกต่างกับ image copies ตรงที่จะ backup เฉพาะ block ที่มีข้อมูลจัดเก็บอยู่เท่านั้น โดย backup set นั้นเราสามารถกำหนดระดับ set ได้ และกำหนดได้อีกว่าจะเก็บลง media ชนิดไหน disk หรือ tape
Recovery Manager (RMAN)
RMAN คือ utility ที่ถูกติดตั้งมาพร้อมกับ Oracle Database มีไว้เพื่อทำหน้าที่ จัดการ backup, restoring และ recovering database โดยสามารถสั่งงานผ่าน Command หรือ OEM ก็ได้

    ศัพท์ที่เกี่ยวข้องกับ RMAN
  • Target Database คือ database เป้าหมายที่เราจะทำการ backup
  • Channel Process คือ ช่องทางที่ RMAN จะติดต่อกับ target database
  • RMAN Repository คือ ที่เก็บข้อมูลของ RMAN โดยจะเก็บรายละเอียดของการ backup ของ instance นั้นๆ ซึ่งโดย default จะเก็บข้อมูลอยู่ control file ของ instance นั้นๆ แต่เราสามารถเปลี่ยนได้โดยการสร้าง database ใหม่ขึ้นมาเพื่อให้เก็บรายละเอียดการ backup แล้วเราอาจกำหนดให้ share ได้นั้นคือถ้ามี database ที่จะ backup หลายตัวก็ใช้ RMAN Repository เดียวกันได้
  • flash recovery area คือตำแหน่งที่ instance นั้นๆ ใช้จัดการกับไฟล์ต่างๆที่เกี่ยวกับการ backup เช่น archive log file โดย default path จะเก็บอยู่ทีนี่ หรือ ไฟล์ที่ได้จากคำสั่ง RMAN
  • Media managent software คืออุปกรณ์ต่างๆที่ใช้เพื่อ backup ข้อมูล เช่น tape drives การจะใช้อุปกรณ์ภายนอกต่างๆ วิธีใช้ขึ้นอยู่กับผู้ผลิตเป็นผู้กำหนด
  • Recovery catalog คือ database ที่เก็บ recovery catalog schema ซึ่งจะเก็บ metadata ที่ RMAN ใช้ทำหน้าที่ backup และ recovery
    Parameter ที่ใช้ในการ configure RMAN
  • DB_RECOVERY_FILE_DEST_SIZE ใช้กำหนดขนาดพื้นที่ของ flash_recovery ให้ใช้ได้เท่าไหร่
  • DB_RECOVERY_FILE_DEST ใช้กำหนด path ที่ใช้จัดเก็บ backup set
    View ที่เกี่ยวข้องกับ RMAN
  • V$RECOVERY_FILE_DEST เป็น view ที่บอกดูตำแหน่งของ flash recovery
  • V$FLASH_RECOVERY_AREA_USAGE เป็น view ที่บอกตำแหน่ง file แต่ละประเภทใช้เนื้อที่ไปเท่าไหร่
    Physical File ที่ RMAN สามารถ backup ได้
  • Database file = { data file, control file, spfile }
  • Archived log file
  • ส่วน password file, network configure file (tnsname.ora, listener.ora, sqlnet.ora) ไม่สามารถใช้ RMAN backup ได้ พวกนี้เรา manual backup เองได้
คำสั่ง RMAN เบื้องต้น
Start & Exit RMAN
# RMAN target /[@] [nocatalog | catalogname]
# RMAN
RMAN> EXIT

คำสั่ง run script RMAN จากไฟล์
# RMAN target / @file1
RMAN> @file1

คำสั่งตรวจสอบ syntax RMAN
# RMAN CHECKSYNTAX
# RMAN CHECKSYNTAX @file1

คำสั่งเกี่ยวกับ parameter
RMAN> show ;
RMAN> SHOW ALL;
RMAN> CONFIGURE CLEAR;

คำสั่งเกี่ยวกับการจัดการ device อื่น
ระบุอุปกรณ์ที่จะจัดเก็บ
RMAN> CONFIGURE DEFAULT DEVICE TYPE TO ;
ระบุประเภทของการ backup และจะบีบอัดหรือไม่
RMAN> CONFIGURE DEVICE TYPE BACKUP TYPE TO ;
RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT ‘/backup/ora_df%t_s%s_s%p’;
บาง media managers ต้องปรับแต่งผ่าน parameter แล้วแต่ผู้ผลิตอุปกรณ์นั้น
RMAN> CONFIGURE CHANNEL DEVICE TYPE SBT PARMS=’ENV=mml_env_settings’;

คำสั่งเกี่ยวกับการ backup data file
RMAN> BACKUP DATABASE;
Backup บาง tablespace
RMAN> BACKUP TABLESPACE system, users, tools;
RMAN> BACKUP DEVICE TYPE sbt MAXSIZE=10M TABLESPACE user, tool;
Backup บาง data file
RMAN> BACKUP DEVICE TYPE sbt DATAFILE 1,2,3,4 DATAFILECOPY ‘/tmp/system.dbf’;
RMAN> BACKUP DEVICE TYPE sbt TABLESPACE user INCLUDE CURRENT CONTROLFILE;
RMAN> BACKUP AS BACKUPSET DATAFILE
’ORACLE_HOME/oradata/trgt/users01.dbf’,
’ORACLE_HOME/oradata/trgt/tools01.dbf’;
เราสามารถกำหนดเรื่องของ incremental backup ได้แต่การทำ incremental backup จะต้องเปรียบเสมือน level 1 ดังนั้นก่อนจะทำได้ต้องมี level 0 ก่อน นั่นคือเมื่อเรา backup ครั้งแรกให้กำหนดเป็น level 0 ก่อน แต่เมื่อทำ incremental backup ไฟล์ backup level0 และ 1 ต้องอยู่ครบเพื่อทำให้สามารถทำการ restore และ recovery ได้อย่างสมบูรณ์
RMAN> BACKUP INCREMENTAL LEVEL [0 | 1] CUMULATIVE DATABASE;

คำสั่งเกี่ยวกับ backup control file
เป็นการ config ว่าจะให้ autobackup control file และ parameter file เมื่อมีการเปลี่ยนแปลงหรือไม่ และเมื่อมีความเสียหาย RMAN จะ recover ให้กับ instance นั้นเอง
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ;
เปลี่ยน default name ของ autobackup
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE to ‘?/oradata/cf_%F’;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE clear;
ถ้าต้องการ override ค่า autobackup เฉพาะ session นั้นๆ (ใช้ใน run block กับ RMAN prompt)
RMAN> SET CONFIGURE AUTOBACKUP FORMAT
Backup copy control file ณ ปัจจุบัน
RMAN> BACKUP CURRENT CONTROLFILE;
RMAN> BACKUP CURRENT CONTROLFILE TO ’/backup/curr_cf.copy’;
Backup copy control file
RMAN> BACKUP AS COPY CURRENT CONTROLFILE FORMAT ‘/tmp/control01.ctl’;
RMAN> BACKUP DEVICE TYPE sbt CONTROLFILECOPY ‘/tmp/control01.ctl’;

คำสั่งเกี่ยวกับ backup parameter file
RMAN> BACKUP SPFILE;
RMAN> BACKUP DEVICE TYPE sbt SPFILE;

คำสั่งเกี่ยวกับ backup archived log file
RMAN> BACKUP ARCHIVELOG …;
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
RMAN> BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;
RMAN> BACKUP ARCHIVELOG COMPLETION TIME BETWEEN ’SYSDATE-31’ AND ’SYSDATE-7’;

คำสั่ง restore
RMAN> RESTORE DATABASE;
RMAN> RESTORE TABLESPACE users;
RMAN> RESTORE DATAFILE <ชื่อ datafile>;
RMAN> RESTORE DATAFILE 7;

คำสั่ง recovery
RMAN> RECOVER DATABASE;
RMAN> RECOVER TABLESPACE users;
RMAN> RECOVER DATAFILE <ชื่อ datafile>;
RMAN> RECOVER DATAFILE 7;

ตัวอย่างการ backup
Backup Database รวมทั้ง Archivelog file พร้อมให้ delete archive log file ที่ backup แล้วด้วย
# RMAN TARGET backup_admin/backup_admin NOCATALOG
RMAN> BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;

Backup Database รวมทั้ง Control file พร้อมทั้งให้ delete ไฟล์ backup ที่ล้าหลังด้วย
RMAN> backup incremental level 0 cumulative device type disk tag '%TAG' database include current controlfile;
RMAN> allocate channel for maintenance type disk;
RMAN> delete noprompt obsolete device type disk;
RMAN> release channel;

ตัวอย่างการ restore & recovery
Recovering ทั้ง database
RMAN> STARTUP FORCE MOUNT;
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN;

Recovering เฉพาะบาง tablespace
RMAN> SQL 'ALTER TABLESPACE users OFFLINE';
RMAN> RESTORE TABLESPACE users;
RMAN> RECOVER TABLESPACE users;
RMAN> SQL 'ALTER TABLESPACE users ONLINE';

Recovering Datafiles 7
RMAN> SQL 'ALTER DATABASE DATAFILE 7 OFFLINE';
RMAN> RESTORE DATAFILE 7;
RMAN> RECOVER DATAFILE 7;
RMAN> SQL 'ALTER DATABASE DATAFILE 7 ONLINE';

การทำ Backup Control File to Trace
ทำ Trace ของ Control File เพื่อใช้ในการ recover เมื่อ control file เสียหาย ถ้าใช้ OEM ให้เข้าเมนุ Controlfiles แล้วกดปุ่ม Backup To Trace หรือใช้คำสั่ง
SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE; โดยผลลัพธ์จะเก็บอยู่ตามที่ระบุไว้ใน parameter USER_DUMP_DEST
โดย default name: _ora_pid.trc
และ default path: อยู่ที่ <ORACLE_HOME>/admin/<sid>/udump
ภายใน trace ไฟล์จะเก็บเป็นคำสั่ง sql สามารถนำไปสร้างเป็น control file ใหม่ได้
Note: แนะนำว่าเพื่อให้ไม่เกิดความสับสนในการหา file trace ก่อนสั่ง trace เข้าไปลบไฟล์ trace เก่าๆที่เก็บอยู่ก่อนแล้วค่อยสั่ง trace controlfile

เราสามารถทำ Job RMAN โดยใช้ OEM ช่วยทำได้เหมือนกัน แต่เอาไว้ก่อนถ้าไม่ขี้เกียจเดี๋ยวเขียนต่อ แล้วเมื่อวันก่อนลองเล่น Oracle Database 11g เห็นมี feature น่าสนใจอยู่หลายตัวถ้ามีเวลาอยากมา review ให้ดูกัน
ปล1. พยายามสรุปให้ตอนนี้สั้นๆกระชับ ไม่เขียนยาวเหมือนตอนที่แล้ว เขียนยาวเดี๋ยวคนอ่านเหนื่อย คนเขียนก็เหนื่อยเหมือนกันครับ
ปล2. ตอนหน้าลองมาทำ recovery physical database เมื่อมันเสียหายกัน

2 comments:

Anonymous said...

บทความดีมากๆเลยครับ

Anonymous said...

เจ๋่งมากเลยครบท่าน