ชาติเด็กกำพร้าคืออะไร?


9

สาขามีการอธิบายในคำตอบให้กับคำถามอื่นบนเว็บไซต์นี้ คำตอบที่กล่าวถึงการแปลงร่างเป็น 'กำพร้า':

... มีปัจจัยอื่น ๆ ที่ส่งผลให้เกิดองค์กร ORPHANED และการสำรองข้อมูล OBSOLETE ...

ฉันเห็นจากเอกสารของออราเคิลที่V$DATABASE_INCARNATIONมีSTATUSคอลัมน์ที่สามารถมีค่าของORPHAN, CURRENTหรือPARENTที่จะต้องเกี่ยวข้อง

อะไรคือ 'เด็กกำพร้า' แปลงและสิ่งที่ขั้นตอนที่จะส่งผลในแถวด้วยSTATUS= ORPHANในV$DATABASE_INCARNATION?

คำตอบ:


8

ต่อไปนี้เป็นกราฟิกสั้นที่ฉันจะใช้เพื่ออธิบายเมื่อเด็กกำพร้าถูกสร้างขึ้นในสาขาของฐานข้อมูล มันเป็นรูปแบบของกราฟิกที่ฉันใช้อธิบายการแปลงชาติในคำตอบของคำถามที่ทุกคนสามารถอธิบายแนวคิด "การเกิดใหม่" ในฐานข้อมูล Oracle ในวิธีที่ง่ายต่อการเข้าใจหรือไม่

ฉันหวังว่าคุณจะสนุกกับการเดินทาง

                                          restore db    +-----+     +-----+     +-----+          
                                          recover db    | 2>3 | --> |  3  | --> |  3  | -->  ... 
                                          resetlogs     +-----+     +-----+     +-----+  ^       
                                                            ^ Incarn   3           3     |    3  
                                                           /  SCN #   500         600    |   700 
                                                          /                              |          
                                                         /                               |          
             restore db    +-----+          +-----+     +-----+                          |          
             recover db    | 1>2 | -------> |  2  | --> |  2  | -->  ...                 |          
             resetlogs     +-----+          +-----+     +-----+  ^                       |          
                           ^       Incarn.     2 \         2     |    2                  |          
                          /        SCN #      300 \       400    |   500                 |          
                         /                         \             |                       |          
                        /                           + --------------------+              |          
        +-----+     +-----+     +-----+                          |         \    +-----+  |  +-----+ 
    --> |  1  | --> |  1  | --> |  1  | -->   ...                |          +-> | 2>4 | --> |  4  | 
        +-----+     +-----+     +-----+  ^                       |   restore db +-----+  |  +-----+ 
Incarn.    1           1           1     |     1           2     |   recover db          |     4    
SCN #     100         200         300    |    400         400    |   resetlogs           |    400   
                                         |                       |                       |          
Backup   11:00 ----- 12:00 ----- 13:00 ----- 14:00 ----- 15:00 ----- 16:00 ----- 17:00 ----- 18:00  
                                         |                       |                       |          
Restore/                                (1)                     (2)                     (3)         
Recovery                                                                                            

การคืนค่าฐานข้อมูลให้ตรงเวลา (1)

บางคนเล็กน้อยหลังจาก 13:00 น. (13:00 น.) ใครบางคนตัดสินใจว่าฐานข้อมูลจะต้องมีการคืนค่าเป็น 12:00 (เที่ยงวัน 12 นาฬิกา) DBA จะตั้งค่าคำสั่ง RMAN จำนวนมากเพื่อกู้คืนฐานข้อมูลไปยังจุดนั้นหรือคลิกผ่านทาง GUI ที่ยอดเยี่ยมเพื่อเริ่มต้นการกู้คืน / กู้คืนจากผู้ขายบุคคลที่สาม

RMAN ดึงการสำรองข้อมูลแบบเต็มของฐานข้อมูลและการสำรองข้อมูลแฟ้มบันทึกถาวรทั้งหมดจากดิสก์ / เทปและเรียกคืนไปยังดิสก์ ในขั้นตอนการกู้คืน RMAN จะตรวจสอบว่ามีข้อมูลที่เกี่ยวข้องทั้งหมดและย้อนกลับธุรกรรมที่เสร็จสิ้นทั้งหมดไปยังจุดในเวลาและย้อนกลับธุรกรรมที่ยังไม่เสร็จทั้งหมดไปยังจุดในเวลาเพื่อให้มั่นใจว่าฐานข้อมูลอยู่ในสถานะที่สอดคล้องกัน

ก่อนที่จะสามารถเปิดฐานข้อมูลสู่สาธารณะทั่วไปฐานข้อมูลได้เพื่อให้แน่ใจว่าการสำรองข้อมูลในอนาคตทั้งหมดไม่ขัดแย้งกับการสำรองข้อมูลก่อนหน้า นี่คือเมื่อมีการสร้างชาติใหม่และจะเกิดขึ้นเมื่อคุณดำเนินการคำสั่งต่อไปนี้เพื่อเปิดฐานข้อมูล:

ALTER DATABASE OPEN RESETLOGS;

คุณสามารถเรียกใช้สคริปต์ต่อไปนี้กับอินสแตนซ์ของคุณเพื่อดึงมุมมองแบบลำดับชั้นของสาขา (ปัจจุบัน) ของคุณ:

set pages 50               --- repeat header every 50 records
set lines 230              --- set lines(ize) length to 230
column path format a40     --- set column path to alpha-numeric 40
alter sessiosn set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
                           --- set date format of date columns to something more detailed
select 
    INCARNATION#, 
    PRIOR_INCARNATION#, 
    RESETLOGS_CHANGE#, 
    RESETLOGS_TIME, 
    STATUS, 
    SYS_CONNECT_BY_PATH(INCARNATION#, ' -> ') Path 
    FROM v$database_incarnation 
    WHERE LEVEL >=1 START WITH INCARNATION# = '1' 
        CONNECT BY PRIOR INCARNATION# = PRIOR_INCARNATION# 
    ORDER BY LEVEL, Path, RESETLOGS_TIME;

การจุติของฐานข้อมูลในปัจจุบันจะคล้ายกับสิ่งนี้:

INCARNATION# PRIOR_INCARNATION# RESETLOGS_CHANGE# RESETLOGS_TIME      STATUS  PATH
------------ ------------------ ----------------- ------------------- ------- --------------------
           1                  0                 1 2017-03-08 15:57:31 PARENT   -> 1
           2                  1               200 2018-07-27 13:20:00 CURRENT  -> 1 -> 2

การใช้กราฟิกเราจะเห็นว่าเราได้ย้ายจากเส้นทางที่มีการจุติ 1 ไปยังเส้นทางที่มีการจุติมา 2 เพราะเราได้เปิดฐานข้อมูลด้วยRESETLOGSและฐานข้อมูลได้สร้างชาติใหม่

การคืนค่าฐานข้อมูลให้ตรงเวลา (2)

สมมติว่าฐานข้อมูลยังคงทำงานต่อไปหลังจากการดำเนินการกู้คืน / กู้คืนแรกและหลังจาก 15:00 น. (15:00 น.) มีคนตัดสินใจว่าจำเป็นต้องมีการกู้คืน / กู้คืนใหม่กลับสู่ชั่วโมงเต็มเวลา 15:00 น. (15:00) ในวันเดียวกัน

RMAN จะกู้คืนไฟล์กู้คืนฐานข้อมูลและตั้งค่าปิดALTER DATABASE OPEN RESETLOGSเพื่อให้ฐานข้อมูลกลับสู่สถานะออนไลน์ INCARNATION # จะถูกตั้งค่าเป็น 3 และการสำรองข้อมูลครั้งแรกที่ 16:00 จะมีข้อมูล:

INCARNATION#    3
SCN#           500
Time......... 16:00

หากเราค้นหาสาขาในฐานข้อมูลโดยใช้สคริปต์ด้านบนเราจะได้รับสิ่งนี้:

INCARNATION# PRIOR_INCARNATION# RESETLOGS_CHANGE# RESETLOGS_TIME      STATUS  PATH
------------ ------------------ ----------------- ------------------- ------- --------------------
           1                  0                 1 2017-03-08 15:57:31 PARENT   -> 1
           2                  1               200 2018-07-27 13:20:00 PARENT   -> 1 -> 2
           3                  2               400 2018-07-27 15:20:00 CURRENT  -> 1 -> 2 -> 3

การคืนค่าฐานข้อมูลให้ตรงเวลา (3)

สมมติว่าฐานข้อมูลยังคงทำงานต่อไปหลังจากการดำเนินการกู้คืน / กู้คืนครั้งที่สองและเล็กน้อยหลังจาก 17:00 (5pm) ใครบางคนตัดสินใจว่าจำเป็นต้องมีการกู้คืน / กู้คืนใหม่กลับไปที่ 14:00 (2:00) ในวันเดียวกัน

RMAN จะกู้คืนไฟล์กู้คืนฐานข้อมูลและปิดALTER DATABASE OPEN RESETLOGSเพื่อนำฐานข้อมูลกลับมาออนไลน์ INCARNATION # จะถูกตั้งค่าเป็น 4 และการสำรองข้อมูลครั้งแรกเวลา 18:00 น. จะมีข้อมูล:

INCARNATION#    4
SCN#           400
Time......... 18:00

หากเราค้นหาสาขาในฐานข้อมูลโดยใช้สคริปต์ด้านบนเราจะได้รับสิ่งนี้:

INCARNATION# PRIOR_INCARNATION# RESETLOGS_CHANGE# RESETLOGS_TIME      STATUS  PATH
------------ ------------------ ----------------- ------------------- ------- --------------------
           1                  0                 1 2017-03-08 15:57:31 PARENT   -> 1
           2                  1               200 2018-07-16 13:20:00 PARENT   -> 1 -> 2
           3                  2               400 2018-07-17 15:20:00 ORPHAN   -> 1 -> 2 -> 3
           4                  2               300 2018-07-17 17:20:00 CURRENT  -> 1 -> 2 -> 4

เกิดอะไรขึ้น? เรามีเด็กกำพร้า!

แปลงร่างกำพร้า ...

หากคุณดูกราฟิกเรากำลังยืนอยู่บนจัตุรัสเวลา 18:00 น. (18:00 น.) ด้วยการจุติจุติ 4 และ SCN 400 ตอนนี้ถ้าคุณตามเส้นนั้นกลับไปที่จุดเริ่มต้นคุณจะเห็นว่าเราจะไปจากชาติ 4 back up to incarnation 2 จากนั้นกลับไปที่ incarnation 1 ซึ่งเป็นเวลาที่สร้างฐานข้อมูล

สิ่งนี้ยังสอดคล้องกับเอาต์พุต (เรียบง่าย) ของสคริปต์ของฉัน

INCARNATION# PRIOR_INCARNATION# RESETLOGS_CHANGE# RESETLOGS_TIME      STATUS  PATH
------------ ------------------ ----------------- ------------------- ------- --------------------
           4                  2               300 2018-07-17 17:20:00 CURRENT  -> 1 -> 2 -> 4

แล้วเกิดอะไรขึ้นกับการจุติ 3 การจุติมาต 3 เป็นสิ่งที่ไม่ดีหรือเหม็นอับหรือมีอะไรให้?

ตอบ

ไม่การจุติที่ 3 นั้นไม่เลวเลยมันเป็นแค่เด็กกำพร้า

ในระดับที่ใหญ่ขึ้นด้วยเวลาที่มากขึ้นระหว่างการสำรองและกู้คืนคุณยังคงสามารถเรียกคืน / กู้คืนฐานข้อมูลกลับไปยังจุดในช่วงเวลาของการเกิดจุติ 3 คุณจะต้องปิดคำสั่งต่อไปนี้:

RESET DATABASE TO INCARNATION 3;

... จากนั้นกู้คืน / กู้คืนฐานข้อมูลไปยังจุดนั้นในเวลาเช่นเดียวกับที่คุณต้องการกู้คืน / กู้คืนฐานข้อมูล

สิ่งที่ORPHANสถานะไม่บอกคุณว่าชาติที่ 3 เป็นเรื่องที่เกี่ยวข้องไม่มีสถานะปัจจุบันของฐานข้อมูลที่มีชาติปัจจุบัน 4. กำพร้าชาติ 3 ไม่จำเป็นที่จะเรียกคืน / กู้คืนฐานข้อมูลตามระยะเวลาปัจจุบัน

... ส่งผลให้เกิดการสำรองข้อมูลที่ล้าสมัย

ตอนนี้ดูที่การสำรองฐานข้อมูลที่เกี่ยวข้องกับการเกิดใหม่ของเด็กกำพร้าดี RMAN กำหนดว่าการสำรองข้อมูลขององค์กรที่กำพร้ากำพร้าเป็น OBSOLETE แต่นั่นเป็นเรื่องราวสำหรับ Q & A ที่แตกต่างกัน ...


7

RC_DATABASE_INCARNATION

เด็กกำพร้าถ้านี่เป็นชาติที่ไม่ใช่กระแสที่ไม่ได้เป็นบรรพบุรุษโดยตรงของชาติปัจจุบัน

ขั้นตอนในการทำซ้ำ:

SQL> select incarnation#, status from v$database_incarnation;

INCARNATION# STATUS
------------ -------
           1 PARENT
           2 CURRENT

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    3393014

SQL> shu immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area 1073741824 bytes
Fixed Size                  8628936 bytes
Variable Size             394265912 bytes
Database Buffers          662700032 bytes
Redo Buffers                8146944 bytes
Database mounted.
SQL> flashback database to scn 3393014;

Flashback complete.

SQL> alter database open resetlogs;

Database altered.

SQL> select incarnation#, status from v$database_incarnation;

INCARNATION# STATUS
------------ -------
           1 PARENT
           2 PARENT
           3 CURRENT

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    3393975

SQL> shu immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area 1073741824 bytes
Fixed Size                  8628936 bytes
Variable Size             394265912 bytes
Database Buffers          662700032 bytes
Redo Buffers                8146944 bytes
Database mounted.
SQL> flashback database to scn 3393200;

Flashback complete.

SQL> alter database open resetlogs;

Database altered.

SQL> select incarnation#, status from v$database_incarnation;

INCARNATION# STATUS
------------ -------
           1 PARENT
           2 PARENT
           3 PARENT
           4 CURRENT

SQL> shu immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area 1073741824 bytes
Fixed Size                  8628936 bytes
Variable Size             394265912 bytes
Database Buffers          662700032 bytes
Redo Buffers                8146944 bytes
Database mounted.
SQL> flashback database to scn 3393014;

Flashback complete.

SQL> alter database open resetlogs;

Database altered.

SQL> select incarnation#, status from v$database_incarnation;

INCARNATION# STATUS
------------ -------
           1 PARENT
           2 PARENT
           3 ORPHAN
           4 ORPHAN
           5 CURRENT
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.