0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

データベース更新作業で気を付けること

Posted at

はじめに

本番環境のデータベースを更新するときは、特に注意を払って行いましょう。
今回は特定のログをINSERTするときの手順です。

手順

1. 手順を明確に決める

今回どのような作業をするのか、メモ書きでも良いので実行手順を明確にしておきましょう。
順番が入れ替わったり、抜け漏れが発生しないように、手順については脳のリソースを使わなくて済むように入念に整理を。

2. インスタンスなどのバックアップを取る

例えばAWSなどでサーバーを運用している場合は、インスタンスのバックアップを取得しておきましょう。
万が一破損してしまっても、インスタンスごと復帰させることができます。

3. データベースのdumpファイルを出力する

念には念を。作業する対象のデータベースのdumpも取得しておきましょう。
こちらのdumpについては、作業終了後も一定期間保存しておくと何かの時に役立ちます。

4. 環境に依存しないINSERT文を用意する

環境に依存しないとは、前提となる環境条件が一切ないことです。
どんな状況であっても、対象のテーブルにそれさえ実行すれば完了するというSQL文を用意しましょう。

例えば以下のような文を指します。

INSERT INTO example_table (user_id, user_name, user_entry_flg, user_entry_date)
VALUES
(123, 'taro', 1, '2024-10-04 00:00:00'),
(1, 'jiro', 0, '2024-10-05 00:00:00');

このINSERT文には、他テーブルからSELECTしたり、別のdumpファイルを参照したりという環境依存がありません。
要するにベタ書きをしようというわけです。

5. すぐに作業を戻せるDELETE文を用意する

今回はINSERT文の話なので、すぐに状態を戻すためにはDELETE文を用います。
こちらも環境依存の無い形で書いていきます。

DELETE FROM example_table 
WHERE (user_id, user_name, user_entry_flg, user_entry_date) IN (
    (123, 'taro', 1, '2024-10-04 00:00:00'),
    (1, 'jiro', 0, '2024-10-05 00:00:00')
);

INSERT文をそのまま利用してDELETE文にしています。
これにより、確実にINSERTした作業のみをロールバックすることができます。

6. 作業ログを取る

最後に、実行した手順ごとに作業ログを書いておきましょう。
何時何分になにをしたか、予定外の作業はしていないかを詳細に書きます。
今後の作業の手助けにもなるはずです。

まとめ

こういった作業は非常に面倒ですが、特に慣れていなかった頃は何度もバックアップに助けられました。
これから作業を控えている人へ参考になれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?