転生については、このサイトの an answer から another question で説明されています。答えは「孤立した」化身について言及しています:
…ORPHANEDインカネーションとOBSOLETEバックアップにつながる他の要因があります…
私は Oracle docsからV$DATABASE_INCARNATION
にSTATUS
列が含まれており、Orphan
、CURRENT
またはPARENT
、これは関連している必要があります。
「孤立した」インカネーションとは何ですか。また、V$DATABASE_INCARNATION
にSTATUS
= 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
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
を使用してデータベースを開き、データベースが新しいインカネーションを作成したためです。
もう一度、データベースが最初の復元/回復アクション後も稼働し続け、わずか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
もう一度、データベースが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の話です...
これが現在のインカネーションの直接の祖先ではない現在のインカネーションでない場合は、孤立します。
再現する手順:
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