▼ 原子性/不可分性 (Atomicity)
トランザクション処理は、コミット(すべて実行される) または、ロールバック(一つも実行されない) のどちら一方の結果でなければならない。
▼ 一貫性/整合性 (Consistency)
トランザクション前後でデータの整合性が保ち、一貫したデータを確保 しなければならない。
▼ 独立性/隔離性 (Isolation)
トランザクション実行中の処理過程には、別トランザクションも含む 外部から干渉 できてはならない。
▼ 耐久性/永続性 (Durability)
一旦正常終了したトランザクションの結果は記録され、システム障害が発生しても失われず、障害発生直前の状態に復旧 できなければならない。
▼ 共有ロック
データ(レコード)参照する場合のロックで複数トランザクションで同時ロックできる。
他のトランザクションがデータの更新だけでなく参照権限までロックしないようデータ参照していることを知らせる共有するロック。
▼ 専有ロック (排他ロック)
ロック中は、他トランザクションからの更新、参照ができない状態となる。
※ レコードを更新後、コミット時に必ず一時的に専有ロックがかかる。
▼ デッドロック
トランザクション同士で互いに同じテーブルのロック解除を待ち、互いに待機状態となり、トランザクションを実行できない状態に陥ることを指す。
デッドロック は、すべてのトランザクションでテーブルの更新順を統一すれば、ほとんど回避できる。
▼ 2相ロック (ツーフェーズロック)
全トランザクションにおいて、参照や更新によらず、全てのロックが完了状態となるまでアンロックを実施しないロック制御方法。
このとき、ロックが始まってから全てのロック処理が完了するまでの状態を 単調増加、アンロックが始まってすべて解除されるまでの状態を 単調減少 という。
▼ P操作 (デクリメント)
資源をロックし、セマフォ変数S を1つ減算して、セマフォを確保する。
▼ V操作 (インクリメント)
資源をアンロックし、セマフォ変数S を1つ加算して、セマフォを解放する。
▼ トランザクション障害
メモリ不足やデッドロックに伴う強制終了などにより、トランザクションが異常終了する障害。
DBMSに異常はないため、ロールバックにより障害前の状態へ戻すことで復旧する。
▼ ソフトウェア障害 (電源要因)
ソフトウェア側の予期せぬ停止などでDBMSのデータに不整合(不具合)が起こる障害。
データ復旧には、次で触れる ログファイルによる障害復旧 で操作履歴を遡り、不整合がない状態までデータを戻すか、不整合がない状態までデータを補う形で復旧する。
▼ ハードウェア障害 (媒体要因)
ハードディスクの故障等でデータ自体が破損する障害で、日次など定期的に取られるバックアップデータから復旧する。
バックアップ後に更新されたデータについては、次で触れる ログファイルによる障害復旧 で操作履歴を遡り、不整合ない状態までデータを戻すか、本来できるはずだったデータを補う形で復旧する。
▼ ログファイルによる障害復旧対策
データベース障害に備え、データベース用のハードディスクとは別のハードディスクに 更新前データ と 更新後データ をログファイルとして常に出力し、データ復旧する際に必要となる情報を記録する。
また、トランザクションのコミット後であってもその状態をメモリ上に保持しており、ハードディスクへ書込みしていない状態(タイミング)でデータベース障害が発生するケースもある。
このようなケースでもログファイルには、コミットしたタイミングでメモリ上に保持した状態を別ハードディスクへ記録しているため、障害によるデータ損失を最小限に抑えることができる。
上記の 更新前のデータログ から既にハードディスクに書き込まれた実行中のデータをトランザクション実施前に戻す復旧を ロールバック(※) といい、更新後のデータログ からトランザクションがコミットされ、記録されるはずだったデータを追加する復旧を ロールフォワード という。
※ トランザクション管理が自動実行するロールバックと混同注意。
▼ B木インデックス (B-tree)
B木 は、予めキーを昇順などの規則で並べ、その中央値をルート(根)とし、木構造(※1) にしたデータ構造で、ルート(根)から分岐探索することで検索処理を高速化する。
このため、検索する対象範囲が決まっているBETWEEN等を用いた範囲検索に適しているが、順次処理やAND、ORのみの検索、NOT検索には、適していない。
※1 木構造については、下記の先行ページを参照。
[応用情報技術] [基礎] [5] 覚書き : データ構造:6. 木構造の分類
[応用情報技術] [基礎] [2] 覚書き : 応用数学:5. グラフ理論
▼ B+木インデックス (B+-tree)
B木 に適さない順次処理も高速化できるように木構造の最下層となるグループ(リーフ(葉)の集まり)同士の末尾と先頭をポインタでつなげ、ルート(根)から再評価をすることなく、次のグループ評価をできるようにしたデータ構造。
▼ ビットマップインデックス
テーブルの各レコードとフィールドをマトリックス的にデータ化した ビットマップ というデータ構造で、検索値が検索対象に複数存在する場合に適している。
▼ ハッシュマップインデックス
キー値からハッシュ関数(※2) で求めた値をアドレス(番地)とし、レコードの格納位置をアドレスで管理する。
検索の期待値が一意である場合に適しているがハッシュ関数結果が重複する シノニム(※2) により一意に特定できない場合があり、この場合の対策として空きアドレス(番地) にデータを格納する オープンハッシュ法 と、あふれ領域にデータを格納する ハッシュチェイン法 がある。
※2 ハッシュ関数、シノニムについては、下記の先行ページを参照。
[応用情報技術] [基礎] [6] 覚書き : アルゴリズム:3. 探索アルゴリズム