全2386文字

 全日本空輸(ANA)で2023年4月3日に発生したシステム障害は、50便以上が欠航するなど利用客に大きな影響を与えた。ANAが4月7日に開いた記者会見によると、データベースに「予期せぬエラーが発生」し、「フリーズ」状態になったのが原因だという。

 エラーの発生はデータベースのバグに起因するもので、それを是正するパッチ(修正プログラム)は既に提供されていた。日経クロステックの記事によれば「同社はシステム構成上パッチ未適用でも問題ないとみて適用を見送っていた」という。

 なぜパッチは適用されなかったのかを考えてみたい。

運用で回避しきれるか

 ANAのデータベースが抱えていたバグは、パラレルクエリーに関するものだ。パラレルクエリーはSQLを並列化して実行し、照会処理のパフォーマンスを向上させる機能である。同社の資料では「複数のデータ抽出処理を並列で同時に実行することによるデータベースの偶発的なエラー」と障害状況を説明する。

パラレルクエリーが原因でデータベースがフリーズ状態に
パラレルクエリーが原因でデータベースがフリーズ状態に
(出所:ANA)
[画像のクリックで拡大表示]

 この偶発的なエラーを修正するためのパッチは2018年に提供されていたという。今回、データベースからデータ抽出を行っていたのはマーケティング部門が使用する「予約管理支援システム」で、ANAの資料によれば2018年に導入している。つまり、稼働当初からバグの存在が知られていて、パッチが当てられないまま5年近く「危うい常態」で動いてきたわけだ。

 パッチには内容や提供タイミングなどで、いくつか種類がある。市場で大きなシェアを持つOracle Databaseを例に挙げると、「個別パッチ」「集積パッチ(リリース更新パッチ)」、および「月次推奨パッチ」がある。個別パッチが個別の不具合を是正するものなのに対して、四半期ごとに提供される集積パッチはセキュリティーや重要な問題に対する是正などを含んでいる。

 こうしたパッチをユーザーは全て適用しているのだろうか。データベース運用に詳しいある識者は「不具合が致命的なものでなくパラメーター変更や特定機能の無効化といった運用回避策や個別パッチがある場合、優先度は、運用で回避 > 個別パッチ適用 > 集積パッチ適用となるケースもみられる」と話す。

 ANAもある意味、バグによる直接的被害を長年にわたって運用で回避してきたのではないか。今回は危うい常態に、何らかの異常が加わり、回避しきれなかったといえる。