我是靠谱客的博主 专注草莓,最近开发中收集的这篇文章主要介绍oracle 序列号同步,关于序列同步的问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在使用oracle数据库时,当给一个表设置自增字段时,我们经常会使用到序列+触发器来完成。但当你需要对数据库进行导入导出时,序列很容易出问题。

当你将数据库导出后,导入到另一个数据时,你会发现另一个数据库里的序列当前值会小于之前数据库的当前值,由此会导致你往该表插入数据时,会出现自增字段的值重复的情况,如果这个自增字段为主键,则你的插入操作就好报错。

在网上找了一下资料,发现原来我们对数据库执行导出操作时,数据库先进行的是序列的导出,然后再进行表数据的导出,如果在序列导出过程中,该系统一直在使用,则序列导出完成后,开始导表数据的时候,有可能表数据因为系统在不断的使用导致表数据增长,里面的序列当前值已经增加了很多。当数据库导出完成后会造成数据表中的实际记录跟序列的当前值不一致。

该问题的解决办法:在导入数据库成功后,重建序列,将序列当前值修改为表记录自增字的最大值+1,即可。

1、Create Sequence

你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限,

CREATE SEQUENCE emp_sequence

INCREMENT BY 1   -- 每次加几个

START WITH 1     -- 从1开始计数

NOMAXVALUE       -- 不设置最大值

NOCYCLE          -- 一直累加,不循环

CACHE 10;

2、Alter Sequence

你或者是该sequence的owner,或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop   sequence 再 re-create .

Alter sequence 的例子

ALTER SEQUENCE emp_sequence

INCREMENT BY 10

MAXVALUE 10000

CYCLE     -- 到10000后从头开始

NOCACHE ;

影响Sequence的初始化参数:

SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。

可以很简单的Drop Sequence

DROP SEQUENCE order_seq;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22969361/viewspace-1180052/,如需转载,请注明出处,否则将追究法律责任。

最后

以上就是专注草莓为你收集整理的oracle 序列号同步,关于序列同步的问题的全部内容,希望文章能够帮你解决oracle 序列号同步,关于序列同步的问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部