👨‍🚒

「アッッ!本番DBのデータを全部更新しちゃいました!」を防ぐ5つの考え

2022/10/19に公開

どうも、更新してはいけないデータを更新しちゃったYumaです。

実は先日、業務内でやらかしてしまいました。
具体的には書きませんが、簡単に説明すると...
データの更新を行う際、where句を付け忘れて全てのデータを更新してしまいました。

やってしまった...それもローカルではなくステージング環境
手に汗が滲み、生まれて初めて頭が真っ白になりました。
夢ならばどれほど良かったでしょう...って考えてる暇もない、とにかくどうしよう...
生きた心地がしませんでした。

その後、マネージャーに相談しベテランエンジニアの方に助けていただき、最終的にデータは全て復旧しました。

データは復旧しましたが、今後一生同じミスをしたくない。
そこで、ステージング・本番DBで作業する際にやっておけば良かったこと これから実践することを忘備録として記事にします。

バックアップはBestFriend

ローカル以外でCRUD操作を行う場合は必ずバックアップを取る

もう一度
必ずバックアップを取る

バックアップを取っているとミスをした場合、すぐに復旧作業を行えます。
ミスをしないことが一番ですが、万が一ミスした場合もバックアップを取っていれば安心です。

ステージング・本番DBで作業する前はバックアップを取っておきましょう。

トランザクションは息をするように

呼吸と同じ、息をするようにトランザクションを張る。

全てにトランザクションを張る必要はないかもしれませんが、
データを追加するINSERT
データを更新するUPDATE
データを削除するDELETE
の三つはトランザクション必須です。

特にUPDATEDELETE
トランザクションを張っていると万が一ミスしてもCOMMITしなければ大丈夫です。

以下の流れを覚えておくと安全です。

-- BEGIN;でトランザクションを始める
BEGIN;
-- 行いたい処理を実行
処理実行
-- SELECT文を実行し、期待通りの処理になっているか確認
SELECT ~
-- 期待通りであればCOMMIT、そうでなければROLLBACK
COMMIT;

作業手順書は必須装備

ステージング・本番DBで作業を場合は作業手順書を用意する。ここでイメージしているのはお堅い手順書ではなく、作業の流れとSQL文が書かれた簡単なものです。

作業手順書を作成し、事前に先輩や上司に確認して貰えば完璧です。
後は手順書を参考にSQL文を流すだけ。

プロジェクトによっては手順書を作成する時間なんてないんだ!という場合も多いかとは思いますが、出来れば手順書を作成しておきましょう。自分を守ることができます。

僕もミスをしてしまってからは手順書作成→先輩にフィードバックもらう→手順書からコピペしてSQL文を流す流れで作業を行なっています。(先輩方々ありがとう...)

作業ログは残す

ステージング・本番で作業を行なった場合は作業ログをローカル(自分のパソコン上)などに残しておく。

必ずしも必須作業ではありませんが、やっておけば安心です。
もし同じ(似たような)作業を行う場合や作業手順書の作成の際に必ず役立ちます。

ミス後、作業ログは必ず残すようにしています。

認識は合ってる...?

そもそもの問題、実行するSQL文は本当に実行して良いのか、自分とタスクを振ってくれた先輩(上司)の認識は合っているかを確認する。

最近はリモートワークが多く文章でのやり取りも多いため、起こりうる可能性も高いです。

作業を行う前に、自分と先輩(上司)の認識が合っているか必ず確認しましょう。

まとめ

以上、同じミスをしないためやっておけば良かったこと これから実践することを5つ書きました。
ほとんど自分の忘備録のためにまとめたので、役に立つ内容があるかは分かりません。

1つでも役に立つ内容があれば嬉しいです。
痛み(ミス)を通して強くなる、戦闘民族(エンジニア)の気持ちで今日も明日もスキルアップし続けましょう。
では!

Discussion