トランザクション
データ参照時に(つまりselect文実行時に)FOR UPDATE句を指定すると、対象行に専有ロックを掛け、トランザクション終了時に解放する。
[トリガ]
障害回復機能
ロールバック(UNDO)…更新前ログを利用することによって、ハードディスクのデータをトランザクションの実行前に戻す。
ロールフォワード(REDO)…更新後ログを利用することによって、ハードディスクのデータをコミット完了後の状態に進める。
分散データベース
[分散問合せ処理]
入れ子ループ法…データを1行ずつ送信。基本的にRDBMS系はこれ。
マージ結合法(ソートマージ法)…ソートした後にデータの全行を一度に送信。
セミジョイン法…結果処理はサイトごと。
[2相コミット(2PC, Two-Phase Commit)]
2相コミットを行うためには,同時に更新しようとする分散データベースの全てが更新可能かどうかを判断するためのやり取りが必要である。
主サイトは,コミットが可能であることを各データベースサイトに確認した後,コミットを発行する。
ロールバック
例: ユーザーが UPDATE をしたけど途中でエラー → そのトランザクションをなかったことに戻す。
例: バッチ処理の途中で例外発生 → その伝票分だけ全部取り消し。
ロールフォワード
例: サーバがクラッシュしてDBが落ちた。
再起動時にログを読んで「最後のコミット状態」までDBを追いつかせる。
これは ユーザーの意識と関係なくDBが自動でやる。
2相コミット(2PC)
例: 本社のOracle DBと、支店のSQL Server DBの両方に伝票を入れなければならない。
「両方成功ならコミット/片方失敗なら両方ロールバック」を保証する仕組み。
これもアプリが COMMIT; を出すと裏で勝手に動く。
表領域
テーブルの表領域の容量は、一般的に1行当たりの平均行長(バイト)×見積行数で求められる。
因みに、Oracle DBA 12cは表領域の調整も試験範囲に含んでいる。
[ページ]
DBMSがストレージとの間でデータの入出力を行う単位をページもしくはブロックという。このページという概念は午後問題においてスーパタイプとサブタイプに次ぐ重要度と言っていい。
Oracle 、Postgres 、SQL Server は 8KB がデフォルト。(数十行程度)
複数のテーブルが1つのページに混在することはない。
1データページ当たりの平均行数=ページサイズ×(1-空き領域率)÷平均行長
[インデックス ]