第11話 受注誤爆、即応せよ!
※本作に登場するシステムや業務上のトラブル描写は、一般的な事例を参考にしたフィクションです。特定の企業・実在のシステムとは関係ありません。
──考えろ、考えろ……っ!
脳の芯がじりじり焼けるような感覚だった。
それでも、指先は震えず動いた。
(まずは現場を止めないと……)
「倉庫にピッキング即中断! 誰か、今すぐ電話飛ばして!」
「は、はいっ!」
受注課の若手が駆け出していく。
その間に俺は椅子へ滑り込み、システム管理画面へログイン。
パスワード入力すらもどかしい。
(まずは対象データの洗い出し……)
対象はM社。先方の発注日が一年前の2024年8月19日で、受注日は本日日付。発注種別はEDIデータのみ──そこだけ狙えばいい。
頭の中でSQL文の骨組みを必死に組み立てる。
SELECT * FROM orders
WHERE order_date = '2024-08-19'
AND customer_cd = '00111'
AND order_flg = ‘1’
AND created_date > '2025-08-20 00:00:00';
数秒後、結果がずらりと画面に並んだ。
(……1284件。全部今朝に入ってる。間違いない。)
結果をCSVファイルに出力して、リストデータを作成する。
「EDIデータ、正しいものは準備できてますか?」
返事が返ってこない。
今朝EDIデータを取り込んだ受注課の村岡さんは顔面蒼白だった。
そこに、三谷さんの声が聞こえた。
「確認したんですけど……今朝の取り込みで一緒に受注されていると思います」
「えっ」
俺は再びSQLを組み直す。
SELECT * FROM orders
WHERE created_date > '2025-08-20 00:00:00'
AND order_flg = ‘1’
AND customer_cd = '00111';
結果は2435件。──データが混在している。
「三谷さん……! ナイス!」
混在しているデータに気づいた三谷の判断は、間違いなく致命的な手戻りを防いだ。
俺はすぐに受注課の森下課長へと声を飛ばす。
「森下課長。このリストが、間違って受注されたデータです。」
そう言って、さっきCSVに出力したファイルをディスプレイに表示する。
「……はい」
「一部、一年前の過去データが混在しています。
このまま出荷に進んだら、誤出荷が発生します。倉庫は今止めている状態です。」
「……ど、どうする?」
俺は一瞬だけ息を吸った。
心の中では葛藤があった。
──本来、本番DBのDELETEは絶対にやってはいけない。
でも今は……時間がない。今この瞬間も倉庫現場の時間は進んでいる。
(後から取消処理で対応する方法もある。
でも、それじゃ現場も受注も二重三重に手間がかかる──混乱するだけだ。)
(今、売上計上前のデータをクリーンに戻せるこの瞬間が、唯一のチャンスだ──やるしかない。)
「本当はダメなんですが──緊急事態なので、
一度、今日のM社の注文データ全体をシステム側で強制削除します。」
「……それって、問題には……?」
「証跡は出力済みです。ログも残します。
あとで正式な報告は俺が責任を持って上げます。
今はまず、現場の誤出荷を防ぐことが最優先です。」
静かに、だがはっきりと伝えた。
その瞬間、課長の顔に少しだけ迷いが走る──
が、すぐに覚悟を決めたように頷いた。
「……わかりました。お願いします、真嶋さん。」
「はい。」
俺は再びキーボードに指を乗せる。
背後から、誰かの息を呑む音が聞こえた。
(これで失敗したら……全部俺の責任だ。でも──やるしかない。)
DELETE FROM orders
WHERE created_date > '2025-08-20 00:00:00'
AND order_flg = ‘1’
AND customer_cd = '00111';
(──行け。)
エンターキーを叩く瞬間、まるで時間が止まったように感じた。
だが指は、まったく震えていなかった。
《DELETE completed: 2435 rows affected》
画面に結果が表示される。
──成功した。
「削除完了です。正しいデータだけ、改めて投入しましょう。バックアップファイルからの復元作業、俺も立ち合います」
「物流に待ってもらってるんで、投入完了したらすぐ連絡しましょう。」
俺は森下課長に向き直り、はっきりと告げた。
その横で、三谷が小さく、安堵の息を漏らしている。
と、そのとき。
背後から、ユウの静かな声が聞こえた。
「……まっしー。やるじゃん」
まるで誰にも聞こえないかのような、小さな声だった。だが、俺の耳には確かに届いていた。
まっしーの活躍で、なんとか今回のトラブルは無事に収まりました。
ここからは、物語の中に出てきた用語を少しだけ解説しておきますね。
・SQL
→ データベースに対して「データを検索・追加・修正・削除」するための言語です。
今回まっしーが使っていた「SELECT(セレクト/選択)」や「DELETE(デリート/削除)」も、SQLの命令のひとつでした。
ちなみに、本来は注文と明細で分かれていることが多いのですが、わかりにくくなるのでそこは割愛しています笑
・DELETE
→ SQLで使う「データを削除する」コマンドです。
一度実行すると元に戻せないため、特に本番DBでは、しっかりと条件を絞って慎重に使う必要があります。
まっしーが入れていた order_flg や created_date などの条件は、他のデータまで誤って消してしまわないための防御策でした。
・本番DB(本番データベース)
→ 実際に会社の業務が毎日動いている「生きたデータ」が入っているデータベースのこと。
ここで間違った操作をしてしまうと、現場の業務に直接影響が出てしまいます。
なので、本番DBを直接操作する場合は、慎重な判断と証跡(記録)を残すことが求められます。
一般的には「読み取り権限」のみが付与されているケースが多く、今回のように削除や書き込み権限が与えられているのは、実はかなりレアな状況です。
・ログ(証跡)
→ 誰が・いつ・どんな操作をしたかを記録しておく仕組みです。
トラブルが起きたときや監査のときに、正しく操作が行われたか、異常がなかったかを確認するために使われます。
今回もまっしーはDELETE実行前に証跡(操作履歴)をきちんと出力してから作業に入りました。
今回はなんとか誤出荷を食い止めましたが、同じトラブルが起きないようにするのは・・・もっと難しい課題です。
次回は、そのあたりのお話もちらりと描けたら。
ぜひ、またお楽しみに。