データベース上のデータを利用する際には、商品マスタテーブルと販売トランザクションテーブルのように、テーブル間のデータを連携させて利用することがほとんどです。このとき、販売トランザクションテーブルには商品Aを販売したトランザクションデータがあるのに、商品マスタテーブルには商品Aのデータが存在しないといった、テーブル間の整合性が取れなくなる状況も論理障害の1つです。
このようなテーブル間の整合性異常は、大量データを送受信するシステム間インターフェイス処理で発生すると影響範囲が非常に大きくなります。例えば、商品マスタと販売トランザクションを別々のシステムからインターフェイスしているシステムがあったとき、何らかの原因で商品マスタデータが到着していないのにトランザクションデータだけを受信し登録してしまった場合は、大量に整合性異常が発生します。
テーブル間の整合性異常は、データベースの持つ制約の1つである参照整合性制約を設定することで簡単に予防することができます。ただ、身近なデータベースをのぞいて見ると、参照整合性制約が設定されているデータベースはほとんど見掛けません。これには2つの理由があります。
データベースにはさまざまな制約を設定できますが、制約を設定すると少なからずパフォーマンスが低下します。特に参照整合性制約は、あるデータを登録する際に対応するデータが参照先のテーブルに存在するかどうかを逐一チェックするため、大量データの処理において大幅にパフォーマンスが低下します。
参照整合性制約の設定されたテーブルは必ずセットで更新する必要がありますが、システム間インターフェイスで渡されるデータはテーブル単位で送受信されることが多いため、参照整合性制約が設定されているとテーブル単体での一括登録や一括削除といった大量データ処理が行いにくくなります。
テーブル間に参照整合性制約を設定することが、パフォーマンスやメンテナビリティの点からできない場合には、アプリケーション側でデータ登録時に最低限必要な部分のみチェックを行うのが一般的です。また、夜間バッチなどで定期的に整合性チェックを実施することで、テーブル間のデータ整合性異常の早期発見が可能になります。
テーブル間整合性異常を予防するには、
論理障害の中で発見が遅れる障害の1つにデータ消失があります。障害状況としては、入力したはずのデータが検索できなかったり、以前参照していたデータが見られなくなるというもので、データ値異常に似ていますが、ここではデータの値の妥当性ではなく、データの存在の有無が問題となります。データの存在有無の正誤を判断するのは非常に困難です。
例えば、3年前のデータを表示したところ前年比が表示されず、前年比を算出するのに必要な4年前のデータは削除プログラムがテーブルから削除していた、ということが運用開始数年後に発覚したというケースもあります。
データ消失を予防するには、データ値異常と同様にフールプルーフの実装が効果的ですが、削除機能が提供されている以上、誤削除は発生します。このためデータ消失が起こってしまったときの調査や復旧を容易にするために、データ操作に対する詳細なログを記録したり、過去のデータを復元できるようにバックアップの長期保存を検討しておく必要があります。
データ消失を予防するには、
Copyright © ITmedia, Inc. All Rights Reserved.