質問: トリガーとシーケンスについて dbはoracle9i(ver9.2.0.1かな?)です。 テスト環境から本番環境にデータ移行する際に テーブルも変更を加えました。 すると変更を加えたテーブルに関連するトリガーが未コンパイル状態になってしまいました。 仕方なく、再コンパイルするとトリガーに記述のあるシーケンスの最終番号が若干ずれていました。 コンパイルすることによってずれることがあるのでしょうか? シーケンスは初期化されたわけではなく、若干ずれてるだけです。 そのシーケンスを使用して登録処理を行っているので一意制約違反がでまくりです。 どなたかアドバイスお願いします。
回答: テスト環境のデータと、本番環境のデータの同期はいつとっておられますか? テスト環境で1個のシーケンス、本番環境で1個のシーケンスを採番されておられますか? シーケンスのキャッシュ(綴りが分からない~;;)には何を指定されていますか? シーケンスは一意の番号を提供しますが、1,2,3,4・・・って順々とは限りません(機能的にはそうですが)1,2,5,6でもいい訳です、キャッシュに指定した値を予め取っておくので、動作のタイミングによって、続き番号の値にはならない事があります。 例えば本番環境でaさんがインサート文を実行した時に、キャッシュ内にはもう1~20とかまで使われる前提で採番されてる訳です。それを1~10まで使って、次にbさんがシーケンスナンバーを採番したとすると、21~30って具合になる訳です。 テスト環境と、本番環境で違うシーケンスを使ってるとしたら、番号が同じとは限りません。 キャッシュの値を両方1にしたら、出来るかもですが・・・本番環境とテスト環境の同期を確実にしたいなら、テスト環境で独自にシーケンスを採番しない方がいいと思います。