Yetim enkarnasyonu nedir?


9

Enkarnasyonlar açıklanmıştır bir cevap için başka bir soru bu sitede. Cevap 'öksüz' enkarnasyonlarından bahsediyor:

… ORPHANED enkarnasyonlarına ve OBSOLETE yedeklemelerine neden olan başka faktörler de var…

Görmek Oracle dokümanlar ile ilgiliV$DATABASE_INCARNATION bir içermektedir STATUSarasında değerlere sahip olabilir sütunu ORPHAN, CURRENTya da PARENTilgili olmalıdır.

'Artık' enkarnasyonları nelerdir ve hangi adımlar STATUS= ORPHANin ile bir satırla sonuçlanır V$DATABASE_INCARNATION?

Yanıtlar:


8

Aşağıda, bir veritabanının enkarnasyonlarında yetimlerin ne zaman yaratıldığını açıklamak için kullanacağım kısa bir grafik var. Bu benim de enkarnasyonlarını açıklamak için kullanılan grafik bir varyasyonu cevap sorusuna Can herkes kolay anlaşılır şekilde bana Oracle veritabanında konsepti “enkarnasyon” açıklamak?

Umarım yolculuğun tadını çıkarırsın.

                                          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                                                                                            

Veritabanını Zamanda Noktaya Geri Yükleme (1)

13:00 (13:00) 'den biraz sonra birileri veritabanının 12: 00'a (gün içi 12) geri yüklenmesi gerektiğine karar verir. DBA, veritabanını o zamana geri yüklemek için bir grup RMAN komutu başlatır veya 3. taraf bir tedarikçiden geri yükleme / kurtarma başlatmak için fantastik bir GUI'yi tıklar.

RMAN, veritabanının ve tüm Arşiv Günlüğü yedeklemelerinin disk / teypten TAM yedeklemesini alır ve bunları diske geri yükler. Kurtarma aşamasında RMAN, ilgili tüm bilgilerin mevcut olup olmadığını kontrol edecek ve tüm bitmiş işlemleri Zamanında Noktaya iletecek ve veritabanının tutarlı bir durumda olduğundan emin olmak için bitmemiş tüm işlemleri Zamanında geri alacaktır.

Veritabanı genel halka açılmadan önce, veritabanı gelecekteki tüm yedeklemelerin önceki yedeklemelerle çakışmamasını sağlamalıdır. Bu, yeni bir enkarnasyonun oluşturulması gerektiğinde ve veritabanını açmak için aşağıdaki komutu çalıştırdığınızda gerçekleşir:

ALTER DATABASE OPEN RESETLOGS;

(Geçerli) enkarnasyonlarınızın hiyerarşik bir görünümünü almak için örneğinize karşı aşağıdaki komut dosyasını çalıştırabilirsiniz:

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;

Veritabanının mevcut enkarnasyonu buna benzer olacaktır:

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

Grafiği kullanarak, enkarnasyonu 1 içeren yoldan enkarnasyon 2 ile yola taşındığımızı görebiliriz, çünkü veritabanını açtık ve veritabanı RESETLOGSyeni bir enkarnasyon yarattı.

Veritabanını Zamanda Noktaya Geri Yükleme (2)

Yine, ilk geri yükleme / kurtarma işleminden sonra ve 15:00 (15:00) saatinden sonra veritabanının çalışmaya devam ettiğini varsayalım. Birisi, aynı gün saat 15: 00'te (15: 00) tam bir saate geri dönmesi gerektiğine karar verdi.

RMAN dosyaları geri yükleyecek, veritabanını kurtaracak ve ALTER DATABASE OPEN RESETLOGSveritabanını tekrar çevrimiçi duruma getirmek için INCARNATION # şimdi 3 olarak ayarlanacak ve 16: 00'daki ilk yedekleme şu bilgileri içerecektir:

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

Yukarıdaki komut dosyasını kullanarak veritabanındaki enkarnasyonları sorgularsak, şöyle bir şey elde ederiz:

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

Veritabanını Zamanda Noktaya Geri Yükleme (3)

Yine, ikinci geri yükleme / kurtarma işleminden sonra veritabanının çalışmaya devam ettiğini ve saat 17: 00'den (17: 00) biraz sonra birisinin aynı gün 14: 00'a (14: 00) kadar yeni bir geri yükleme / kurtarma gerektiğine karar verdiğini varsayalım.

RMAN dosyaları geri yükleyecek, veritabanını kurtaracak ALTER DATABASE OPEN RESETLOGSve veritabanını tekrar çevrimiçi duruma getirmeye başlayacaktır . INCARNATION # şimdi 4 olarak ayarlanacak ve 18: 00'deki ilk yedekleme şu bilgileri içerecektir:

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

Yukarıdaki komut dosyasını kullanarak veritabanındaki enkarnasyonları sorgularsak, şöyle bir şey elde ederiz:

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

Ne oldu? Bir yetimimiz var!

Yetim Enkarnasyonlar ...

Grafiğe bakarsanız, şu anda enkarne 4 ve SCN 400 ile saat 18: 00'de (6: 00'da) karenin üzerinde duruyoruz. Şimdi bu çizgiyi başa kadar takip ederseniz, enkarnasyondan gideceğimizi görebilirsiniz. 4, enkarnasyon 2'ye geri dönün ve sonra veritabanı oluşturulduğu zaman enkarnasyon 1'e geri dönün.

Bu, komut dosyalarımın (basitleştirilmiş) çıktısına da karşılık gelir.

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

Peki enkarnasyon 3 ile ne oldu? Enkarnasyon 3 kötü mü, bayat mı yoksa ne veriyor?

Cevap

Hayır, enkarnasyon 3 kötü değil, sadece yetim.

Yedeklemeler ve geri yüklemeler arasında daha fazla zamana sahip daha büyük bir ölçekte, veritabanını enkarnasyon 3 kökeninde belirli bir zamana geri yükleyebilir / kurtarabilirsiniz.

RESET DATABASE TO INCARNATION 3;

... ve sonra diğer bir veritabanını geri yükleyeceğiniz / kurtaracağınız gibi veritabanını o zamana kadar geri yükleyin / kurtarın.

Ne ORPHANdurumu, sana ne anlatıyor enkarnasyon 3 artık sürüm çoktan 4. 3 artık / geri akım zaman çizgisi boyunca veritabanını kurtarmak için gereklidir yetim enkarnasyon ile veritabanının mevcut durumuna ilişkin olmasıdır.

... Eski Yedeklemeler Sonucu

Artık yetim kalmış enkarnasyona ilişkin veritabanı yedeklemelerine bakıldığında, RMAN artık yetimsiz enkarnasyonun yedeklemelerinin OBSOLETE olduğunu belirler. Ama bu farklı bir soru-cevap hikayesi ...


7

RC_DATABASE_INCARNATION

ORPHAN, mevcut enkarnasyonun doğrudan atası olmayan bir akım olmayan enkarnasyon ise.

Yeniden oluşturma adımları:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.