Oracleシステム構造のSCN、インスタンス回復
SCN:System Change Number
SCNは、Oracleデータベースの論理の内部タイムスタンプであり、データベースがある適切な時刻に提出されたバージョンを識別するために使用される。事務の提出またはロールバックにおいて、データベースの整合性を保証するために、唯一の識別情報であるSCNが付与されている。
コントロールファイル中システムチェックポイントSCN(System Checkpoint SCN) ファイルチェックポイントSCN(Datafile Checkpoint SCN) ファイル終了SCN(Stop SCN) からSCN(Start SCN) FIRST SCN:redo log fileにおける最初のログのSCN NEXT SCN:redo logs fileの最後のログSCN(つまり次のredo logs fileの第一のログのSCN) 通常は、現在のリフォームログファイル群がいっぱいになってからログ切り替えが発生しますが、設定パラメータARCHIVE_LOG_TARGETはログ切り替えの時間間隔を制御し、必要に応じて手動で強制的にログ切り替えを行うことができます。
redo log fileのセットがいっぱいになると、自動的に次のグループのredo logfileに切り替わります。前のグループのredo logsのHigh SCNは次のグループredo logsのLow SCNであり、CurrentログファイルのHigh SCNは無限大である。
OracleはOracleデータベースで制御ファイルにより以下の検証を行いました。は、データファイルのヘッダに記録されているStart SCNと制御ファイルに記録されているSystem Checkpoint SCNが一致しているかどうかを確認し、異なる場合は、メディア回復 を行う必要がある。は、データファイルヘッダに記録されているStart SCNと制御ファイルに記録されているStop SCNが一致しているかどうかを確認し、異なる場合はインスタンス回復が必要である。 両方が一致したら、修正されたデータブロックはすべてデータファイルに書き込まれていることを説明します。正常にオープンできます。
データベースのOPENが正常に動作している間、システムSCN、ファイルSCNとデータファイルヘッダの開始SCNは同じであり、かつ(大きいかまたは)ACTIVE/CURRENTログファイルの最小FIRST SCNに等しいが、ファイル終了SCNはNULL(無限大)である。
データベースが正常にクローズされている場合、Oracleは、完全チェックポイントによって、ブザーcacheのすべてのキャッシュをディスクに書き込み、同時にデータベースを閉じる時点によって制御ファイルのシステムSCN、ファイルSCN、SCNを終了し、データファイルのヘッダの開始SCNを更新し、SCNは全部一致しています。LRBAポインタはon disk RBAを指しています。
データベースが正常にクローズされていない(崩壊/電源がオフされている)場合、Oracleは制御ファイルに検出されたシステムSCN、ファイルSCN、およびデータファイルヘッダの開始SCNを一致させるが、SCNがNULLで終了すると、制御ファイルに記録されたLRBAアドレス(前転開始点)とon disk RBA(前転端点)に従って、インスタンス崩壊回復に参加する必要がある。アドレスは、対応するログ項目を探して、インスタンスのクラッシュを回復して、最終的には、データベースのオープンを行うことができます。
インスタンス回復の詳細プロセス:前のロールオフフェーズ(前ロールはredoによって、またバッファエリアと呼ばれてcache recoveryを回復します。つまり、メモリの中にありますが、まだデータファイルに書き込んでいない内容を回復します。) Oracleはredo logs fileの記録によって前に転がっています。(comitがあるかどうかに関わらず)、前に転がって完成したら、data fileに提出されたデータがあるかもしれません。
また、undoの生成もRedo logsを記録するため、Redoによって、バックバックバックバックする際に必要なundo情報が再生成されます。データベースopen段階 前にロールアップした後、データベース内のすべての変更されたデータブロックはすでにデータファイルに書き込まれています。正常にオープンできます。ロールバックフェーズ(undoをロールバックして、またトラストレーカーと呼ばれる。つまり、インスタンスが崩壊する前に提出されていないトランザクションをリターンすることを担当する) データベースを正常に閉じている場合:
システムSCN、ファイルSCN、終了SCN、およびデータファイルヘッダの開始SCNは等しく、かつ(以上または)ACTIVE/CURRENTログファイルの最小FIRST SCNに等しい。
ファイル終了SCNはNULLです(無限大)
ファイル終了SCNはまだNULLです(無限大)
SCNは、Oracleデータベースの論理の内部タイムスタンプであり、データベースがある適切な時刻に提出されたバージョンを識別するために使用される。事務の提出またはロールバックにおいて、データベースの整合性を保証するために、唯一の識別情報であるSCNが付与されている。
SQL> select dbms_flashback.get_system_change_number, SCN_TO_TIMESTAMP(dbms_flashback.get_system_change_number) from dual;
GET_SYSTEM_CHANGE_NUMBER SCN_TO_TIMESTAMP(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER)
------------------------ -------------------------------------------------------
1819076 06-JUL-13 11.40.12.000000000 PM
SQL>select current_scn from v$database;
CURRENT_SCN
-----------
1819065
SCNはデータベースにどこにでもあります。よくある制御ファイル、データファイルヘッダ、ログファイルなどはSCNを記録しています。コントロールファイル中
SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
------------------
1809219
SQL> select name,checkpoint_change#,last_change# from v$datafile;
NAME CHECKPOINT_CHANGE# LAST_CHANGE#
--------------------------------------------- ------------------ ------------
+DATA/orcl/datafile/system.256.817343229 1809219
+DATA/orcl/datafile/sysaux.257.817343231 1809219
+DATA/orcl/datafile/undotbs1.258.817343231 1809219
+DATA/orcl/datafile/users.259.817343231 1809219
+DATA/orcl/datafile/example.265.817343543 1809219
データファイルヘッダSQL> select checkpoint_change# from v$datafile_header;
CHECKPOINT_CHANGE#
------------------
1809219
1809219
1809219
1809219
1809219
ログファイルでredo log fileのセットがいっぱいになると、自動的に次のグループのredo logfileに切り替わります。前のグループのredo logsのHigh SCNは次のグループredo logsのLow SCNであり、CurrentログファイルのHigh SCNは無限大である。
SQL> select group#,sequence#,status,first_change#,next_change# from v$log;
GROUP# SEQUENCE# STATUS FIRST_CHANGE# NEXT_CHANGE#
---------- ---------- ---------------- ------------- ------------------
1 34 INACTIVE 1746572 1770739
2 35 INACTIVE 1770739 1808596
3 36 CURRENT 1808596 281474976710655
インスタンスクラッシュの回復:OracleはOracleデータベースで制御ファイルにより以下の検証を行いました。
データベースのOPENが正常に動作している間、システムSCN、ファイルSCNとデータファイルヘッダの開始SCNは同じであり、かつ(大きいかまたは)ACTIVE/CURRENTログファイルの最小FIRST SCNに等しいが、ファイル終了SCNはNULL(無限大)である。
データベースが正常にクローズされている場合、Oracleは、完全チェックポイントによって、ブザーcacheのすべてのキャッシュをディスクに書き込み、同時にデータベースを閉じる時点によって制御ファイルのシステムSCN、ファイルSCN、SCNを終了し、データファイルのヘッダの開始SCNを更新し、SCNは全部一致しています。LRBAポインタはon disk RBAを指しています。
データベースが正常にクローズされていない(崩壊/電源がオフされている)場合、Oracleは制御ファイルに検出されたシステムSCN、ファイルSCN、およびデータファイルヘッダの開始SCNを一致させるが、SCNがNULLで終了すると、制御ファイルに記録されたLRBAアドレス(前転開始点)とon disk RBA(前転端点)に従って、インスタンス崩壊回復に参加する必要がある。アドレスは、対応するログ項目を探して、インスタンスのクラッシュを回復して、最終的には、データベースのオープンを行うことができます。
インスタンス回復の詳細プロセス:
また、undoの生成もRedo logsを記録するため、Redoによって、バックバックバックバックする際に必要なundo情報が再生成されます。
システムSCN、ファイルSCN、終了SCN、およびデータファイルヘッダの開始SCNは等しく、かつ(以上または)ACTIVE/CURRENTログファイルの最小FIRST SCNに等しい。
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 459304960 bytes
Fixed Size 2214336 bytes
Variable Size 289408576 bytes
Database Buffers 159383552 bytes
Redo Buffers 8298496 bytes
Database mounted.
SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
------------------
1822573
SQL> select name,checkpoint_change#,last_change# from v$datafile;
NAME CHECKPOINT_CHANGE# LAST_CHANGE#
--------------------------------------------- ------------------ ------------
+DATA/orcl/datafile/system.256.817343229 1822573 1822573
+DATA/orcl/datafile/sysaux.257.817343231 1822573 1822573
+DATA/orcl/datafile/undotbs1.258.817343231 1822573 1822573
+DATA/orcl/datafile/users.259.817343231 1822573 1822573
+DATA/orcl/datafile/example.265.817343543 1822573 1822573
SQL> select name,checkpoint_change# from v$datafile_header;
NAME CHECKPOINT_CHANGE#
--------------------------------------------- ------------------
+DATA/orcl/datafile/system.256.817343229 1822573
+DATA/orcl/datafile/sysaux.257.817343231 1822573
+DATA/orcl/datafile/undotbs1.258.817343231 1822573
+DATA/orcl/datafile/users.259.817343231 1822573
+DATA/orcl/datafile/example.265.817343543 1822573
SQL> select group#,sequence#,status,first_change#,next_change# from v$log;
GROUP# SEQUENCE# STATUS FIRST_CHANGE# NEXT_CHANGE#
---------- ---------- ---------------- ------------- ------------------
1 37 CURRENT 1822207 281474976710655
3 36 INACTIVE 1808596 1822207
2 35 INACTIVE 1770739 1808596
通常のオープンデータベースの場合:ファイル終了SCNはNULLです(無限大)
SQL> alter database open;
Database altered.
SQL> select name,checkpoint_change#,last_change# from v$datafile;
NAME CHECKPOINT_CHANGE# LAST_CHANGE#
--------------------------------------------- ------------------ ------------
+DATA/orcl/datafile/system.256.817343229 1822576
+DATA/orcl/datafile/sysaux.257.817343231 1822576
+DATA/orcl/datafile/undotbs1.258.817343231 1822576
+DATA/orcl/datafile/users.259.817343231 1822576
+DATA/orcl/datafile/example.265.817343543 1822576
異常シャットダウン(例クラッシュ)の場合:ファイル終了SCNはまだNULLです(無限大)
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 459304960 bytes
Fixed Size 2214336 bytes
Variable Size 289408576 bytes
Database Buffers 159383552 bytes
Redo Buffers 8298496 bytes
Database mounted.
SQL> select name,checkpoint_change#,last_change# from v$datafile;
NAME CHECKPOINT_CHANGE# LAST_CHANGE#
--------------------------------------------- ------------------ ------------
+DATA/orcl/datafile/system.256.817343229 1822576
+DATA/orcl/datafile/sysaux.257.817343231 1822576
+DATA/orcl/datafile/undotbs1.258.817343231 1822576
+DATA/orcl/datafile/users.259.817343231 1822576
+DATA/orcl/datafile/example.265.817343543 1822576
起動例はインスタンスの回復を行います。SQL> alter database open;
Database altered.
$ tailf /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log
Sun Jul 07 00:10:07 2013
alter database open
Beginning crash recovery of 1 threads
parallel recovery started with 3 processes
Started redo scan
Completed redo scan
read 192 KB redo, 87 data blocks need recovery
Started redo application at
Thread 1: logseq 37, block 533
Recovery of Online Redo Log: Thread 1 Group 1 Seq 37 Reading mem 0
Mem# 0: +DATA/orcl/onlinelog/group_1.261.817343457
Mem# 1: +FRA/orcl/onlinelog/group_1.257.817343463
Completed redo application of 0.15MB
Completed crash recovery at
Thread 1: logseq 37, block 918, scn 1843004
87 data blocks read, 87 data blocks written, 192 redo k-bytes read
Sun Jul 07 00:10:13 2013
Thread 1 advanced to log sequence 38 (thread open)
Thread 1 opened at log sequence 38
Current log# 2 seq# 38 mem# 0: +DATA/orcl/onlinelog/group_2.262.817343467
Current log# 2 seq# 38 mem# 1: +FRA/orcl/onlinelog/group_2.258.817343473
Successful open of redo thread 1
Sun Jul 07 00:10:14 2013
SMON: enabling cache recovery
Successfully onlined Undo Tablespace 2.
Verifying file header compatibility for 11g tablespace encryption..
Verifying 11g file header compatibility for tablespace encryption completed
SMON: enabling tx recovery
Database Characterset is AL32UTF8
No Resource Manager plan active
Sun Jul 07 00:10:17 2013
replication_dependency_tracking turned off (no async multimaster replication found)
Starting background process QMNC
Sun Jul 07 00:10:21 2013
QMNC started with pid=28, OS id=7140
Sun Jul 07 00:10:31 2013
Completed: alter database open