3日、ANA(全日本空輸)で国内線全便の予約・販売・搭乗手続きができなくなるというシステム障害が起こった。この影響で同日の国内線55便が欠航、153便が30分以上の遅延となったが、データベース管理システム(DBMS)のエラーの原因となったバグ(プログラムの欠陥・不具合)のパッチ(修正プログラム)がリリースされていたにもかかわらず、ANAがそれを適用していなかったことが関心を集めている。
ANAが7日に発表した障害の原因調査報告によれば、国内線旅客システム「エイブル」から社内で利用されている予約管理支援システムへデータを抽出する際にエラーが発生し、データベース(DB)がフリーズ。エイブルはシステムの冗長性の観点から同一構成の「A系」と「B系」の2系統からなり、さらに各系統内ではDB1とDB2が用意されデータの同期がとられている。今回、A系のDB1がエラーによりフリーズしたことで、DB2で処理待ちが発生し高負荷化状態となり、2つのDBが停止。B系へ切り替えて復旧に至った。
「いわゆる『DBが落ちる』というシステム障害としては重いもの。2つあるDBの一方がダンマリになり、もう一方のDBに処理待ちが発生してそちらも落ちるというのは典型的なパターン。今回はDBの再起動をかけたがダメで、待機していた別系統に切り替え、不具合発生から55分程度で復旧したということなので、DB障害にしては迅速な対応をみせたといえる」(IT企業SE)
障害の直接の原因となったのは、「エイブル」から社内の予約管理支援システムへのデータ抽出時のエラーとみられる。ANAはデータ抽出方式について、これまでの複数のクエリ(実行命令)を同時に並列処理する方式から、1つずつ処理する「直列処理」に変更することで再発防止につなげるとしている。7日付「日経XTECH」記事によれば、当該DBMSではクエリの並列処理を行うとまれにエラーが発生するバグが過去に見つかっており、18年にパッチがリリース済みだったものの、ANAはそのパッチを適用していなかったという。これを受け、パッチを未適用だったことに疑問の声があがる一方、SNS上では以下のような声もみられる。
<パッチ当てるのもリスクだもんな かわいそう>(原文ママ、以下同)
<いま安定稼働してるなら、支障が出るまでパッチなんて当てたくないよね>
<パッチあてる事で逆に不具合出るケースもある>
<パッチ当てだって、テストしたりして精査しなきゃならんから大変>
<今まで問題おきてなきゃ見送る判断もあり>
<ウチのOracleもパッチ当ててないわ テストする余裕が無い>
<パッチ当てなくても問題無く動いてるからヨシッ! よくある現場猫案件>
パッチ適用を見送る判断を下すケースも
企業の重要システムなどにおいて、リリースされているパッチを適用しないという判断がなされるケースは珍しくはないのか。また、パッチを適用する・しないの判断は、どのような基準でなされるのか。ITジャーナリストの山口健太氏はいう。
「パッチが提供されるのは修正すべき問題が見つかったときなので、基本的には速やかに適用すべきです。しかし問題を修正することでシステムの挙動が変わる場合、他のシステムへの影響を考慮する必要があります。最近は個人のスマホでもOSアップデートが出た直後は適用をためらう人がいます。機能やセキュリティの強化が期待できる半面、思わぬ不具合が潜んでいる可能性があるためです。
企業が運用するシステムの場合、外部からのアクセスを受け付ける部分は常に最新の状態とするのが一般的です。しかし内部で動いているものについては、問題が起きない限りはパッチの適用を見送る判断を下すことがあります」
今回のANAの障害は、パッチが適用されていれば発生しなかった可能性はあるのか。
「原因として説明されているのは、DBに対して同時に複数の要求を送るとまれにエラーが発生するという重大な問題です。もしパッチを適用していれば、今回のシステム障害を避けられた可能性はあります。しかしDBの根幹部分の挙動が変わることで、安定して動いていた別の機能に不具合が出る恐れがあります。動作検証のためにはシステム全体を長時間止める必要がありますが、飛行機は年中無休で飛んでいるため困難を極めます。
当該エラーの発生確率が十分に低く、万が一発生した場合でも予備のシステムでカバーできるとの判断からパッチの適用を見送ったのでしょう。しかし昨今の旅行再開や新年度といった要因が重なり、想定を超える事態に陥った印象を受けます」
(文=Business Journal編集部、協力=山口健太/ITジャーナリスト)