こんにちは。ERPパッケージシステム導入コンサルタントのafroriansymです。勤怠管理システムは勤怠締日の前後でトラブルが起きることがままあります。
そんな時、早急に問題解決するためには、DB作業(トラブルの原因となっている、データベースのデータ修正作業など)もやむを得ない、というケースがあります。
私の担当する某システムは、DBがOracleですので、本記事に記載するようなパターンでの作業を基本動作としてたしなみます。
というわけで今回は、システム導入コンサルタントや、DBエンジニア向けの記事です。
なお、本記事に記載されるDBのテーブル名やカラム名などは、フィクションです。
選択⇒バックアップ(対象レコードのみ)⇒アップデート⇒完了
DB上の1データ(1レコード~数百レコード)に対する作業では、以下のように対応します。
1.修正したいデータの選択
select * from KINTAI where kinmu_date where ‘2018/01/01’ and ‘2018/01/31’
(勤務実績が保存されているKINTAIテーブルを、勤務日であるkinmu_dateが2018年1月1日~31日の間で絞り込む)
2.バックアップ
先に絞り込んだ1.のデータを、DBツールなどでCSVファイルで出力する。
(件数がもし多い場合は、oracleの表領域を確認してデータに余裕があるかを確認したうえでcreate文を利用し、テーブルとしてDB内にバックアップする)
3.アップデートする
update KINTAI set syonin_flg = 0 where kinmu_date where ‘2018/01/01’ and ‘2018/01/31’
(KINTAIテーブルの2018年1月1日~31日までのデータの、承認区分syonin_flg(1日毎の勤怠を上長が承認したかを示すフラグ)を0に更新する。0は、勤怠を未提出の状態。)
以上で作業完了。
バックアップ(テーブルごと)⇒データ退避(一時削除)⇒データ復旧
もちろん、数千~数万レコードを超えるレベルになってくると、テーブルごとバックアップをとります。データ退避(データの一時的な削除)を例にとりますと、以下のような作業手順になります。
1.バックアップ(テーブルごと)
create table WORK_KINTAI_20180215 as select * from KINTAI where kinmu_date where ‘2018/01/01’ and ‘2018/01/31’
(勤務実績が保存されているKINTAIテーブルを、勤務日であるkinmu_dateが2018年1月1日~31日の間のデータを、WORK_KINTAI_20180215というテーブル名でバックアップする。DB内にテーブルごと保存するので、DBの容量、Oracle表領域について別途作業前後にチェックしておくことを推奨します)
2.データ退避(一時削除)
delete from KINTAI where kinmu_date where ‘2018/01/01’ and ‘2018/01/31’
(勤務実績が保存されているKINTAIテーブルを、勤務日であるkinmu_dateが2018年1月1日~31日の間のデータを削除します)
3.データ復旧
insert into KINTAI select * from WORK_KINTAI_20180215
(WORK_KINTAI_20180215テーブルのデータをすべて、KINTAIテーブルへ挿入する。これにより、1.バックアップ前の状態に、KINTAIテーブルは戻ります。)
とにもかくにも、バックアップをとることが最も大事です。お客様のデータを損失するようなトラブルはあってはならないことですので。
蛇足ですが、バックアップテーブルはドロップしておきましょう。不要になったら、DBの空き領域にごみが残っている状態になるわけですから、もったいないです。特に残しておく必要がなければ、きれいにしておきましょう。
drop WORK_KINTAI_20180215
(WORK_KINTAI_20180215テーブルを消滅させます)
まとめ
以下の2点を大切に。
1.作業手順の例のように、必ずバックアップはとりましょう。
2.作業手順をあらかじめテキストファイルにでも記載しておきましょう。
(何か作業ミスなどが発生した際にそなえて。どこで失敗したかなど気づきやすいため、復旧までの余計な調査が不要になる)
このようにDB作業を行っていて思うのですが、システム開発にしろ、事務業務にしろ、どのような手順で作業を実施するのかをおさえておくことが大切です。
後戻りができず修正できず、失敗をとりもどせない状態にならぬようあらかじめ防ぐことを考える。これを実践した結果として生産性を上げることにつながるかもしれません。
参考図書: SQLの絵本
私自身が初学者であった時代(もう10年ほど前になります)に、非常にわかりやすかった本です。今はもうもっと面白くかつわかりやすい本があるのではと思いますが、ついでに紹介です。
以上。
コメント