-
1. ความหมายของการฟื้นตัว
เมื่อเราใช้ฐานข้อมูล เราหวังเสมอว่าเนื้อหาของฐานข้อมูลมีความน่าเชื่อถือและถูกต้อง อย่างไรก็ตาม ความล้มเหลวของระบบคอมพิวเตอร์ (ความล้มเหลวของฮาร์ดแวร์ ความล้มเหลวของเครือข่าย ความล้มเหลวของกระบวนการ และความล้มเหลวของระบบ) ส่งผลกระทบต่อการทำงานของระบบฐานข้อมูลและความถูกต้องของ ข้อมูลในฐานข้อมูลทางเพศหรือแม้แต่ทำลายฐานข้อมูลทำให้ข้อมูลในฐานข้อมูลทั้งหมดหรือบางส่วนสูญหาย ดังนั้นเมื่อเกิดความล้มเหลวข้างต้น ก็หวังว่าจะสามารถสร้างฐานข้อมูลที่สมบูรณ์ขึ้นมาใหม่ได้ กระบวนการนี้เรียกว่าการกู้คืนฐานข้อมูล ระบบย่อยการกู้คืนเป็นส่วนสำคัญของระบบการจัดการฐานข้อมูล การประมวลผลการกู้คืนจะแตกต่างกันไปขึ้นอยู่กับโครงสร้างที่ได้รับผลกระทบจากประเภทของความล้มเหลวที่เกิดขึ้น
2. วิธีการกู้คืน
วิธีการนำเข้า:
ใช้ IMPORT เพื่อนำเข้าไฟล์ข้อมูลล่าสุดที่ส่งออกไปยังฐานข้อมูลใหม่ วิธีนี้สามารถกู้คืนออบเจ็กต์ฐานข้อมูลใด ๆ ให้เป็นสถานะเมื่อมีการส่งออก และการเปลี่ยนแปลงในภายหลังจะไม่สามารถย้อนกลับได้ คำสั่ง IMPORT สามารถดำเนินการแบบโต้ตอบได้ สำหรับความหมายเฉพาะของแต่ละพารามิเตอร์ โปรดดูคำอธิบายโดยละเอียดของพารามิเตอร์ ORACLE EXP/IMP วิธีนี้เหมาะสำหรับสภาพแวดล้อมที่ไม่ได้ใช้โหมดเก็บถาวร
วิธีการกู้คืนที่ปลอดภัย:
หากฐานข้อมูลทำงานในโหมดเก็บถาวร เมื่อฐานข้อมูลเสียหาย ฐานข้อมูลสามารถคืนค่าเป็นสถานะเบรกพอยต์ผ่านการสำรองข้อมูลแบบเย็น (การสำรองข้อมูลแบบร้อน) และการสำรองข้อมูลแบบเก็บถาวร
การกู้คืนไฟล์ควบคุมฐานข้อมูล (สมมติว่าไฟล์ควบคุมทั้งหมดถูกทำลาย):
ฐานข้อมูลจะขึ้นอยู่กับระบบไฟล์: เพียงใช้ tar, cp และคำสั่งอื่น ๆ ของระบบปฏิบัติการ
ฐานข้อมูลขึ้นอยู่กับอุปกรณ์ดิบ: dd if=$ORACLE_BASE/con.bak of=/dev/rdrd/drd1 Seek=12
การกู้คืนไฟล์ข้อมูลฐานข้อมูล
การกู้คืนข้อมูลและพื้นที่ตารางดัชนีและพื้นที่ตารางระบบ:
คัดลอกไฟล์ฐานข้อมูลที่เกี่ยวข้องและไฟล์บันทึกลอจิคัลทั้งหมดที่สร้างขึ้นตั้งแต่ไฟล์ข้อมูลถูกสำรองไว้และดำเนินการคำสั่งต่อไปนี้:
svrmgrl > เมานต์เริ่มต้น
svrmgrl > แก้ไขการกู้คืนฐานข้อมูลอัตโนมัติ
หากไฟล์ควบคุมเสียหาย ให้ทำดังนี้: svrmgrl > แก้ไขการกู้คืนฐานข้อมูลโดยใช้ตัวควบคุมการสำรองข้อมูล ป้อนชื่อไฟล์บันทึกและชื่อไฟล์ทำซ้ำตามที่ได้รับแจ้ง
svrmgrl > แก้ไขฐานข้อมูลเปิดรีเซ็ตล็อก;
การกู้คืนไฟล์ชั่วคราวของฐานข้อมูลและพื้นที่ตารางย้อนกลับ: เพียงปล่อยออฟไลน์แล้วสร้างใหม่
หมายเหตุ: หากฐานข้อมูลไม่ได้ทำงานในโหมดเก็บถาวร การกู้คืนสามารถคืนค่าเป็นสถานะของการสำรองข้อมูลครั้งล่าสุดเท่านั้น สำหรับข้อมูลเกี่ยวกับการตั้งค่าโหมดการเก็บถาวรและเทคโนโลยีที่เกี่ยวข้องกับการสำรองข้อมูล โปรดดู เทคโนโลยีการสำรองข้อมูลฐานข้อมูล ORACLE
3. โซลูชันการกู้คืนพื้นที่ตารางของ ORACLE
(1) ปรากฏการณ์ข้อผิดพลาดพื้นที่ตารางในครัวเรือน:
ORA-01157, ORA-01110 หรือข้อผิดพลาดระดับระบบปฏิบัติการเกิดขึ้นเมื่อเริ่มต้นฐานข้อมูล
ข้อผิดพลาดเช่น ORA-07360 เมื่อปิดฐานข้อมูล (โดยใช้การปิดระบบตามปกติหรือปิดระบบทันที) จะส่งผลให้เกิดข้อผิดพลาด ORA-01116, ORA-01110 และข้อผิดพลาดระดับระบบปฏิบัติการ ORA-07368
แก้ปัญหา:
มีสองวิธีแก้ไขด้านล่าง:
โซลูชันที่ 1: พื้นที่ตารางของผู้ใช้สามารถสร้างใหม่ได้อย่างง่ายดาย กล่าวคือ ออบเจ็กต์ที่ส่งออกล่าสุดจะพร้อมใช้งาน หรือออบเจ็กต์ในพื้นที่ตารางสามารถสร้างใหม่ได้อย่างง่ายดาย เป็นต้น ในกรณีนี้ วิธีที่ง่ายที่สุดคือการออฟไลน์และลบไฟล์ข้อมูล ปล่อยพื้นที่ตาราง และสร้างพื้นที่ตารางและอ็อบเจ็กต์ทั้งหมดใหม่
svrmgrl> เมาท์เริ่มต้น
svrmgrl> แก้ไขชื่อไฟล์ฐานข้อมูล datafile แบบออฟไลน์;
svrmgrl> แก้ไขฐานข้อมูลที่เปิด;
svrmgrl> วาง tablespace tablespace_name รวมถึงเนื้อหา;
สร้างพื้นที่ตารางและวัตถุทั้งหมดใหม่
โซลูชันที่ 2: พื้นที่ตารางของผู้ใช้ไม่สามารถสร้างขึ้นใหม่ได้อย่างง่ายดาย ในกรณีส่วนใหญ่ การสร้างพื้นที่ตารางใหม่เป็นไปไม่ได้และทำงานหนักเกินไป วิธีการคือการย้อนกลับการสำรองข้อมูลและดำเนินการกู้คืนสื่อ หากระบบของคุณทำงานในโหมด NOARCHIVELOG เท่านั้น ข้อมูลที่สูญหายสามารถกู้คืนได้ในบันทึกการทำซ้ำออนไลน์
ขั้นตอนมีดังนี้:
1) กู้คืนไฟล์ข้อมูลที่สูญหายจากข้อมูลสำรอง
2)svrmgrl> เมาท์เริ่มต้น
3)svrmgrl> เลือก v1.group#,สมาชิก,ลำดับ#,first_change# จาก v$log v1,v$logfile v2 โดยที่ v1.group#=v2.group#;
4) หากฐานข้อมูลทำงานในโหมด NOARCHIVELOG: svrmgrl> เลือก file#,change# จาก v$recover_file;
หาก CHANGE# มากกว่าค่าต่ำสุด FIRST_CHANGE# จะสามารถกู้คืนไฟล์ข้อมูลได้
หาก CHANGE# น้อยกว่า FIRST_CHANGE# ขั้นต่ำ จะไม่สามารถกู้คืนไฟล์ข้อมูลได้ คืนค่าการสำรองข้อมูลทั้งหมดล่าสุดหรือใช้ตัวเลือกที่หนึ่ง
5)svrmgrl> กู้คืนชื่อไฟล์ datafile;
6) ยืนยันว่าการกู้คืนสำเร็จ
7)svrmgrl> แก้ไขฐานข้อมูลเปิดรีเซ็ตล็อก;
ไม่จำเป็นต้องทำการกู้คืนสื่อสำหรับพื้นที่ตารางแบบอ่านอย่างเดียว เพียงแค่กู้คืนข้อมูลสำรองเท่านั้น ข้อยกเว้นเพียงอย่างเดียวคือ:
พื้นที่ตารางถูกเปลี่ยนเป็นโหมดอ่าน-เขียนหลังจากการสำรองข้อมูลครั้งล่าสุด พื้นที่ตารางถูกเปลี่ยนเป็นโหมดอ่านอย่างเดียวหลังจากการสำรองข้อมูลครั้งล่าสุด ในกรณีนี้ จำเป็นต้องมีการกู้คืนสื่อ
(2) พื้นที่ตารางชั่วคราว พื้นที่ตารางชั่วคราวไม่มีข้อมูลจริง วิธีการกู้คืนคือการลบพื้นที่ตารางชั่วคราวและสร้างใหม่
(3) หากการสำรองข้อมูลพื้นที่ตารางของระบบไม่พร้อมใช้งาน วิธีเดียวที่สามารถสร้างฐานข้อมูลใหม่ได้
(4) มีสองสถานการณ์สำหรับการย้อนกลับพื้นที่ตาราง:
1. ฐานข้อมูลถูกปิดอย่างสมบูรณ์ (ใช้คำสั่งปิดระบบทันทีหรือปิดระบบ)
1) ยืนยันว่าฐานข้อมูลปิดสนิทแล้ว
2) แก้ไขไฟล์ init.ora และแสดงความคิดเห็น "rollback-segment"
3) svrmgrl> เมานต์ จำกัด การเริ่มต้น
4) svrmgrl> แก้ไขชื่อไฟล์ฐานข้อมูล datafile แบบออฟไลน์;
5) svrmgrl> แก้ไขฐานข้อมูลที่เปิด;
ตามผลลัพธ์ที่ปรากฏ: "คำสั่งที่ประมวลผลแล้ว" ไปที่ (7); "ORA-00604,ORA-00376,ORA-01110" ไปที่ (6)
6) svrmgrl> ปิดเครื่องทันที
แก้ไขไฟล์ init.ora และเพิ่มบรรทัดต่อไปนี้: _corrupted_rollback_segments = (<roll1>,...<rolln>)
svrmgrl> จำกัดการเริ่มต้น
7) svrmgrl> วาง tablespace tablespace_name รวมถึงเนื้อหา;
8) สร้างพื้นที่ตารางใหม่และส่วนการย้อนกลับ
9) svrmgrl> แก้ไขระบบปิดการใช้งานเซสชันที่ถูก จำกัด
10) แก้ไขไฟล์ init.ora
2. ฐานข้อมูลปิดไม่สนิท (ฐานข้อมูลล่มหรือคำสั่งยกเลิกการปิดระบบใช้เพื่อปิดฐานข้อมูล)
1) คืนค่าการสำรองข้อมูล
2) svrmgrl> เมาท์เริ่มต้น
3) svrmgrl> เลือกไฟล์#,ชื่อ,สถานะจาก v$datafile;
svrmgrl> แก้ไขชื่อไฟล์ฐานข้อมูลดาต้าไฟล์ออนไลน์
4) svrmgrl> เลือก v1.group#,member,sequence#,first_change# จาก v$log v1,v$logfile v2 โดยที่ v1.group#=v2.group#;
5) svrmgrl> เลือกไฟล์#,เปลี่ยน#จาก v$recover_file; #ดูวิธีแก้ปัญหา 2-4
6) svrmgrl> กู้คืนชื่อไฟล์ datafile;
7) svrmgrl> แก้ไขฐานข้อมูลที่เปิด;
3. ฐานข้อมูลเปิดอยู่
1) ลบส่วนการย้อนกลับและพื้นที่ตาราง
2) สร้างพื้นที่ตารางใหม่และส่วนย้อนกลับ (5) ควบคุมการกู้คืนไฟล์
1. ไฟล์ควบคุมทั้งหมดจะถูกทำลาย คัดลอกไฟล์ควบคุมการสำรองข้อมูลไปยังไดเร็กทอรีดั้งเดิม สำหรับอุปกรณ์ RAW (อุปกรณ์เปล่า) จากนั้น: dd if='con.bak' of='/dev/rdrd/drd1' search=128
2. ไม่ใช่ไฟล์ควบคุมทั้งหมดจะถูกทำลาย ใช้ไฟล์ควบคุมอื่น ๆ เพื่อเริ่มฐานข้อมูล (6) บันทึกบล็อกข้อมูลและข้อมูลในไฟล์เหล่านั้น ปรากฏการณ์: ข้อผิดพลาด ORA-01578 เกิดขึ้นเมื่อดำเนินการวิเคราะห์: ข้อผิดพลาด ORA-1578 เกิดขึ้นเมื่อ ORACLE ถือว่าบล็อกข้อมูลอาจเสียหายและอาจเกิดขึ้นเนื่องจากสาเหตุดังต่อไปนี้:
ฮาร์ดแวร์ I/O หรือเฟิร์มแวร์เสียหาย ระบบปฏิบัติการ I/O หรือแคชล้มเหลว หน่วยความจำหรือข้อผิดพลาดการสลับหน้า บางส่วนของไฟล์ข้อมูลถูกเขียนทับ กำลังพยายามเข้าถึงบล็อกดิสก์ที่ยังไม่ได้ฟอร์แมต การซ่อมแซม สาเหตุอื่นๆ ขั้นตอนการแก้ไข:
ตรวจสอบไฟล์บันทึกและติดตามเพื่อดูว่ามีข้อผิดพลาดอื่นๆ หรือข้อผิดพลาดในการกำหนดตำแหน่งหรือไม่:
sql>เลือก * จาก v$datafile โดยที่ file#=<F>;
sql>เลือกเจ้าของ,segment_name,segment_type จาก dba_extents โดยที่ file_id=<F> และ <B> ระหว่าง block_id และ block_id+blocks-1;
ขึ้นอยู่กับเซ็กเมนต์ที่ส่งคืน:
ประเภทเซ็กเมนต์เป็นแบบชั่วคราวหรือแคชหรือไม่มีค่าส่งคืน ตรวจสอบว่าคำสั่ง SQL ถูกต้องหรือไม่
หากประเภทเซ็กเมนต์เป็นเซ็กเมนต์ย้อนกลับ จะต้องกู้คืนบล็อกข้อมูล
ประเภทเซ็กเมนต์คือดัชนี ตรวจสอบตารางที่ตั้งอยู่ เพียงสร้างดัชนีใหม่
sql> เลือกเจ้าของ table_name จาก dba_tables โดยที่คลัสเตอร์_name = name_of_segment
ยังคงเกิดข้อผิดพลาด 1578 และจำเป็นต้องกู้คืนฐานข้อมูล
ประเภทกลุ่มคือตารางและบันทึกข้อมูลในตาราง
วิเคราะห์ว่าเอนทิตีมีความเสียหายของข้อมูลอย่างถาวรหรือไม่
sql> วิเคราะห์ตาราง table.name ตรวจสอบโครงสร้างน้ำตก;
sql> วิเคราะห์ชื่อคลัสเตอร์ตารางตรวจสอบโครงสร้างน้ำตก;
ฐานข้อมูลการกู้คืนข้อผิดพลาดของฮาร์ดแวร์ที่ทำงานในโหมด ARCHIVE
ออฟไลน์ไฟล์ข้อมูลที่เกี่ยวข้องคัดลอกไฟล์ข้อมูลสำรอง
เปลี่ยนชื่อไฟล์ข้อมูลเป็นตำแหน่งใหม่
กู้คืนไฟล์ข้อมูลโดยใช้บันทึกการเก็บถาวร
ฐานข้อมูลไฟล์ข้อมูลออนไลน์กำลังทำงานในโหมดที่ไม่ใช่การเก็บถาวร
ออฟไลน์ไฟล์ข้อมูลที่เกี่ยวข้องจะคัดลอกไฟล์ข้อมูลที่สำรองไว้ เปลี่ยนชื่อไฟล์ข้อมูลและออนไลน์
บันทึกข้อมูลลงในตาราง เช่น sql>select * from bigemp;
ข้อผิดพลาด: ORA-01578: บล็อก ORACLE DATA เสียหาย (ไฟล์ # 8 บล็อก # 8147) ORA-00110: ไฟล์ข้อมูล 8: '/oracle/usr714.dbf' … … รหัสไฟล์เสียหาย : 8=8(hex) รหัสบล็อกเสียหาย : 8147=1fd3(hex) แถวแรกในบล็อกที่เสียหาย: 0000.1fd3.0000.0008 แถวสุดท้ายในบล็อกที่เสียหาย: 0000.1fd2.7fff.0008 แถวแรกได้รับบล็อกนี้: 0000.1fd4.0000.0008
sql > สร้างตารางชั่วคราวเป็น select * จาก bigemp โดยที่ 1=2;
sql > แทรกลงใน temp เลือก * จาก bigemp /*+rowid(bigemp) */ โดยที่ rowid >='0000.1fd4.0000.0008';
sql > แทรกลงใน temp select * จาก bigemp โดยที่ rowid <='0000.1fd2.7fff.0008';
ในเวอร์ชันก่อน ORACLE 7.1 เมื่อไม่มีการสแกนช่วงแถว คุณสามารถบรรลุวัตถุประสงค์เดียวกันกับข้างต้นได้ผ่านการจัดทำดัชนี
4. คำลงท้าย
เทคโนโลยีการสำรองข้อมูลและการกู้คืนของ ORACLE อาจกล่าวได้ว่ากว้างขวางและลึกซึ้ง ฉันรู้เพียงส่วนเล็กๆ เท่านั้น และฉันหวังว่าบทความเหล่านี้จะเป็นประโยชน์กับทุกคน และการกู้คืน บอกปัญหาให้ฉันทราบ ฉันจะจัดระเบียบและเผยแพร่ที่นี่เพื่อเป็นข้อมูลอ้างอิงของเพื่อน DBA และผู้ดูแลระบบข้อมูลทั้งหมดที่สนใจทำเช่นนี้ บางทีความพยายามเพียงเล็กน้อยของคุณอาจช่วยบริษัทได้!
ในเวลาเดียวกัน ฉันอยากจะเตือนเพื่อนๆ ทุกคนว่าการสำรองข้อมูลนั้นสำคัญมาก มาก มาก มาก มาก มาก มาก มาก - - ที่สำคัญหากเป็นไปได้คุณต้องใช้โหมด ARCHIVE ไม่เช่นนั้นอาจมีข้อผิดพลาดเกิดขึ้นและคุณจะร้องไห้ไม่ออกด้วยซ้ำ