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


9

インカネーションはで説明されている答え別の質問このサイトに。答えは「孤立した」化身について言及しています:

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

Oracleドキュメントから、関連する必要がある、またはの値を持つことができる列がV$DATABASE_INCARNATION含まれてSTATUSいることがわかりますORPHANCURRENTPARENT

「孤立した」化身とは何ですか。また、STATUS= ORPHANinの行がどのステップで生成されるのでしょう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(午後1時)の少し後のどこかで、誰かがデータベースを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の話です...


7

RC_DATABASE_INCARNATION

これが現在のインカネーションの直接の祖先ではない非現在のインカネーションである場合は、ORPHAN。

再現する手順:

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.