Updated: 5/4/2009
ผลที่ได้จากกระบวนการแบ็คอัพนี้ จะคล้าย ๆ กับ การทำ Daily Backup ใน Enterprise Manager (EM) โดยเป็นการแบ็คอัพเมื่อดาต้าเบสรันเป็นแบบ No Archivelog ซึ่งในวันแรกจะทำการ Copy Datafile ทั้งหมดก่อน (Level 0) พอวันที่สองจะทำการแบ็คอัพเพิ่มเฉพาะข้อมูลส่วนต่าง (Level 1) พอวันที่สามข้อมูลที่เพิ่มของวันที่สองจะถูกเอารวมเข้ากับ Datafile ในวันที่ 1 รวมทั้งจะทำการแบ็คอัพเพิ่มเฉพาะข้อมูลส่วนต่างของวันที่สาม พอวันต่อ ๆ มาก็จะทำเหมือนกับวันที่สาม
ด้วยหลักการข้างบนสามารถใช้คำสั่งในกรอบข้างล่างซึ่งจะแบ็คออัพลงบนดิสก์เท่านั้น การก๊อปปี้ขึ้น Tape อาจจะใช้ Third Party software หรืออื่น ๆ
****************************************************************************************************************
ตัวอย่างของการรัน RMAN ที่จะทำการแบ็คอัพข้อมูลที่สามารถกู้ข้อมูลกลับมาได้ ณ ช่วงเวลาต่าง ๆ ที่อยู่ในช่วง 7 วันก่อนที่จะกู้ข้อมูล
RUN {
RECOVER COPY OF DATABASE WITH TAG 'incr_update'
UNTIL TIME 'SYSDATE - 7';
BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_update'
DATABASE;
}
คำสั่งข้างต้นจะมีผลดังนี้:
คืนแรกคำสั่ง RECOVER COPY... UNTIL TIME จะไม่มีผลอะไร และคำสั่ง BACKUP INCREMENTAL... FOR RECOVER OF COPY จะสร้างไฟล์แบ็คอัพ Level 0
พอคืนที่สองถึงคืนที่เจ็ด คำสั่ง RECOVER COPY... UNTIL TIME จะยังคงไม่มีผลเนื่องจาก SYSDATE-7 ยังไม่มีข้อมูลที่จะ Recover (เพื่ออัพเดท Datafile Copy)คำสั่ง BACKUP INCREMENTAL... FOR RECOVER OF COPY จะสร้างไฟล์แบ็คอัพ Differential Level1 ซึ่งจะแบ็คอัพเฉพาะข้อมูลส่วนต่างของแต่ละวันไว้
พอวันที่แปดเป็นต้นไป คำสั่ง RECOVER COPY... UNTIL TIME จะทำการอัพเดทไฟล์แบ็คอัพ โดยเอาไฟล์แบ็คอัพแบบ Incremental Level1 ที่ได้ทำไว้ทุกวัน (เมื่อเจ็ดวันก่อน)และเช่นเดียวกับวันก่อนหน้า คำสั่ง BACKUP INCREMENTAL... FOR RECOVER OF COPY จะสร้างไฟล์แบ็คอัพ Differential Level1 ซึ่งจะแบ็คอัพเฉพาะข้อมูลส่วนต่างของแต่ละวันไว้
ดังตัวอย่าง คุณสามารถทำการกู้ข้อมูลไป ณ จุด SCN ใด ๆ ระหว่างจุดที่ได้ทำการแบ็คอัพไว้ ร่วมกับ Redo Logs ซึ่งเนื่องจากเราทำการอัพเดทไฟล์แบ็คอัพทุกวัน เราจึงจะใช้ข้อมูลใน Redo Logs ย้อนหลังไม่เกิน 1 วัน
จากการทดสอบ
สมมติว่าเราตั้งตารางการแบ็คอัพดังนี้
อาทิตย์ backup incremental level 0 ลงดิสก์, ก๊อปปี้ขึ้น TapeWeek1
วันจันทร์ backup incremental level1 ลงดิสก์, ก๊อปปี้ขึ้น TapeDay1
วันอังคาร backup incremental level 1 ลงดิสก์, ก๊อปปี้ขึ้น TapeDay2
วันพุธ backup incremental level 1 ลงดิสก์, ก๊อปปี้ขึ้น TapeDay3
วันพฤหัส backup incremental level 1 ลงดิสก์, ก๊อปปี้ขึ้น TapeDay4
วันศุกร์ backup incremental level 1 ลงดิสก์, ก๊อปปี้ขึ้น TapeDay5
วันเสาร์ backup incremental level1 ลงดิสก์, ก๊อปปี้ขึ้น TapeDay6
-- เมื่อ backup level 0 จะได้ไฟล์ copy จาก database file จำนวน 4 ไฟล์ และ backupset ของ controlfile อีกหนึ่ง
-- เมื่อ backup level 1 cumulative จะได้ไฟล์ backupset (rman ไม่ support incremental level อื่น นอกจาก 0 กรณีเป็น backup copy ก็เลยมีแต่ backup set เท่านั้น) ของการเปลี่ยนแปลงรวมทั้ง 4 ไฟล์เป็นไฟล์เดียว และ backupset ของ controlfile อีกหนึ่ง
-- ไฟล์สุดท้ายที่เป็น incremental backup จะหายไม่ได้ เราไม่สามารถจะ recover จากไฟล์ incremental ก่อนหน้าได้ กรณีหายจริงๆ จะต้องใช้ recover database until cancel แทน recover database noredo แทน ซึ่งจะได้ข้อมูลคืนเท่ากับ level 0 (whole backup) เท่านั้น
Showing posts with label level1. Show all posts
Showing posts with label level1. Show all posts
Saturday, May 9, 2009
Thursday, May 7, 2009
การแบ็คอัพแบบ Copy Incremental Level 0, 1 (Archivelog Mode)
Updated: 5/4/2009
การแบ็คอัพบนเครื่องที่ใช้งานจริง (Production Server)
1. ดาต้าเบสใช้ archivelog mode
การ ดูว่าดาต้าเบสอยู่ใน mode archivelog หรือเปล่า
ล็อคอินเข้า SQL*Plus ด้วย sys as sysdba
--***************************************************************
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 16
Next log sequence to archive 18
Current log sequence 18
SQL>
--***************************************************************
ตรงบรรทัด Database log mode จะต้องเป็น Archive Mode
และ Automatic archival ต้องเป็น Enabled
ถ้าหากว่า Database log mode เป็น No Archive Mode ให้ทำดังนี้
--***************************************************************
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1247876 bytes
Variable Size 83887484 bytes
Database Buffers 75497472 bytes
Redo Buffers 7139328 bytes
Database mounted.
SQL> alter database archivelog;
Database altered.
SQL> alter database open;
Database altered.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 16
Next log sequence to archive 18
Current log sequence 18
SQL>
--***************************************************************
2. ข้อมูลของการแบ็คอัพ รวมทั้ง archived logs จะถูกเก็บใน Flash Recovery Area
เมื่อ archive log list จะมี Archive destination เป็น USE_DB_RECOVERY_FILE_DEST
3. คอนฟิค RMAN ดังนี้
C:\> RMAN
RMAN> CONNECT TARGET SYS;
-->> กำหนดว่าจะให้คงไฟล์แบ็คอัพไว้ได้นานแค่ไหน เช่น RETENTION POLICY=1 หมายความว่าจะเก็บไฟล์แบคอัพไว้เพียงชุดเดียว ถ้ามีไฟล์แบ็คอัพใหม่ออกมาตัวเก่าก็จะถูกกำหนดให้ obsolete รอเวลาการลบออกเป็นต้น
RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 1;
-->> ถ้าใน Flash Recovery Area มีไฟล์แบ็คอัพที่มีข้อมูลแบ็คอัพชุดเดียวกัน (เช่นมี SCN ชุดเดียวกัน) อยู่แล้ว ก็จะไม่แบ็คอัพซ้ำ
RMAN> CONFIGURE BACKUP OPTIMIZATION ON;
-->> กำหนดให้แบ็คอัพ controlfile และ spfile ทุกครั้งที่แบ็คอัพ กรณีไม่ได้ใช้ catalog ควรใช้ฟีเจอร์นี้
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
--***************************************************************************
-->> อันนี้ ถ้ามีเทปก็คอนฟิค
CONFIGURE DEVICE TYPE sbt PARMS='...' PARALLELISM 1; # PARMS are vendor-specific
--***************************************************************************
-->> ตรวจดูคอนฟิคอีกครั้งโดยใช้คำสั่ง
RMAN> SHOW ALL;
RMAN> EXIT;
4. กำหนดขนาดของ Flash Recover Area (FRA) โดยให้มีขนาดอย่างน้อยที่สุดเท่ากับ
ขนาดของ datafile (.DBF) ทั้งหมดรวมกัน ยกเว้น datafile ที่เป็นของ temporary tablespace
+ ขนาดของไฟล์ incremental backup จำนวน 1 ไฟล์
+ ขนาดของไฟล์ archived logs (ถ้าเราเก็บ archived logs ใน FRA) ตามจำนวนวันที่ต้องการให้ย้อนหลังไปได้ หรือจำนวนของวันที่ห่างกันของการแบ็คอัพแต่ละครั้ง บวกด้วย 1
เช่นถ้าแบ็คอัพทุก ๆ 3 วัน ก็ต้องเตรียมพื้นที่ให้พอเก็บ archivelog เป็นจำนวน 4 วัน
การกำหนดขนาดของ flash recovery area ทำได้ดังนี้
สมมติว่าเราต้องการกำหนดขนาดเป็น 10G
ล็อคอินเข้า SQL*PLus ด้วย sys as sysdba
SQL> select name,space_limit,space_used from v$recovery_file_dest;
NAME SPACE_LIMIT SPACE_USED
-------------------------------------------------- ----------- ----------
D:\oracle\product\10.2.0/flash_recovery_area 1073741824 1017326080
SQL> alter system set db_recovery_file_dest_size = 10G;
System altered.
ขนาดที่กำหนดขึ้นนี้เป็นการบอก Oracle ว่าขนาดของ FRA มีได้สูงสุด 10G ถ้าข้อมูลทั้งหมดใน FRA เกินขนาดที่ระบุนี้ระบบจะ Hang
5. เขียนสคริปต์ที่จะใช้รันทุกวัน
RMAN> RECOVER COPY OF DATABASE WITH TAG "whole_db_copy";
RMAN> BACKUP INCREMENTAL LEVEL 1
FOR RECOVER OF COPY WITH TAG "whole_db_copy" DATABASE;
--***************************************************************************
-->> กรณีมีเทปจะแบ็คอัพเอา flash recovery area ขึ้นเทป
RMAN> BACKUP RECOVERY AREA;
-->> ลบไฟล์ที่ obsolete ออกจากเทป
RMAN> DELETE OBSOLETE DEVICE TYPE sbt;
--***************************************************************************
สมมติว่าไม่มีไฟล์แบ็คอัพชื่อ "whole_db_copy" อยู่ก่อนหน้านี้ ผลของการรันสคริปต์ข้างบนทุกวันจะเป็นดังนี้
> ในวันแรก, คำสั่ง 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 เปลี่ยนไปอย่างไรในแต่ละวันเมื่อใช้แผนการแบ็คอัพแบบนี้
วันที่ Sun Feb1
ผลของการรันสคริปต์ :
1) พยายามอัพเดทแบ็คอัพ level 0 ด้วยไฟล์แบ็คอัพ incremental แต่ไม่เป็นผล เพราะไม่มีแบ็คอัพ level 0
2) แบ็คอัพ level 0
ความเปลี่ยนแปลงของเนื้อหาของ flash recovery area เมื่อรันสคริปต์ :
1) เริ่มมีไฟล์แบ็คอัพ level 0 ที่มี SCN ตรงกับวันอาทิตย์ที่ 1
--***************************************************************************
ความเปลี่ยนแปลงของเนื้อหาในเทป (ถ้ามีการรันคำสั่งแบ็คอัพลงเทป)
1) ไฟล์แบ็คอัพ level 0
2) ไฟล์อื่นๆ ใน flash recovery area เช่น archived redo logs จะถูกก๊อปปี้ลงเทป ไฟล์เหล่านี้อาจจะถูกลบออกจาก flash recovery area (โดยอัตโนมัติ) เมื่อมีความต้องการพื้นที่
--***************************************************************************
วันที่ Mon Feb2
ผลของการรันสคริปต์ :
1) พยายามอัพเดทไฟล์ level 0 ด้วยไฟล์แบ็คอัพ incremental level 1 ซึ่งก็ยังคงไม่เป็นผล เพราะยังไม่มีไฟล์แบ็คอัพ incremental level 1
2) เริ่มแบ็คอัพ Incremental Level 1
ความเปลี่ยนแปลงของเนื้อหาของ flash recovery area เมื่อรันสคริปต์ :
1) ยังคงมีไฟล์เดิมคือ ไฟล์แบ็คอัพ level 0 ที่ยังคงมี SCN ของวันอาทิตย์ที่ 1เหมือนเก่า
2) มีไฟล์แบ็คอัพ incremental level 1 ซึ่งเก็บความเปลี่ยนแปลงเริ่มจากวันที่ 1 Feb จนถึงวันจันทร์ที่ 2 Feb
3) มีไฟล์ archive logs ซึ่งเริ่มตั้งแต่เมื่อวันที่ 1 จนถึง ณ ขณะปัจจุบัน
ความเปลี่ยนแปลงของเนื้อหาในเทป
--***************************************************************************
ความเปลี่ยนแปลงของเนื้อหาในเทป (ถ้ามีการรันคำสั่งแบ็คอัพลงเทป)
1) ไฟล์แบ็คอัพ level 0 และ ไฟล์แบ็คอัพ incremental level 1
2) ไฟล์อื่นๆ ใน flash recovery area เช่น archived redo logs จะถูกก๊อปปี้ลงเทป ไฟล์เหล่านี้อาจจะถูกลบออกจาก flash recovery area (โดยอัตโนมัติ) เมื่อมีความต้องการพื้นที่
3) ไฟล์ที่ obsolete จะถูกลบออกจากเทป
--***************************************************************************
วันที่ Mon Feb3
ผลของการรันสคริปต์ :
1) อัพเดทไฟล์ level 0 ด้วยไฟล์แบ็คอัพ incremental level 1 สำเร็จ แบ็คอัพ level 0 ขณะนี้มีความทันสมัยเทียบเท่ากับวันวาน (เนื่องจากเอา incremental แบ็คอัพของวันวานมาอัพเดทนั่นเอง)
2) เริ่มแบ็คอัพ Incremental Level 1
ความเปลี่ยนแปลงของเนื้อหาของ flash recovery area เมื่อรันสคริปต์ :
1) ยังคงมีไฟล์เดิมคือ ไฟล์แบ็คอัพ level 0 แต่ SCN (รวมทั้งข้อมูล) ได้อัพเดทไปจนถึงวันที่ SCN ของไฟล์ level 1 อันสุดท้าย (วันที่ 2 Feb)
2) มีไฟล์แบ็คอัพ incremental level 1 ซึ่งเก็บความเปลี่ยนแปลงที่เกิดขึ้นกับระบบฐานข้อมูล 24 ชั่วโมงก่อนหน้าไว้
3) มีไฟล์ archived logs ซึ่งเริ่มตั้งแต่เมื่อวันที่ 1 จนถึง ณ ขณะปัจจุบัน
--***************************************************************************
ความเปลี่ยนแปลงของเนื้อหาในเทป (ถ้ามีการรันคำสั่งแบ็คอัพลงเทป)
1) ไฟล์แบ็คอัพ level 0 และ ไฟล์แบ็คอัพ incremental level 1
2) ไฟล์อื่นๆ ใน flash recovery area เช่น archived redo logs จะถูกก๊อปปี้ลงเทป ไฟล์เหล่านี้อาจจะถูกลบออกจาก flash recovery area (โดยอัตโนมัติ) เมื่อมีความต้องการพื้นที่
3) ไฟล์ที่ obsolete จะถูกลบออกจากเทป
--***************************************************************************
หมายเหตุ
ไฟล์ incremental backup และ archived logs ที่หมดประโยชน์ คือไม่สามารถนำมาใช้ rolled-forward แบ็คอัพ level 0 จะถูกลบทิ้งโดยอัตโนมัติเมื่อระบบการแบ็คอัพต้องการใช้พื้นที่ใน flash recovery area
ถ้าลองเปลี่ยนตัวอย่างข้างบนเล็กน้อย โดยหากต้องการให้ flash recovery area เก็บข้อมูลที่เป็น archived logs และ incremental backups ไว้เป็นจำนวน n วัน เพื่อที่จะสามารถจะ recover ย้อนกลับไปในเวลาใด เวลาหนึ่งในช่วง n วันนี้ได้ จะต้องทำดังนี้คือ
กำหนดขนาดของ Flash Recover Area โดยให้มีขนาดอย่างน้อยที่สุดเท่ากับ
ขนาดของ datafile (.DBF) ทั้งหมดรวมกัน ยกเว้น datafile ที่เป็นของ temporary tablespace
+ ขนาดของไฟล์ incremental backup จำนวน n ไฟล์
+ ขนาดของไฟล์ archived logs ตามจำนวนวันที่ต้องการให้ย้อนหลังไปได้ หรือจำนวนของวันที่ห่างกันของการแบ็คอัพแต่ละครั้ง บวกด้วย 1
เช่นถ้าแบ็คอัพทุก ๆ 3 วัน ก็ต้องเตรียมพื้นที่ให้พอเก็บ archivelog เป็นจำนวน 4 วัน
การกำหนดขนาดของ flash recovery area ทำได้ดังนี้
ล็อคอินเข้า SQL*PLus ด้วย sys as sysdba
SQL> select name,space_limit,space_used from v$recovery_file_dest;
NAME SPACE_LIMIT SPACE_USED
-------------------------------------------------- ----------- ----------
D:\oracle\product\10.2.0/flash_recovery_area 1073741824 1017326080
SQL> alter system set db_recovery_file_dest_size = 4G;
System altered.
โดยใช้สคริปต์ข้างล่างนี้ในการ backup
RECOVER COPY OF DATABASE TAG "whole_db_copy" UNTIL TIME 'SYSDATE-3';
# Make an incremental backup of the database to the flash recovery area.
BACKUP INCREMENTAL LEVEL 1
FOR RECOVER OF COPY WITH TAG "whole_db_copy"
DATABASE;
ส่วนที่เพิ่มขึ้นมาคือ UNTIL TIME 'SYSDATE-3' ซึ่งเป็นตัวที่บอกว่า การ recover copy ให้ทำมาจนถึง 3 วันก่อนหน้าวันปัจจุบัน (ซึ่งเมื่อรวมกับ archived logs ของวันที่ SYSDATE-3 จนถึงวันปัจจุบัน จะสามารถ recover ไปที่จุดใด ๆในช่วง 3 วันดังกล่าวได้)
วันที่ Sun Feb1
ผลของการรันสคริปต์ :
1) พยายามอัพเดทแบ็คอัพ level 0 ด้วยไฟล์แบ็คอัพ incremental แต่ไม่เป็นผล เพราะไม่มีแบ็คอัพ level 0
2) สร้างแบ็คอัพ level 0
ความเปลี่ยนแปลงของเนื้อหาของ flash recovery area เมื่อรันสคริปต์ :
1) เริ่มมีไฟล์แบ็คอัพ level 0 ที่มี SCN ตรงกับวันอาทิตย์ที่ 1 Feb
วันที่ Mon Feb2
ผลของการรันสคริปต์ :
1) พยายามอัพเดทไฟล์ level 0 ด้วยไฟล์แบ็คอัพ incremental level 1 ซึ่งก็ยังคงไม่เป็นผล เพราะยังไม่มีไฟล์แบ็คอัพ incremental level 1
2) เริ่มแบ็คอัพ Incremental Level 1 ของการเปลี่ยนแปลงในวันที่ 2 Feb
ความเปลี่ยนแปลงของเนื้อหาของ flash recovery area เมื่อรันสคริปต์ :
1) ยังคงมีไฟล์เดิมคือ ไฟล์แบ็คอัพ level 0 ที่ยังคงมี SCN ของวันอาทิตย์ที่ 1 เหมือนเก่า
2) มีไฟล์แบ็คอัพ incremental level 1 ซึ่งเก็บความเปลี่ยนแปลงเริ่มจากวันที่ 1 Feb จนถึงวันจันทร์ที่ 2 Feb
3) มีไฟล์ archive logs ซึ่งเริ่มตั้งแต่เมื่อวันที่ 1 จนถึง ณ ขณะปัจจุบัน
วันที่ Tue Feb3
ผลของการรันสคริปต์ :
1) พยายามอัพเดทไฟล์ level 0 ด้วยไฟล์แบ็คอัพ incremental level 1 แต่ก็ยังไม่สำเร็จ เพราะว่ายังไม่มีไฟล์แบ็คอัพที่เก่าพอที่จะ roll forward ไปที่วันที่ SYSDATE-3
2) เริ่มแบ็คอัพ Incremental Level 1 ของการเปลี่ยนแปลงในวันที่ 3 Feb
ความเปลี่ยนแปลงของเนื้อหาของ flash recovery area เมื่อรันสคริปต์ :
1) ยังคงมีไฟล์เดิมคือ ไฟล์แบ็คอัพ level 0 ที่ยังคงมี SCN ของวันอาทิตย์ที่ 1 เหมือนเก่า
2) มีไฟล์แบ็คอัพ incremental level 1 ซึ่งเก็บความเปลี่ยนแปลงที่เกิดขึ้นกับระบบฐานข้อมูลในวันที่ 2 Feb (1 ไฟล์) และวันที่ 3 Feb (อีก 1 ไฟล์)
3) มีไฟล์ archived logs ซึ่งเริ่มตั้งแต่เมื่อวันที่ 1 จนถึง ณ ขณะปัจจุบัน
วันที่ Wed Feb4
ผลของการรันสคริปต์ :
1) พยายามอัพเดทไฟล์ level 0 ด้วยไฟล์แบ็คอัพ incremental level 1 แต่ก็ยังไม่สำเร็จ เพราะว่ายังไม่มีไฟล์แบ็คอัพที่เก่าพอที่จะ roll forward ไปที่วันที่ SYSDATE-3
2) เริ่มแบ็คอัพ Incremental Level 1 ของการเปลี่ยนแปลงในวันที่ 4 Feb
ความเปลี่ยนแปลงของเนื้อหาของ flash recovery area เมื่อรันสคริปต์ :
1) ยังคงมีไฟล์เดิมคือ ไฟล์แบ็คอัพ level 0 ที่ยังคงมี SCN ของวันอาทิตย์ที่ 1 เหมือนเก่า
2) มีไฟล์แบ็คอัพ incremental level 1 ซึ่งเก็บความเปลี่ยนแปลงที่เกิดขึ้นกับระบบฐานข้อมูลในวันที่ 2 Feb (1 ไฟล์), วันที่ 3 Feb (อีก 1 ไฟล์) และวันที่ 4 Feb (วันปัจจุบัน)
3) มีไฟล์ archived logs ซึ่งเริ่มตั้งแต่เมื่อวันที่ 1 จนถึง ณ ขณะปัจจุบัน
วันที่ Thu Feb5
ผลของการรันสคริปต์ :
1) พยายามอัพเดทไฟล์ level 0 ด้วยไฟล์แบ็คอัพ incremental level 1 สำเร็จ ด้วยไฟล์แบ็คอัพ incremental ไฟล์แรกคือของวันที่ 2 Feb
2) เริ่มแบ็คอัพ Incremental Level 1 ของการเปลี่ยนแปลงในวันที่ 5 Feb
ความเปลี่ยนแปลงของเนื้อหาของ flash recovery area เมื่อรันสคริปต์ :
1) ยังคงมีไฟล์เดิมคือ ไฟล์แบ็คอัพ level 0 แต่ SCN (รวมทั้งข้อมูล) ได้อัพเดทไปจนถึงวันที่ SCN ของไฟล์ level 1 ของวันที่ SYSDATE - 3 (คือวันที่ 2)
2) มีไฟล์แบ็คอัพ incremental level 1 ซึ่งเก็บความเปลี่ยนแปลงที่เกิดขึ้นกับระบบฐานข้อมูลตั้งแต่วันที่ 2 Feb จนถึงวันปัจจุบัน
3) มีไฟล์ archived logs ซึ่งเริ่มตั้งแต่เมื่อวันที่ 2 (archived logs ของวันที่ 1 obsolete ไปแล้ว เนื่องจากแบ็คอัพ level 0 ถูก update เป็นวันที่ 2 แล้ว) จนถึง ณ ขณะปัจจุบัน
หลังวันที่ 5
ผลของการรันสคริปต์ :
1) พยายามอัพเดทไฟล์ level 0 ด้วยไฟล์แบ็คอัพ incremental level 1 สำเร็จ ด้วยไฟล์แบ็คอัพ incremental ของวันที่ SYSDATE - 3
2) เริ่มแบ็คอัพ Incremental Level 1 ของการเปลี่ยนแปลงในวันนั้น ๆ
ความเปลี่ยนแปลงของเนื้อหาของ flash recovery area เมื่อรันสคริปต์ :
1) ยังคงมีไฟล์เดิมคือ ไฟล์แบ็คอัพ level 0 แต่ SCN (รวมทั้งข้อมูล) ได้อัพเดทไปจนถึงวันที่ SCN ของไฟล์ level 1 ของวันที่ SYSDATE - 3
2) มีไฟล์แบ็คอัพ incremental level 1 ซึ่งเก็บความเปลี่ยนแปลงที่เกิดขึ้นกับระบบฐานข้อมูลของสามวันย้อนหลัง
3) มีไฟล์ archived logs ซึ่งเริ่มตั้งแต่เมื่อวันที่ SYSDATE - 3 จนถึง ณ ขณะปัจจุบัน
การแบ็คอัพบนเครื่องที่ใช้งานจริง (Production Server)
1. ดาต้าเบสใช้ archivelog mode
การ ดูว่าดาต้าเบสอยู่ใน mode archivelog หรือเปล่า
ล็อคอินเข้า SQL*Plus ด้วย sys as sysdba
--***************************************************************
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 16
Next log sequence to archive 18
Current log sequence 18
SQL>
--***************************************************************
ตรงบรรทัด Database log mode จะต้องเป็น Archive Mode
และ Automatic archival ต้องเป็น Enabled
ถ้าหากว่า Database log mode เป็น No Archive Mode ให้ทำดังนี้
--***************************************************************
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1247876 bytes
Variable Size 83887484 bytes
Database Buffers 75497472 bytes
Redo Buffers 7139328 bytes
Database mounted.
SQL> alter database archivelog;
Database altered.
SQL> alter database open;
Database altered.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 16
Next log sequence to archive 18
Current log sequence 18
SQL>
--***************************************************************
2. ข้อมูลของการแบ็คอัพ รวมทั้ง archived logs จะถูกเก็บใน Flash Recovery Area
เมื่อ archive log list จะมี Archive destination เป็น USE_DB_RECOVERY_FILE_DEST
3. คอนฟิค RMAN ดังนี้
C:\> RMAN
RMAN> CONNECT TARGET SYS;
-->> กำหนดว่าจะให้คงไฟล์แบ็คอัพไว้ได้นานแค่ไหน เช่น RETENTION POLICY=1 หมายความว่าจะเก็บไฟล์แบคอัพไว้เพียงชุดเดียว ถ้ามีไฟล์แบ็คอัพใหม่ออกมาตัวเก่าก็จะถูกกำหนดให้ obsolete รอเวลาการลบออกเป็นต้น
RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 1;
-->> ถ้าใน Flash Recovery Area มีไฟล์แบ็คอัพที่มีข้อมูลแบ็คอัพชุดเดียวกัน (เช่นมี SCN ชุดเดียวกัน) อยู่แล้ว ก็จะไม่แบ็คอัพซ้ำ
RMAN> CONFIGURE BACKUP OPTIMIZATION ON;
-->> กำหนดให้แบ็คอัพ controlfile และ spfile ทุกครั้งที่แบ็คอัพ กรณีไม่ได้ใช้ catalog ควรใช้ฟีเจอร์นี้
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
--***************************************************************************
-->> อันนี้ ถ้ามีเทปก็คอนฟิค
CONFIGURE DEVICE TYPE sbt PARMS='...' PARALLELISM 1; # PARMS are vendor-specific
--***************************************************************************
-->> ตรวจดูคอนฟิคอีกครั้งโดยใช้คำสั่ง
RMAN> SHOW ALL;
RMAN> EXIT;
4. กำหนดขนาดของ Flash Recover Area (FRA) โดยให้มีขนาดอย่างน้อยที่สุดเท่ากับ
ขนาดของ datafile (.DBF) ทั้งหมดรวมกัน ยกเว้น datafile ที่เป็นของ temporary tablespace
+ ขนาดของไฟล์ incremental backup จำนวน 1 ไฟล์
+ ขนาดของไฟล์ archived logs (ถ้าเราเก็บ archived logs ใน FRA) ตามจำนวนวันที่ต้องการให้ย้อนหลังไปได้ หรือจำนวนของวันที่ห่างกันของการแบ็คอัพแต่ละครั้ง บวกด้วย 1
เช่นถ้าแบ็คอัพทุก ๆ 3 วัน ก็ต้องเตรียมพื้นที่ให้พอเก็บ archivelog เป็นจำนวน 4 วัน
การกำหนดขนาดของ flash recovery area ทำได้ดังนี้
สมมติว่าเราต้องการกำหนดขนาดเป็น 10G
ล็อคอินเข้า SQL*PLus ด้วย sys as sysdba
SQL> select name,space_limit,space_used from v$recovery_file_dest;
NAME SPACE_LIMIT SPACE_USED
-------------------------------------------------- ----------- ----------
D:\oracle\product\10.2.0/flash_recovery_area 1073741824 1017326080
SQL> alter system set db_recovery_file_dest_size = 10G;
System altered.
ขนาดที่กำหนดขึ้นนี้เป็นการบอก Oracle ว่าขนาดของ FRA มีได้สูงสุด 10G ถ้าข้อมูลทั้งหมดใน FRA เกินขนาดที่ระบุนี้ระบบจะ Hang
5. เขียนสคริปต์ที่จะใช้รันทุกวัน
RMAN> RECOVER COPY OF DATABASE WITH TAG "whole_db_copy";
RMAN> BACKUP INCREMENTAL LEVEL 1
FOR RECOVER OF COPY WITH TAG "whole_db_copy" DATABASE;
--***************************************************************************
-->> กรณีมีเทปจะแบ็คอัพเอา flash recovery area ขึ้นเทป
RMAN> BACKUP RECOVERY AREA;
-->> ลบไฟล์ที่ obsolete ออกจากเทป
RMAN> DELETE OBSOLETE DEVICE TYPE sbt;
--***************************************************************************
สมมติว่าไม่มีไฟล์แบ็คอัพชื่อ "whole_db_copy" อยู่ก่อนหน้านี้ ผลของการรันสคริปต์ข้างบนทุกวันจะเป็นดังนี้
> ในวันแรก, คำสั่ง 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 เปลี่ยนไปอย่างไรในแต่ละวันเมื่อใช้แผนการแบ็คอัพแบบนี้
วันที่ Sun Feb1
ผลของการรันสคริปต์ :
1) พยายามอัพเดทแบ็คอัพ level 0 ด้วยไฟล์แบ็คอัพ incremental แต่ไม่เป็นผล เพราะไม่มีแบ็คอัพ level 0
2) แบ็คอัพ level 0
ความเปลี่ยนแปลงของเนื้อหาของ flash recovery area เมื่อรันสคริปต์ :
1) เริ่มมีไฟล์แบ็คอัพ level 0 ที่มี SCN ตรงกับวันอาทิตย์ที่ 1
--***************************************************************************
ความเปลี่ยนแปลงของเนื้อหาในเทป (ถ้ามีการรันคำสั่งแบ็คอัพลงเทป)
1) ไฟล์แบ็คอัพ level 0
2) ไฟล์อื่นๆ ใน flash recovery area เช่น archived redo logs จะถูกก๊อปปี้ลงเทป ไฟล์เหล่านี้อาจจะถูกลบออกจาก flash recovery area (โดยอัตโนมัติ) เมื่อมีความต้องการพื้นที่
--***************************************************************************
วันที่ Mon Feb2
ผลของการรันสคริปต์ :
1) พยายามอัพเดทไฟล์ level 0 ด้วยไฟล์แบ็คอัพ incremental level 1 ซึ่งก็ยังคงไม่เป็นผล เพราะยังไม่มีไฟล์แบ็คอัพ incremental level 1
2) เริ่มแบ็คอัพ Incremental Level 1
ความเปลี่ยนแปลงของเนื้อหาของ flash recovery area เมื่อรันสคริปต์ :
1) ยังคงมีไฟล์เดิมคือ ไฟล์แบ็คอัพ level 0 ที่ยังคงมี SCN ของวันอาทิตย์ที่ 1เหมือนเก่า
2) มีไฟล์แบ็คอัพ incremental level 1 ซึ่งเก็บความเปลี่ยนแปลงเริ่มจากวันที่ 1 Feb จนถึงวันจันทร์ที่ 2 Feb
3) มีไฟล์ archive logs ซึ่งเริ่มตั้งแต่เมื่อวันที่ 1 จนถึง ณ ขณะปัจจุบัน
ความเปลี่ยนแปลงของเนื้อหาในเทป
--***************************************************************************
ความเปลี่ยนแปลงของเนื้อหาในเทป (ถ้ามีการรันคำสั่งแบ็คอัพลงเทป)
1) ไฟล์แบ็คอัพ level 0 และ ไฟล์แบ็คอัพ incremental level 1
2) ไฟล์อื่นๆ ใน flash recovery area เช่น archived redo logs จะถูกก๊อปปี้ลงเทป ไฟล์เหล่านี้อาจจะถูกลบออกจาก flash recovery area (โดยอัตโนมัติ) เมื่อมีความต้องการพื้นที่
3) ไฟล์ที่ obsolete จะถูกลบออกจากเทป
--***************************************************************************
วันที่ Mon Feb3
ผลของการรันสคริปต์ :
1) อัพเดทไฟล์ level 0 ด้วยไฟล์แบ็คอัพ incremental level 1 สำเร็จ แบ็คอัพ level 0 ขณะนี้มีความทันสมัยเทียบเท่ากับวันวาน (เนื่องจากเอา incremental แบ็คอัพของวันวานมาอัพเดทนั่นเอง)
2) เริ่มแบ็คอัพ Incremental Level 1
ความเปลี่ยนแปลงของเนื้อหาของ flash recovery area เมื่อรันสคริปต์ :
1) ยังคงมีไฟล์เดิมคือ ไฟล์แบ็คอัพ level 0 แต่ SCN (รวมทั้งข้อมูล) ได้อัพเดทไปจนถึงวันที่ SCN ของไฟล์ level 1 อันสุดท้าย (วันที่ 2 Feb)
2) มีไฟล์แบ็คอัพ incremental level 1 ซึ่งเก็บความเปลี่ยนแปลงที่เกิดขึ้นกับระบบฐานข้อมูล 24 ชั่วโมงก่อนหน้าไว้
3) มีไฟล์ archived logs ซึ่งเริ่มตั้งแต่เมื่อวันที่ 1 จนถึง ณ ขณะปัจจุบัน
--***************************************************************************
ความเปลี่ยนแปลงของเนื้อหาในเทป (ถ้ามีการรันคำสั่งแบ็คอัพลงเทป)
1) ไฟล์แบ็คอัพ level 0 และ ไฟล์แบ็คอัพ incremental level 1
2) ไฟล์อื่นๆ ใน flash recovery area เช่น archived redo logs จะถูกก๊อปปี้ลงเทป ไฟล์เหล่านี้อาจจะถูกลบออกจาก flash recovery area (โดยอัตโนมัติ) เมื่อมีความต้องการพื้นที่
3) ไฟล์ที่ obsolete จะถูกลบออกจากเทป
--***************************************************************************
หมายเหตุ
ไฟล์ incremental backup และ archived logs ที่หมดประโยชน์ คือไม่สามารถนำมาใช้ rolled-forward แบ็คอัพ level 0 จะถูกลบทิ้งโดยอัตโนมัติเมื่อระบบการแบ็คอัพต้องการใช้พื้นที่ใน flash recovery area
ถ้าลองเปลี่ยนตัวอย่างข้างบนเล็กน้อย โดยหากต้องการให้ flash recovery area เก็บข้อมูลที่เป็น archived logs และ incremental backups ไว้เป็นจำนวน n วัน เพื่อที่จะสามารถจะ recover ย้อนกลับไปในเวลาใด เวลาหนึ่งในช่วง n วันนี้ได้ จะต้องทำดังนี้คือ
กำหนดขนาดของ Flash Recover Area โดยให้มีขนาดอย่างน้อยที่สุดเท่ากับ
ขนาดของ datafile (.DBF) ทั้งหมดรวมกัน ยกเว้น datafile ที่เป็นของ temporary tablespace
+ ขนาดของไฟล์ incremental backup จำนวน n ไฟล์
+ ขนาดของไฟล์ archived logs ตามจำนวนวันที่ต้องการให้ย้อนหลังไปได้ หรือจำนวนของวันที่ห่างกันของการแบ็คอัพแต่ละครั้ง บวกด้วย 1
เช่นถ้าแบ็คอัพทุก ๆ 3 วัน ก็ต้องเตรียมพื้นที่ให้พอเก็บ archivelog เป็นจำนวน 4 วัน
การกำหนดขนาดของ flash recovery area ทำได้ดังนี้
ล็อคอินเข้า SQL*PLus ด้วย sys as sysdba
SQL> select name,space_limit,space_used from v$recovery_file_dest;
NAME SPACE_LIMIT SPACE_USED
-------------------------------------------------- ----------- ----------
D:\oracle\product\10.2.0/flash_recovery_area 1073741824 1017326080
SQL> alter system set db_recovery_file_dest_size = 4G;
System altered.
โดยใช้สคริปต์ข้างล่างนี้ในการ backup
RECOVER COPY OF DATABASE TAG "whole_db_copy" UNTIL TIME 'SYSDATE-3';
# Make an incremental backup of the database to the flash recovery area.
BACKUP INCREMENTAL LEVEL 1
FOR RECOVER OF COPY WITH TAG "whole_db_copy"
DATABASE;
ส่วนที่เพิ่มขึ้นมาคือ UNTIL TIME 'SYSDATE-3' ซึ่งเป็นตัวที่บอกว่า การ recover copy ให้ทำมาจนถึง 3 วันก่อนหน้าวันปัจจุบัน (ซึ่งเมื่อรวมกับ archived logs ของวันที่ SYSDATE-3 จนถึงวันปัจจุบัน จะสามารถ recover ไปที่จุดใด ๆในช่วง 3 วันดังกล่าวได้)
วันที่ Sun Feb1
ผลของการรันสคริปต์ :
1) พยายามอัพเดทแบ็คอัพ level 0 ด้วยไฟล์แบ็คอัพ incremental แต่ไม่เป็นผล เพราะไม่มีแบ็คอัพ level 0
2) สร้างแบ็คอัพ level 0
ความเปลี่ยนแปลงของเนื้อหาของ flash recovery area เมื่อรันสคริปต์ :
1) เริ่มมีไฟล์แบ็คอัพ level 0 ที่มี SCN ตรงกับวันอาทิตย์ที่ 1 Feb
วันที่ Mon Feb2
ผลของการรันสคริปต์ :
1) พยายามอัพเดทไฟล์ level 0 ด้วยไฟล์แบ็คอัพ incremental level 1 ซึ่งก็ยังคงไม่เป็นผล เพราะยังไม่มีไฟล์แบ็คอัพ incremental level 1
2) เริ่มแบ็คอัพ Incremental Level 1 ของการเปลี่ยนแปลงในวันที่ 2 Feb
ความเปลี่ยนแปลงของเนื้อหาของ flash recovery area เมื่อรันสคริปต์ :
1) ยังคงมีไฟล์เดิมคือ ไฟล์แบ็คอัพ level 0 ที่ยังคงมี SCN ของวันอาทิตย์ที่ 1 เหมือนเก่า
2) มีไฟล์แบ็คอัพ incremental level 1 ซึ่งเก็บความเปลี่ยนแปลงเริ่มจากวันที่ 1 Feb จนถึงวันจันทร์ที่ 2 Feb
3) มีไฟล์ archive logs ซึ่งเริ่มตั้งแต่เมื่อวันที่ 1 จนถึง ณ ขณะปัจจุบัน
วันที่ Tue Feb3
ผลของการรันสคริปต์ :
1) พยายามอัพเดทไฟล์ level 0 ด้วยไฟล์แบ็คอัพ incremental level 1 แต่ก็ยังไม่สำเร็จ เพราะว่ายังไม่มีไฟล์แบ็คอัพที่เก่าพอที่จะ roll forward ไปที่วันที่ SYSDATE-3
2) เริ่มแบ็คอัพ Incremental Level 1 ของการเปลี่ยนแปลงในวันที่ 3 Feb
ความเปลี่ยนแปลงของเนื้อหาของ flash recovery area เมื่อรันสคริปต์ :
1) ยังคงมีไฟล์เดิมคือ ไฟล์แบ็คอัพ level 0 ที่ยังคงมี SCN ของวันอาทิตย์ที่ 1 เหมือนเก่า
2) มีไฟล์แบ็คอัพ incremental level 1 ซึ่งเก็บความเปลี่ยนแปลงที่เกิดขึ้นกับระบบฐานข้อมูลในวันที่ 2 Feb (1 ไฟล์) และวันที่ 3 Feb (อีก 1 ไฟล์)
3) มีไฟล์ archived logs ซึ่งเริ่มตั้งแต่เมื่อวันที่ 1 จนถึง ณ ขณะปัจจุบัน
วันที่ Wed Feb4
ผลของการรันสคริปต์ :
1) พยายามอัพเดทไฟล์ level 0 ด้วยไฟล์แบ็คอัพ incremental level 1 แต่ก็ยังไม่สำเร็จ เพราะว่ายังไม่มีไฟล์แบ็คอัพที่เก่าพอที่จะ roll forward ไปที่วันที่ SYSDATE-3
2) เริ่มแบ็คอัพ Incremental Level 1 ของการเปลี่ยนแปลงในวันที่ 4 Feb
ความเปลี่ยนแปลงของเนื้อหาของ flash recovery area เมื่อรันสคริปต์ :
1) ยังคงมีไฟล์เดิมคือ ไฟล์แบ็คอัพ level 0 ที่ยังคงมี SCN ของวันอาทิตย์ที่ 1 เหมือนเก่า
2) มีไฟล์แบ็คอัพ incremental level 1 ซึ่งเก็บความเปลี่ยนแปลงที่เกิดขึ้นกับระบบฐานข้อมูลในวันที่ 2 Feb (1 ไฟล์), วันที่ 3 Feb (อีก 1 ไฟล์) และวันที่ 4 Feb (วันปัจจุบัน)
3) มีไฟล์ archived logs ซึ่งเริ่มตั้งแต่เมื่อวันที่ 1 จนถึง ณ ขณะปัจจุบัน
วันที่ Thu Feb5
ผลของการรันสคริปต์ :
1) พยายามอัพเดทไฟล์ level 0 ด้วยไฟล์แบ็คอัพ incremental level 1 สำเร็จ ด้วยไฟล์แบ็คอัพ incremental ไฟล์แรกคือของวันที่ 2 Feb
2) เริ่มแบ็คอัพ Incremental Level 1 ของการเปลี่ยนแปลงในวันที่ 5 Feb
ความเปลี่ยนแปลงของเนื้อหาของ flash recovery area เมื่อรันสคริปต์ :
1) ยังคงมีไฟล์เดิมคือ ไฟล์แบ็คอัพ level 0 แต่ SCN (รวมทั้งข้อมูล) ได้อัพเดทไปจนถึงวันที่ SCN ของไฟล์ level 1 ของวันที่ SYSDATE - 3 (คือวันที่ 2)
2) มีไฟล์แบ็คอัพ incremental level 1 ซึ่งเก็บความเปลี่ยนแปลงที่เกิดขึ้นกับระบบฐานข้อมูลตั้งแต่วันที่ 2 Feb จนถึงวันปัจจุบัน
3) มีไฟล์ archived logs ซึ่งเริ่มตั้งแต่เมื่อวันที่ 2 (archived logs ของวันที่ 1 obsolete ไปแล้ว เนื่องจากแบ็คอัพ level 0 ถูก update เป็นวันที่ 2 แล้ว) จนถึง ณ ขณะปัจจุบัน
หลังวันที่ 5
ผลของการรันสคริปต์ :
1) พยายามอัพเดทไฟล์ level 0 ด้วยไฟล์แบ็คอัพ incremental level 1 สำเร็จ ด้วยไฟล์แบ็คอัพ incremental ของวันที่ SYSDATE - 3
2) เริ่มแบ็คอัพ Incremental Level 1 ของการเปลี่ยนแปลงในวันนั้น ๆ
ความเปลี่ยนแปลงของเนื้อหาของ flash recovery area เมื่อรันสคริปต์ :
1) ยังคงมีไฟล์เดิมคือ ไฟล์แบ็คอัพ level 0 แต่ SCN (รวมทั้งข้อมูล) ได้อัพเดทไปจนถึงวันที่ SCN ของไฟล์ level 1 ของวันที่ SYSDATE - 3
2) มีไฟล์แบ็คอัพ incremental level 1 ซึ่งเก็บความเปลี่ยนแปลงที่เกิดขึ้นกับระบบฐานข้อมูลของสามวันย้อนหลัง
3) มีไฟล์ archived logs ซึ่งเริ่มตั้งแต่เมื่อวันที่ SYSDATE - 3 จนถึง ณ ขณะปัจจุบัน
ป้ายกำกับ:
archived log,
backup,
copy,
incremental,
level0,
level1
Subscribe to:
Posts (Atom)
