LoginSignup
1
4

More than 5 years have passed since last update.

シーケンスとData Pump (Oracle Database 12c Release 2) を試す

Posted at

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を上書きすることはできないようなので、既存のオブジェクトを削除してインポートする必要がありそうです。

1
4
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
1
4