今天同事提出了一个问题:
使用数据泵expdp导出1个schema,有个表主键是触发器自增的id,导入测试库测试时,发现表里的数据比自增序列的值要大。导致插入数据报错。
最终结论是:
由于数据库先进行序列导出,然后再进行表数据导出。然后在导出的过程中,该表一直有插入操作,最终导致了这种差异。
解决方法:
重建触发器中的序列,让序列的开始值为表主键最大值+1。

下面我构造实验完整演示下这种场景。

1.准备测试环境

需要建立测试表,序列,触发器和模拟业务插入数据的存储过程。
以下是实际的创建语句:

--在测试用户jingyu下创建测试表book2drop table book2 purge;create table book2(       
   bookId number(10) primary key,   
   name varchar2(20)         
); 

--创建序列  drop sequence book2_seq;    
create sequence book2_seq start with 1 increment by 1;    
  
--创建触发器      create or replace trigger book2_trigger &nb