データベースの制御
■ トランザクション。Transaction。 データベースに対する一連の操作群。 例えば、在庫数を要求し、在庫数の通知を受け、 在庫数の書き換えるまでの一連の操作を指す。 一般に、1つのトランザクションは瞬間に終わるものではない。 ■ 排他制御機能。Mutual Exclusion Mechanism。 単一のデータベースに対して、 複数のトランザクションが同時にアクセスし、処理を行った場合、 処理結果に矛盾が発生することがある。 例えば、あるトランザクションがデータを参照し、 これを元に他の操作を実行している最中に、 他のトランザクションによって当該データが書き換えられてしまう、 といったことが起こりうる。 DBMSは、こうした不整合を防がなければならない。 これを排他制御機能という。 ■ コミットとアボート。Commit / Abort。 排他制御を実現するためには、通常はレコードロック方式を採る。 すなわち、あるトランザクションがレコードを処理中は、 他のトランザクションのアクセスを禁止する。 こうして、1つのトランザクションを無事処理し、 一連のデータ操作が全て確定したものとして データベースに反映させることをコミットという。 一方、何らかのエラーが発生した場合など、 トランザクション中のデータ処理が全て無効であったとして 処理を中止することをアボートという。 ■ 直列化可能性。Serializability。 DBMSの排他制御機能により、 複数のトランザクションを同時に処理した場合でも、 順々に逐次処理を行った場合と処理結果が同じになる。 この性質を直列化可能性と呼ぶ。 ■ デッドロック。 2つのトランクザクションが、 互いが相手の占有するレコードにロック要求を出すと、 双方が相手のロック解除を待ち合わせることとなり、 処理が止まってしまう。これをデッドロックという。 いま、プログラムAが資源Xを、プログラムBが資源Yを それぞれ占有ロックしている状態を考える。 このとき、プログラムAが資源Yのロックを要求すれば、 プログラムAは当然待ち状態に入る。 この状態でさらに、プログラムBが資源Xを占用ロック要求を行うと、 両プログラムは、互いに相手の資源解放を待ち合わせて 膠着状態に入ってしまう。 この状態がデッドロックである。 ■ 障害回復機能。 データベースの処理の途中で何らかの障害が起こると、 トランザクションが意図しない形で終了し、 データベースの整合性が保たれなくなってしまう。 DBMSはこのような場合でも、 障害が起こる前のデータベースの状態を再現する機能を持っており、 これを障害回復機能という。 障害回復の方法には、 主にハードウェア障害の際に用いるロールフォワード処理と、 主にソフトウェア障害の際に用いるロールバック処理がある。 ■ ロールフォワード処理。 前進復帰処理ともいう。 ディスク装置の故障など物理的な障害が発生した場合に、 バックアップファイルの内容を起点として、 ジャーナルログファイルの情報を用いて更新を進めて、 障害発生直前の状態に戻すこと。 ■ ロールバック処理。 OSやDBMSなどシステム上の障害が発生した場合に、 処理途中のトランザクションについて、 障害発生時のデータベースの内容を起点として、 ログファイルの情報を用いてトランザクションの開始前の状態に遡り、 最初からトランザクションを実行できるようにすること。 ■ 再構成機能。 データベースを論理的に構築しなおすこと。 データベースのテーブルに新たな列(属性)を追加したりして、 論理的な構成を変更すること。 データベースのレコードに対するアクセスパスの比重が変わってきた場合に、 最適なアクセスパスになるようにする目的で行なわれる。 ■ 再編成機能。 データベースを物理的に構築しなおすこと。 主キーの順番にデータベースを引き上げ、データを全件削除した上で、 データ域の再定義を行ない、主キーの順番で再びロードする。 データベースの度重なる更新によってディスク格納領域の断片化が発生したとき、 この断片化を解消する目的で行なわれる。 ■ 参考資料 → 分散データベースの同期制御 以上。 2004/03/10 pm