专栏首页杨建荣的学习笔记关于导入导出sequence(r4笔记第11天)

关于导入导出sequence(r4笔记第11天)

sequence在平时的工作中是一个默默无闻的角色。可能创建好之后很少会去修改它,它就在默默地自增长。直到一些特殊的原因导致sequence出现问题,比如提供了一个脚本,需要使用insert语句修复一些问题, 修复的语句类似insert into test values(100,xxxxxx,xxxx); 正确的写法应该是insert into test values(test_seq.nextval,xxxxxx,xxxx); 但是测试的时候也没有发现问题,就这样部署到生产中就出现问题了。这个时候就是比较典型的sequence不一致问题,可能sequence的nextval是100,但是已经手工插入了一些100,101的数据,这样sequence递增的时候就会出现问题。 所以说sequence的问题发生时,情况还是比较严重的。 在各个环境之间导入导出数据的时候,sequence也是一个不可忽视的环节。数据的导入导出不会默认调用sequence,所以如果不能合理的处理sequence问题,就很可能影响到imp/impdp的进度,甚至导致很多数据问题。 但是在oracle中关于sequence的处理还是一个比较纠结的部分。 oracle没有显示提供工具来做sequence的导入导出,但是工具是死的,人是活的还是有一些途径来完成sequence的导入导出。 有两种主流的处理方法,一种是使用dbms_metadata来导出创建语句,另外一种是直接访问数据字典表,直接生成创建语句。 还有一种方法可以弥补以上两种方法的不足。我都一一做解释。 使用dbms_metadata导出sequence 这种方法也是比较正统的方法。在数据导出的时候可以同时导出一份sequence的脚本。 可以采用如下的脚本来实现。 set linesize 200 col create_ddl format a200 set long 9999 set pages 0 select dbms_metadata.get_ddl('SEQUENCE',u.object_name)||';' create_ddl from user_objects u where object_type='SEQUENCE' 脚本运行情况如下: SQL> select dbms_metadata.get_ddl('SEQUENCE',u.object_name)||';' create_ddl from user_objects u where object_type='SEQUENCE'; CREATE SEQUENCE "N1"."TEST_SEQ2" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 NOCACHE ORDER CYCLE ; CREATE SEQUENCE "N1"."TEST_SEQ" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 NOCACHE ORDER NOCYCLE ; 使用数据字典生成动态创建语句 可以使用user_sequences来构建动态的创建语句。 可以使用如下的脚本来实现。 set pages 0 set linesize 200 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 user_sequences ; 脚本运行情况如下: create sequence TEST_SEQ minvalue 1 maxvalue 9999999999999999999999999999 start with 1 increment by 1 nocache; create sequence TEST_SEQ2 minvalue 1 maxvalue 9999999999999999999999999999 start with 1 increment by 1 nocache;

以上两种方法如果可以访问远环境的情况下是不错的选择。 如果当我们拿到一个dump的时候,没有权限访问源环境的时候,也是可以做点工作得到sequence的语句的。这是第三种方法。 可以使用strings来解析dump文件,然后简单的过滤就能生成sequence的语句。

一般来说我们使用exp做schema级别的数据导出的时候可以看到下面的日志。默认是会导出sequence的值的。 About to export specified users ... . exporting pre-schema procedural objects and actions . exporting foreign function library names for user N1 . exporting PUBLIC type synonyms . exporting private type synonyms . exporting object type definitions for user N1 About to export N1's objects ... . exporting database links . exporting sequence numbers . exporting cluster definitions . about to export N1's tables via Conventional Path ... 我们可以尝试解析dump文件,使用如下的方式,假设dump文件为a.dmp,就能够很轻松的得到sequence的值。 [ora11g@rac1 ~]$ strings a.dmp|grep "CREATE SEQUENCE"|awk '{print $0";"}' CREATE SEQUENCE "TEST_SEQ2" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 NOCACHE ORDER CYCLE; CREATE SEQUENCE "TEST_SEQ" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 NOCACHE NOORDER NOCYCLE; 总之办法总比困难多,还是有很多的途径来实现一些没有的功能。

本文分享自微信公众号 - 杨建荣的学习笔记(jianrong-notes),作者:r4笔记第11天

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-01-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 关于sequence问题的紧急处理(r2第26天)

    今天早上收到邮件,说有一个很紧急的问题,是关于sequence的。 错误日志里面还有ORA的错误 ----- ... 7 more Cause...

    jeanron100
  • 生产环境sql语句调优实战第六篇(r2笔记91天)

    生产环境中有大量的sql语句在运行,尽管有awr,ash做数据的收集统计,但是dba的调优工作大多数情况都是在问题已经发生后做排查的,有些sql语句可能执行的时...

    jeanron100
  • 浅谈pl/sql (r3笔记第14天)

    关于pl/sql,可能大家熟悉而又陌生,熟悉是因为大家在工作中老是写sql,如果稍微改动一些,加入begin,end和控制结构,就是pl/sql了。:) 今...

    jeanron100
  • UVM(九)之sequence机制

    UVM(九)之sequence机制 如果说transaction是子弹的话,那么sequence无疑就是弹夹了。在整个的UVM验证平台中,seque...

    瓜大三哥
  • UVM(十二)之各register model

    UVM(十二)之各register model 1. register model的必要性 考虑一个问题,当验证平台向DUT发了某些激励后,我们期望DUT中的某...

    瓜大三哥
  • 万亿级调用下的优雅:微信序列号生成器架构设计及演变 ( 上 )

    微信同步机制的背后,需要一个高可用、高可靠的序列号生成器来产生同步数据用的版本号。这个序列号生成器我们称之为 seqsvr ,本文会重点介绍 seqsvr 的架...

    曾钦松qinz
  • sql-labs-less3/4|SQL注入

    本篇为sql-labs系类第3、4关讲解,由于有些语法第一关已经讲过,所以本篇涉及到前面的知识不会讲解太细,不懂得语句可以参见此系列第一篇,不正确的地方欢迎指正...

    TenG
  • Oracle 常用命令大汇总

    第一章:日志管理     1.forcing log switches     sql> alter system switch logfile;    ...

    阿新
  • Quorum联盟链开发入门

    Quorum是一个许可制的以太坊联盟区块链实现,包含了金融巨头JP摩根开发的一个GETH分支版本,可以在节点之间实现私有和快速的交易。Quorum为保证隐私对节...

    用户1408045
  • 如何克服OpenStack混合云集成问题

    当谈及使用OpenStack和公共云供应商(如AWS)开发混合云时,很多IT专业人士都有着一个长长的愿望清单。 混合云是2016年最热门的IT流行语之一。一些企...

    静一

扫码关注云+社区

领取腾讯云代金券