oracle导出序列的几种办法
方法一:
-
select 'create sequence ' ||sequence_name||
-
' minvalue ' ||min_value||
-
' maxvalue ' ||max_value||
-
' start with ' ||last_number||
-
' increment by ' ||increment_by||
-
( case when cache_size= 0 then ' nocache' else ' cache ' ||cache_size end) || ';'
-
from dba_sequences where sequence_owner= 'JXDB' ;-- JXDB貌似要大写才行
执行此操作后会生成创建序列的语句
方法二:
select dbms_metadata.get_ddl('SEQUENCE',u.object_name) from user_objects u where object_type='SEQUENCE'
方法三:
用plsql,直接用鼠标操作,右边对象窗口,找到Sequences,在要导出的序列名称上右键--查看,然后点击右下角的查看sql,即可查看该序列的创建sql,然后复制即可
实验:Oracle数据泵导出导入之序列问题
注:本文来源于《实验:Oracle数据泵导出导入之序列问题》
使用数据泵expdp导出1个schema,有个表主键是触发器自增的id,导入测试库测试时,发现表里的数据比自增序列的值要大。导致插入数据报错。
最终结论是:
由于数据库先进行序列导出,然后再进行表数据导出。然后在导出的过程中,该表一直有插入操作,最终导致了这种差异。
解决方法:
重建触发器中的序列,让序列的开始值为表主键最大值+1。
下面我构造实验完整演示下这种场景。
- 3.进行数据泵导出操作
--重新创建序列 drop sequence book2_seq; create sequence book2_seq start with 506 increment by 1;至此,整个实验完成。
学问:纸上得来终觉浅,绝知此事要躬行
为事:工欲善其事,必先利其器。
转载请标注出处!
















