基本情報技術者のデータベースのまとめPart2です。
今回は、SQL、トランザクション管理、DBの障害管理についてまとめていきます。
SQL
SQLは、データベース管理システムに命令するために使用する言語のことです。
詳しいSQLコマンドは前にまとめたので、こちらを参考にしてください。
トランザクション管理
トランザクション
トランザクションとは、一連の処理のまとまりのことです。データベースでは、このトランザクション単位で更新の処理を管理していきます。
排他制御
排他制御は、複数のプロセスがアクセスできる資源に対して、複数のプロセスからの同時アクセスがあったときに、ある一つのプロセスのみにその資源にアクセスを可能にして、他のプロセスにはアクセスできないようにする制御のことです。例としては、一人があるファイルの編集をしていたら、同時に同じファイルを他の人が編集できないようにする制御のことです。
この排他制御での、データをロックする方法としては、共有ロックと専有ロックというものがあります。
- 共有ロック:他のユーザは、データの読み取りはできるが、書くことはできない。
- 専有ロック:他のユーザは、データを読み取ることも書き込むこともできない。
また、ロック機能では、複数のトランザクションがお互いにデータをロックし合って、双方がロック解除を待つ状態になり、処理が進まないということがあります。このことを、デッドロックと言います。デッドロックになってしまったら、どちらかのトランザクションを強制終了する必要があります。
ACID特性
データベース管理システムでは、トランザクション処理に対して、4つの特性が必要です。それをACID特性と呼びます。
- A:原子性(Atomicity):トランザクション処理では、全て実行されるか、全て実行されないかのどちらかで終了すること。
- C:一貫性(Consistency):データベースの内容に矛盾がないこと。
- I:隔離性(Isolation):複数のトランザクションを同時に実行した時の結果と、順番に実行した時の結果が一致するようにすること。
- D:耐久性(Durability):正常に終了したトランザクションの結果は、障害が発生しても消失しないこと。
ストアドプロシージャ
ストアドプロシージャとはデータベースを処理するSQL文の一連の処理の手順を一つのプログラムにまとめて、データベース管理システム側があらかじめ所持しておくこと。メリットとしては、クライアントからいちいちSQL文を流す必要がなくなるので、ネットワークの負荷が減ることや、処理速度が向上することが挙げられます。
DBの障害管理
データベースの障害が起きたとき、バックアップファイル、ジャーナルファイルを使い、ロールバックやロールフォワードという処理を行い、データベースの復旧をします。
バックアップファイルとジャーナルファイル
データベースに障害が起きたときのために、データベースは定期的にバックアップファイルを作ります。バックアップファイルにはその時のデータベースの内容を丸々コピーされています。
また、バックアップを取ってから、次のバックアップを取るまでの間のデータベースの更新を記録するために、データベースはジャーナルファイルを作ります。更新前の状態の更新前ジャーナルと、更新後の状態の更新後ジャーナルを更新するごとに記録して、データベースの更新履歴を記録するようにしています。
これらのファイルをもとに、データベースの復旧をしていきます。
コミットとロールバック
データベースの更新は、トランザクション単位で行われています。これは、トランザクション内の一連の更新の処理を全て反映するか、全て取り消すかのどちらかしかないということです。
コミットとは、トランザクション処理が問題なく全て完了した時、最後にその更新を確定させ、データベースに更新内容を反映させることです。
一方、トランザクション処理を行なっている時に、何かしらの障害が発生して、更新が失敗した時にそれまでの処理を全て無かったことにして、トランザクション処理が行われる前の状態に戻すことをロールバックと言います。このときには、更新前ジャーナルを使い、更新前の状態を取得して、元の状態に戻します。
ロールフォワード
トランザクションの処理中ではなく、突然障害が発生し、データベースが故障した時、障害が起こる前の状態まで戻すことをロールフォワードと言います。この時には、定期的に取ってあるバックアップファイルと、そのバックアップファイルからどのように更新されたかの履歴がある更新後ジャーナルを用いて、元の状態に戻します。
以上が、データベースのSQL、トランザクション管理、DBの障害管理のまとめでした。