Oracleデータベースアーキテクチャを復習する:独学! ORACLE MASTER Gold 11g講座(1)(2/2 ページ)
ORACLE MASTER資格の上級に位置付けられる「ORACLE MASTER Gold Oracle Database 11g」。本連載では、Gold試験の頻出ポイントを解説する。確認問題付き。
更新処理の流れ
- ユーザープロセスからDML文を発行する。サーバプロセスへDML文が渡される
- サーバプロセスは共有プールにアクセスし、実行しようとするSQL文と同じSQLがないかをチェックする。あれば実行処理に入る。なければ、実行計画※を生成する
- サーバプロセスは、必要なデータがデータベース・バッファ・キャッシュ上にないかチェックする。あればそのブロックを使う。なければ、データファイルからデータブロックとUNDOブロックを読む。更新レコードに対し、行ロックを取得する。障害に備えて、REDOログエントリがREDOログバッファへ記録する。続いて、UNDOブロックに変更前データを書き、データブロックを更新する
- ユーザープロセスから、COMMIT文を発行する。サーバプロセスへCOMMIT文が渡される。LGWRはREDOログエントリをREDOログファイルに書き込む。
※実行計画:SQL文を実行する際のアクセスパスのこと。例えば、索引を使うか否かなど。
なお、COMMITで保証する書き込みは、LGWRによるREDOログエントリの書き込みです。従って、データファイルへ変更が反映されているとは限りません。もし、データファイルへ変更が反映されていない状態でインスタンス障害が発生しても、COMMITが実行されていれば、REDOログエントリによりリカバリできることが保証されます。
チェックポイント(CKPT)とDBWn
COMMITで保証される書き込みはLGWRによる書き込みですが、データファイルへの変更がいつまでたっても保証されなければ、LGWRはREDOログバッファを上書きできません。
なぜなら、「データファイルに変更が書き込まれていない=リカバリ時に必要なREDOログエントリ」であるからです。従って、データファイルの変更は定期的にデータファイルに書き込まれる必要があります。それがチェックポイント(CKPT)です。チェックポイントにより、データベース・バッファ・キャッシュ上の変更はデータファイルへの反映が保証されます。チェックポイントは次のとおりに実行されます。
- チェックポイントからDBWnへデータベース・バッファ・キャッシュ上の変更をデータファイルに書くようにシグナルが出る
- DBWnは指示されたところまでの変更をデータファイルに書く
- CKPTは、全データファイルヘッダと制御ファイルに対し、チェックポイントSCN※を書く
※SCN:SystemChangeNumberの略。SCNはトランザクションが終了すると必ず変更されるID。これにより、特定のSCNの時点でどこまでCOMMITが終了しているかが管理できる。人間でいうところの「タイムスタンプ」(時間)と同じイメージ。つまり、チェックポイントSCNとは、どこまで書き込みが終了しているかを示す情報である。
さて、Oracleアーキテクチャの復習はできましたか? 次にチェックテストを実施します。
確認問題
問題1
SQL文実行時、クライアントにSQL結果を戻すプロセスを選択しなさい。
a.ユーザープロセス
b.サーバプロセス
c.PMON
d.チェックポイント
正解:b
●解説
ユーザープロセスはSQL文を発行できます。しかし、直接インスタンスと対話して処理することはできません。インスタンスと直接対話し実際の処理を行うのはサーバプロセスです。そして得られたSQL結果を、サーバプロセスがクライアントに戻します。なお、CKPTおよびPMONのいずれもバックグラウンドプロセスであるため、クライアントと対話することはありません。
問題2
データベースを再起動したところ、起動するのに時間がかかります。原因は停止モードであることが分かりました。起動に時間がかかった原因である停止コマンドを選択しなさい。
a.SHUTDOWN NORMAL
b.SHUTDOWN TRANSACTIONAL
c.SHUTDOWN IMMEDIATE
d.SHUTDOWN ABORT
正解:d
●解説
ABORTによる停止は、インスタンス障害と同じくメモリの変更をディスクに書き込まず、停止します。メモリとディスクの同期が取れていない状態で停止しますから、次回の起動時にインスタンスリカバリが実行されるため、起動に時間がかかります。停止モードに原因があることと、起動に時間がかかるという点から、ABORTによる停止が原因であることが分かります。よって「SHUTDOWN ABORT」が正解です。
もし、停止に時間がかかるのであれば、NORMALやTRANSACTIONALによる停止が原因であると予想できます。なるべく早く再起動を行いたい場合は、IMMEDIATEを選択すべきでしょう。ただし、終了していないトランザクションは強制的にロールバックされるため、処理途中の変更は取り消されます。
著者紹介
Oracle認定講師。データベース管理コース全般を担当し、主にパフォーマンスチューニング系のコースを受け持っている。日本オラクルより、Oracle University Excellent Instructor(2007年)、Oracle University Excellent Instructor(2006年)を受賞。また、『オラクルマスター教科書Gold Oracle Database11g編』を執筆。
Copyright © ITmedia, Inc. All Rights Reserved.