SEQUENCEオブジェクトをインポートした場合のシーケンス値
Data Pumpを使ってエクスポートしたSEQUENCEオブジェクトをインポートすると、シーケンス値がキャッシュ分だけ増加されることが知られています。
移行元
SQL> CREATE SEQUENCE seq01 ;
Sequence created.
SQL> SELECT seq01.nextval FROM DUAL ;
NEXTVAL
----------
1
SQL> SELECT SEQUENCE_NAME, CACHE_SIZE FROM USER_SEQUENCES ;
SEQUENCE_NAME CACHE_SIZE
------------------------------ ----------
SEQ01 20
$ expdp SYSTEM/pass directory=data_pump_dir dumpfile=scott_seq.dmp schemas=SCOTT include=SEQUENCE
Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at Fri Jan 12 14:31:15 2018 elapsed 0 00:00:06
移行先
$ impdp SYSTEM/pass directory=data_pump_dir dumpfile=scott_seq.dmp schemas=SCOTT include=SEQUENCE
Job "SYSTEM"."SYS_IMPORT_SCHEMA_02" successfully completed at Fri Jan 12 14:32:11 2018 elapsed 0 00:00:03
SQL> SELECT seq01.nextval FROM dual ;
NEXTVAL
----------
21
既に存在するSEQUENCEをインポート
既に存在するシーケンスに対してインポートを行うと、インポート処理はエラーになります。しかし、シーケンス値が更新される事象があるようです。
移行先
SQL> SELECT seq01.nextval FROM DUAL ;
NEXTVAL
----------
1
$ impdp SYSTEM/pass directory=data_pump_dir dumpfile=scott_seq.dmp schemas=SCOTT include=SEQUENCE
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
ORA-31684: Object type SEQUENCE:"SCOTT"."SEQ01" already exists
Job "SYSTEM"."SYS_IMPORT_SCHEMA_02" completed with 1 error(s) at Fri Jan 12 14:37:35 2018 elapsed 0 00:00:04
SQL> SELECT seq01.nextval FROM DUAL ;
NEXTVAL
----------
21
SEQUENCEの上書きはできないか?
既存のSEQUENCEを自動的に削除してインポートできないか検証しました。
テーブルの場合は table_exists_actionパラメーターを使うので、SEQUENCEの移行でも指定してみます。
$ impdp SYSTEM/pass directory=data_pump_dir dumpfile=scott_seq.dmp schemas=SCOTT include=SEQUENCE table_exists_action=replace
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
ORA-31684: Object type SEQUENCE:"SCOTT"."SEQ01" already exists
Job "SYSTEM"."SYS_IMPORT_SCHEMA_02" completed with 1 error(s) at Fri Jan 12 14:43:34 2018 elapsed 0 00:00:03
上記のようにエラーが発生しています。SEQUENCEを上書きすることはできないようなので、既存のオブジェクトを削除してインポートする必要がありそうです。