兵庫WEB制作.com

【シリーズ:セキュリティ】テクノロジ – トランザクション処理(前編)

2018年11月1日

データベースのデータが失われたり、改ざんされたりといったことがないよう、適切な管理が欠かせません。

また、性能を向上させるための工夫も行います。

情報セキュリティ - テクノロジ

トランザクション管理

分けることのできない一連の処理単位を、トランザクションといいます。

銀行を例にトランザクションについて確認します。

スミスさんの口座から、メアリーさんの口座にお金を振り込む場合、次のような一連の処理が発生します。

スミスさんの口座残高を減らす

メアリーさんの口座残高を増やす

この一連の処理でを途中で終わらせてしまうことはいけないので、二つの処理をまとめてトランザクションとします。

そのため、トランザクションには技術的に満たすべき4つの性質があり、それをACID特性といいます。

ACID特性は次の4つがあります。

1.原子性(ATOMICITY)
トランザクションは、完全に終わる(コミット)、もしくは元に戻す(ロールバック)のどちらかでなければいけません。

2.一貫性(CONSISTENCY)
トランザクションで処理されるデータは、実行前と後で整合性をもち、一貫したデータを確保しなければいけません。

3.独立性(ISOLATION)
トランザクションAで変更中のデータを、トランザクションBで処理してはいけません。

4.耐久性(DURABILITY)
いったんコミットしたら、そのデータは障害時にも回復できなければいけません。

トランザクション管理では、これらの性質を満たすために排他制御し、障害回復機能をもちます。

排他制御

2つのトランザクションを同時に実行して、同じデータを更新してしまい、データに矛盾が発生することがあります。

それを防ぐため、排他制御(同時実行制御)を行い、一度に一つのトランザクションしかデータの更新が行えないようにする必要があります。

その方法にロックがあります。

参照、更新するデータにロックをかけて、使用が終わったときにロックを解除します。

ロックにも、以下のような種類があります。

1.共有ロック/占有ロック
データを参照するだけの場合、複数のトランザクションで同時に実行しても問題はありません。そのため、共有ロックをかけて、データの参照は自由に行えるようにします。
データを更新する場合、ほかのトランザクションに見えないように占有ロック(専用・排他ロック)をかけ、参照も不可能にします。

2.デッドロック
プロレス技に見間違えそうになった人もいるかもしれませんが、これは2つのトランザクションで複数のデータを参照するとき、ロックのために互いのデータが使用可能になるのを待ち続け、互いに動けない状態になることをデッドロックといいます。

トランザクション デッドロック

デッドロックが起こらないようにするためには、複数のトランザクションにおいてデータの呼び出し順序を同じにする方法が効果的です。

3.2相ロック
複数のテーブルにロックをかける時、かけたりはずしたりを頻繁にしてしまうのではなく、ロックをかける時はかけ続け(単調増加)、解除する時はずっと外した状態(単調減少)という考え方です。データベースの矛盾が起こりにくくなります。

障害回復処理

データベースの障害には、次の3つがあります。

・トランザクション障害
・ソフトウェア(電源)障害
・ハードウェア(媒体)障害

このうち、デッドロックのようなトランザクションに不具合が起こるトランザクション障害では、DBMSは正常に動いているため、DBMSでロールバック命令を実行するなどで対処できます。

また、ハードウェア障害の場合はハードディスク内のデータが損傷しているので、バックアップを用いて復元します。

また、データベースの内容を複製して別のデータベースに保存するレプリケーションを利用することもできます。

ただし、バックアップ後に更新されたデータやソフトウェア障害時のデータ復元には、ログファイルが使われます。

– –

【ホームページの制作・更新・運用】お困りのことがあればご相談ください

カテゴリ

最新コラム

Facebook TWITTER LINE