kagamihogeの日記

kagamihogeの日記です。

データ移行時のオートナンバーに苦しんだ

先日、社内で使われてる DB を別マシンの DB にデータ移行してくれ、と頼まれた。DB 同じだしバージョンも同じだしテーブル数も少ないんで鼻歌交じりで終わるだろ、と思ってたら意外に難儀な作業だった。

とりあえず DB 付属のツールでばーっとコピーすりゃ終わるだろ、と思ったらなんかエラーが出て失敗。データの整合性がどうの、とか言われる。なんじゃそりゃ、と思いつつ、じゃあ主キーとか制約とか外したらどうなる?とやってみると・・・これもダメ。

次の作戦。俺は DB 関連技術に弱いのは分かってるんで今回は付属のツール使うのは諦める。代わりに、移行元データを SELECT → 移行先に INSRET するというその場しのぎプログラムで乗り切ることにした。

結果。データコピーは無事完了・・・したのだが、一部のテーブルの参照がオカシイ。いわゆる売上-売上明細の関係がズレている。

何事かと思い、ズレてるテーブルの移行元と移行先のデータを見比べてみる・・・と、移行元データの主キーは 1,3,4,5,9,10・・・とたまーに飛び飛びで、移行先データは 1,2,3,4,5・・・とキッチリ連番。

これってもしかして・・・と思ったら主キーにオートナンバーが。そういやぁ INSERT 文を書くときに主キーの値入れてなかったなーとか今ごろ気付く俺。・・・まぁとにかく、こいつを外部キーとして持ってるからズレるんだなぁ・・・と納得。

んで、コレをスマートに解決する案は思いつかなかった。なので、欠番してるとこはダミーデータを INSERT → あとでその番号を DELETE という力技で辻褄合わせ。

オートナンバーって便利だけど、運用に入ったあとのこと考えるとビミョーなのかもなぁ・・・とビミョーな疲労&達成感と共に思いました。