以下は、孤児がデータベースの化身に作成されるときを説明するために使用する短いグラフィックです。これは、質問への私の回答で具体化を説明するために使用したグラフィックのバリエーションです。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の話です...