そのデータベース壊せますか? そして直せますか?データベースエンジニアへの道(6)(3/4 ページ)

» 2006年09月27日 00時00分 公開
[吉田知史アクセンチュア・テクノロジー・ソリューションズ]

論理障害 (2)テーブル間整合性異常

障害の状況と原因

 データベース上のデータを利用する際には、商品マスタテーブルと販売トランザクションテーブルのように、テーブル間のデータを連携させて利用することがほとんどです。このとき、販売トランザクションテーブルには商品Aを販売したトランザクションデータがあるのに、商品マスタテーブルには商品Aのデータが存在しないといった、テーブル間の整合性が取れなくなる状況も論理障害の1つです。

 このようなテーブル間の整合性異常は、大量データを送受信するシステム間インターフェイス処理で発生すると影響範囲が非常に大きくなります。例えば、商品マスタと販売トランザクションを別々のシステムからインターフェイスしているシステムがあったとき、何らかの原因で商品マスタデータが到着していないのにトランザクションデータだけを受信し登録してしまった場合は、大量に整合性異常が発生します。

障害の予防

 テーブル間の整合性異常は、データベースの持つ制約の1つである参照整合性制約を設定することで簡単に予防することができます。ただ、身近なデータベースをのぞいて見ると、参照整合性制約が設定されているデータベースはほとんど見掛けません。これには2つの理由があります。

理由1 パフォーマンス低下

 データベースにはさまざまな制約を設定できますが、制約を設定すると少なからずパフォーマンスが低下します。特に参照整合性制約は、あるデータを登録する際に対応するデータが参照先のテーブルに存在するかどうかを逐一チェックするため、大量データの処理において大幅にパフォーマンスが低下します。

理由2 メンテナビリティの低下

 参照整合性制約の設定されたテーブルは必ずセットで更新する必要がありますが、システム間インターフェイスで渡されるデータはテーブル単位で送受信されることが多いため、参照整合性制約が設定されているとテーブル単体での一括登録や一括削除といった大量データ処理が行いにくくなります。

 テーブル間に参照整合性制約を設定することが、パフォーマンスやメンテナビリティの点からできない場合には、アプリケーション側でデータ登録時に最低限必要な部分のみチェックを行うのが一般的です。また、夜間バッチなどで定期的に整合性チェックを実施することで、テーブル間のデータ整合性異常の早期発見が可能になります。

Point

テーブル間整合性異常を予防するには、

  • テーブル間に参照整合性制約を設定する
  • パフォーマンスとメンテナビリティの低下が許容できない場合は、アプリケーションで最低限必要な部分のみに同等な処理を実装する

論理障害 (3)データ消失

障害の状況と原因

 論理障害の中で発見が遅れる障害の1つにデータ消失があります。障害状況としては、入力したはずのデータが検索できなかったり、以前参照していたデータが見られなくなるというもので、データ値異常に似ていますが、ここではデータの値の妥当性ではなく、データの存在の有無が問題となります。データの存在有無の正誤を判断するのは非常に困難です。

 例えば、3年前のデータを表示したところ前年比が表示されず、前年比を算出するのに必要な4年前のデータは削除プログラムがテーブルから削除していた、ということが運用開始数年後に発覚したというケースもあります。

障害の予防

 データ消失を予防するには、データ値異常と同様にフールプルーフの実装が効果的ですが、削除機能が提供されている以上、誤削除は発生します。このためデータ消失が起こってしまったときの調査や復旧を容易にするために、データ操作に対する詳細なログを記録したり、過去のデータを復元できるようにバックアップの長期保存を検討しておく必要があります。

Point

データ消失を予防するには、

  • データ値異常と同様に、フールプルーフを実装する
  • 対応を容易にするには、ログの記録とバックアップの長期保存を実施する

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。