ゲーマーときどきエンジニア

基本ゲーム記事を書いて、ときどき考えを発信するエンジニアのブログです!

本番データベースに更新をするとき、注意すべき5か条

こんにちは。たいら(@tairaengineer2)です。

私事ですが、先日本番データベースにデータ補正をするとき、凡ミスをしましてデータ補正をすべきではないものまで更新をしてしまうという 盛大にやらかしました (-_-;)
ガチでマジでやばかったんですが、とりあえずリカバリできて、本来のデータ補正をすることができました。

そのときの自分の失敗を大反省し、二度と繰り返さないために本番データベースに更新するとき注意すべき5か条というものを作りました。
私の失敗を踏まえて作りましたので、 具体的な内容となっています。
皆さまの本番データベースを更新するときの教訓として頂ければと思います。

f:id:Tairax:20191207165719p:plain

スポンサーリンク

 

注意すべき5か条

  1. Whereの条件文は正しいか
  2. テスト用のデータベースで実行した結果は正しいか
  3. データベースのバックアップはとったか
  4. 本番データベースに実行する前、ロールバックで実行したか
  5. もし失敗した場合、どのようにリカバリするのか

この中で最も大事なのは、【データベースのバックアップはとったか】です。
ぶっちゃけこの1つを覚えていれば、他の4つを忘れてもいいです。

それくらいバックアップをとることは大事です!!

では、5か条を詳細に書いていきます!

1:Whereの条件文は正しいか

Whereの条件は合っているかは本当に大事です。
余計なものまで登録、更新、削除しないように

  • Whereで設定する項目は正しいか
  • Whereの条件はユニークになるようになっているか

をなめるように見て確認しましょう。

自分が書いたSQLに自信が無かったり、更新するテーブルに特殊な条件があるなど不安があるなら、上司や技術力が高い人に自分の書いたSQLを確認して頂くのは良い手です。

誰かに見て頂く場合、人は選びましょう。

 

(SQLをチラッと見る)
あー、うん。まあいいんじゃない?

 

って言うやつマジでいるんで。
そういうこと言うやつに限ってもし失敗したら、手のひらひっくり返して責め立てるので。

2:テスト用のデータベースで実行した結果は正しいか

実行するSQLは、必ず更新しても良いテスト用のデータベースで実行してみましょう。
机上の空論だったら分からなかったら、実行してみるとマジで分かることあるので。
テスト用のデータベースで更新してみると

  • 文法が正しいか
  • Where文の条件は足りているか
  • 結果は望んだものになっているか

が分かります。
本番データベースで実行するSQLは、最低1回テスト用のデータベースで実行しましょう!

3:データベースのバックアップはとったか

バックアップをとるのマジで大事
さっきも書いたけど、これ以外忘れていいからこれだけは覚えておいてほしい!!!

なんでここまで強くしつこいくらい書くかと言うと、もしデータ補正に失敗した場合リカバリができないからです。
人間なのでどんなに準備してもミスする可能性はあります。
なので、ミスした場合のリカバリ手段としてバックアップは必須です。

私がデータ補正に失敗しても何とかリカバリできたのは、バックアップをしていたからです。
バックアップはマジで

SQL Serverのデータベースバックアップの方法は、下記の記事で解説していますのでご参考ください。

【SQL Server】データベースをバックアップする方法を解説します

4:本番データベースに実行する前、ロールバックで実行したか

作成したSQLをロールバックで本番データベースで実行してみましょう。
本当に望んだ結果になるか、ここで最後の確認できます。

本番データベースに実行するのは、めちゃくちゃ責任でかいです。
私は慎重に慎重を重ねても全然良いと思います。
そりゃ失敗したときはめちゃくちゃ怖いですからね。
ここがコミットする前の最後の砦です。
入念に確認しましょう。

5:もし失敗した場合、どのようにリカバリするのか

人間なので、誰しも失敗することはあります。
失敗したとき、どういうリカバリが必要なのかとイメージするだけでも心の余裕が違います。
もし本当に失敗しても、事前にイメージできているからすぐリカバリに動けます。
リカバリで考えることとして

  • 一番最初に誰に報告すべきか
  • 何をどのように更新、削除すればいいか
  • リカバリするのに時間は概算でどれくらい必要か

リカバリする手段を準備しておくのがベストですが、イメージするだけでも全然OKです。

私は失敗したときのリカバリイメージをしていなかったから、失敗したとたん頭が真っ白。
 思考力が激減してもう考えがまとまらず、キーボードを叩く指が震えました。
心臓がガチで全力疾走した後のような速さでバクバクしました。。。
同僚から

 

まず○○さんに報告。
そして更新しなくてもいいけど、更新してしまったデータを調査。
そのデータに対して、バックアップ使ってリカバリしないと

 

って超具体的な指示もらわないと、マジで動けないレベルでした。

失敗したあとどう動くのかをイメージするのマジで大事。

 

スポンサーリンク

 

まとめ:バックアップは必ず取る!

以上が先日私がやらかした失敗から考えて作った5か条でした。
まとめなのでもう1回書きます。

  1. Whereの条件文は正しいか
  2. テスト用のデータベースで実行した結果は正しいか
  3. データベースのバックアップはとったか
  4. 本番データベースに実行する前、ロールバックで実行したか
  5. もし失敗した場合、どのようにリカバリするのか

【データベースのバックアップはとったか】だけは覚えておいてください。

この記事を読んでいるあなたが、私のように本番データベースで失敗をしないことを願っております<(_ _)>