web-dev-qa-db-ja.com

孤児の化身とは何ですか?

転生については、このサイトの an answer から another question で説明されています。答えは「孤立した」化身について言及しています:

…ORPHANEDインカネーションとOBSOLETEバックアップにつながる他の要因があります…

私は Oracle docsからV$DATABASE_INCARNATIONSTATUS列が含まれており、OrphanCURRENTまたはPARENT、これは関連している必要があります。

「孤立した」インカネーションとは何ですか。また、V$DATABASE_INCARNATIONSTATUS = Orphanが含まれる行になるのはどのステップですか。

以下は、孤児がデータベースの化身に作成されるときを説明するために使用する短いグラフィックです。これは、私の化身を説明するために使用したグラフィックのバリエーションです answer 質問 誰でも簡単に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(午後3時)後、誰かが同じ日の午後15:00(午後3時)に新しい復元/回復を1時間に戻す必要があると判断したとします。

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)

もう一度、データベースが2番目の復元/回復アクションの後も実行を続け、17:00(午後5時)の少し後に、誰かが同じ日の14:00(午後2時)までの新しい復元/回復が必要であると判断したとします。

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インカネーション2に戻り、次にインカネーション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は孤立したインカネーションのバックアップが廃止されていると判断します。しかし、それは別のQ&Aの話です...

8

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
7
Balazs Papp