环境Oracle 10g for windows
程序中使用触发器取sequence值做表主键在系统运行情况下做exp备份在imp还原的时候发现sequence的值,比max(id)要小。观察备份过程发现sequence备份的时候是先于Table的,由于系统正在运行还有表的插入动作。所以请问一下是不是这个原因造成上面的现象。
还有在论坛查询的时候说sequence的cach是会造成上面的问题,但是如果把cach去掉了是不是会降低系统运行效率。
不知道谁能给出个比较好的解决方案。

解决方案 »

  1.   

    cache一定程序度上影响,关键看你的业务并发量如何,
    一般并发不高的系统,不使用cache没什么影响。当然,你可以重建sequence来避免键值重复。
      

  2.   

    数据量是很大的,但是并发不多。因为数据是通过一个程序统一处理插入的。
    sequence量很大,一个一个对比重建很麻烦啊。
    还有想追问一下,exp导出原理,exp导出对象在执行显示那个日志里是有先后顺序的,不知道oracle是怎么处理的,是在命令发出的瞬间形成类似数据快照那种,还是就是允许先后差异性呢?
    是不是sequence先于tables导出造成的差异呢,如果是怎么避免?
      

  3.   

    我又看了一下sequence是nocache的,奇怪了。到底是为啥呢
      

  4.   

    如果是这样的话我想应该就是exp导出顺序不同造成的时间差了。
    怎么办好呢