精华内容
下载资源
问答
  • oracle主键冲突 ORA-00001

    2021-05-10 15:44:30
    这是主键冲突的错误,如果该表有主键自增长,可以检查 oracle 的 sequence select SEQUENCE_OWNER, SEQUENCE_NAME, MIN_VALUE, MAX_VALUE, INCREMENT_BY, CACHE_SIZE, LAST_NUMBER from all_sequences where ...

    在迁移数据库后,有些表插入数据会报错:
    ORA-00001: unique constraint … violated.
    这是主键冲突的错误,如果该表有主键自增长,可以检查 oracle 的 sequence

    select SEQUENCE_OWNER, SEQUENCE_NAME, MIN_VALUE, MAX_VALUE, INCREMENT_BY, CACHE_SIZE, LAST_NUMBER 
    from all_sequences where SEQUENCE_OWNER = 'IRS';
    

    在这里插入图片描述

    假设 TEST_SEQUENCE 和实际的值相比偏小,可以先删除,然后重新创建

    DROP SEQUENCE IRS.TEST_SEQUENCE;
    
    create sequence IRS.TEST_SEQUENCE
    minvalue 1
    maxvalue 999999999999999999999999999
    start with 165--起始值
    increment by 1--增量
    cache 20;
    

    重新查询后可以看到 TEST_SEQUENCE的LAST_NUMBER变成了 165
    在这里插入图片描述

    展开全文
  • 1.MySQL主键冲突主键冲突时,可以选择更新或替换 1.1 主键冲突 主键冲突: mysql> desc my_class; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra |...

    在这里插入图片描述

    1.MySQL主键冲突

    当主键冲突时,可以选择更新或替换

    1.1 主键冲突

    主键冲突:

    mysql> desc my_class;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key 
    展开全文
  • Oracle中sequences使用时发生主键冲突

    千次阅读 2017-09-05 09:41:57
     最近现场生产环境,有十多个涉及序列的表,报主键冲突。  现场人员和公司开发人员,只是修改序列的当前值,修改完,开始好用,后来又报错。  开发人员:之前有部分功能用错序列,后来改正过来。这次确定不是...

    转载自:http://www.itpub.net/thread-2068086-1-1.html

    一,情况说明

         最近现场生产环境,有十多个涉及序列的表,报主键冲突。
         现场人员和公司开发人员,只是修改序列的当前值,修改完,开始好用,后来又报错。

        开发人员:之前有部分功能用错序列,后来改正过来。这次确定不是用错序列,需要我们协助分析。

        现场实施人员: 发生这种错误,就修改当前值,从表中取出最大的值B,然后再B基础上加几千或者几万。

    这个主键冲突很多情况:比如开发曾经用错了序列;转数据的人员,之前转错了;或者人为修改了数据


    二,情况分析
           网上查了很多资料,自己也分析了很久,都无法解释这种现象,也**去国外论坛,看了TOM关于序列的答复,后来发现都解释不了这种情况。无奈,今天上班,远程到生产环境,做测试,进行模拟,结合假设。后来分析出原因。

    1.现场序列情况:
        现场seq都是 采取 noorder+cache 5000 模式 ,是2个实例,简称节点1和节点2

    2.基础知识:--此处简单说下,具体可以百度,网上很多关于cache,order,noorder,cycle的解释

           2.1 cache是缓存, [size=14.6667px]默认20. 现场是5000,简单说,如果是没有cache,那么读取一个SEQ.NEXTVAL,就要更新一次序列基表sys.seq$. 如果是5000缓存,就一次性读取5000在内存中,然后直到5000个序列用完了,才去更新一次基表sys.seq$. 大大提高了性能,因为之前在高并发会产生大量的等待,锁。

           2.2 order是排序,如果选择order,rac为保持序列有序,会不停的在节点之间通信并维护序列顺序。用tom大师的话,想系统崩溃在rac就用order吧。

    3. 在rac中序列的情况是下面2种情况。


    3.1 不修改序列当前值,正常情况

    假设序列的cache =10 ,假设2个节点。分别为node1和node2,那么是如下情况
    node1=1-10
    node2=11-20


    然后,假设node1的预先缓存的10个序列先用完,node1会更新基表,并获取cache数量的新序列数。则此时内存中序列是下面
    node1=21-30
    node2=11-20

    结论:也就是说,正常rac节点的序列是,当一个节点的缓存序列使用完毕,另外一个节点的序列是保留的,不刷新。只是使用完毕的节点去更新sys.seq$并重新获得
    cache数量的序列。


    3.2  修改序列当前值的情况(最后面有真实的图)
    假设序列的cache =10 ,假设2个节点。分别为node1和node2,那么初始如下情况
    node1=1-10
    node2=11-20

    此时,由于某些原因,比如node1节点的会话已经使用了上面1-10里面的1,2,3,4 。然后修改序列当前值=8

    node1=8-18
    node2=19-29


    结论:rac,任何节点修改了序列的当前值,之前分配给各个节点的序列号段,都会作废,重新根据当前值在2个节点 生成新的序列。



    ================================================================================


     


    不是我泼冷水,你写的东西真的。。。。 不清不楚~

    1. 首先 sequence 的nextvalue是多少和使用它的会话提交还是不提交没人任何关系~
    2. 你所谓的“修改序列的当前值”的操作,压根就不存在,或者说根本就不是正确操作~
    3. 你根本没有描述出你这个现象出现的的根本原因~


    你一直在提到“修改序列的当前值”,其实除了标准的使用select seq.nextvalue from dual以外,没有什么正确的方法“修改序列当前值”,而且从seq的设计角度出发,根本就不应该去做所谓的“修改序列的当前值”操作~

    你这个现象应该是有人对一个cache的sequences,使用第三方工具进行了修改,而这种修改本身就是不应该做的。

    经常碰到这样的事儿,使用sequence的人,根本不理解sequence的设计初衷,错误的将这个东西当作一个数组来使用~

    还没事儿修改last_number, 而且还用第三方工具去修改,因为第三方工具都是展示你点击sequnce图标时状态,使用者在图形界面上修改,也不想想对应的SQL是什么,就点击确定,在他点击确定之前,这个sequence的last_number早就不是它所看到的last_number; 而他点击确定修改时,后台执行的SQL还是用展现时的last_number来作为起点;对于一个cache的sequnce来说,图形展示的last_number还不是nextvlaue,就更乱了~
    出现duplicate value完全是错误操作造成的,而这个错误操作就是没事儿修改sequence的last_number(还在sequece正在被使用的时候修改);

    正确使用sequence,压根就不可能有要修改last_number的需求

    首先前面已经说了,正确使用sequence(正确理解sequence用途)的人,绝对不会提出修改sequence当前值的需求~
    其次,你提到的“从表中取出最大的值B”本身也是错误的

    要知道,很多开发人员,和实施人员,是不会去了解SEQUENCE的,只是简单的知道这个东西会自动增加1。包括今天研究之前,我也是这么理解的。特别是RAC更不是谁都了解,因为RAC这种不是所有人都有机会接触到的。

    而且现场的实施人员,发现序列出现问题,包括开发人员,会做的,就是从表中取出最大值,然后跟序列当前值比较,然后修改序列当前值。


    展开全文
  • merge into table_a a using table_b b on(a.id=b.id) when not matched then insert(a.id,a.col,a.col2.....) values(b.id,b.col,b.col2.......) ...表b根据入参创建,然后判断表b跟表a的主键是否冲...
    
    
    merge into 
    table_a a 
    using 
    table_b b 
    on(a.id=b.id)
    when 
    not matched 
    then 
    insert(a.id,a.col,a.col2.....) values(b.id,b.col,b.col2.......)
    
    

    列子:(mybatis中的xml)

    入参:对象

    表b根据入参创建,然后判断表b跟表a的主键是否冲突,不冲突则插入

    <insert id="ignoreSelective" databaseId="oracle" parameterType="com.synjones.cloudcard.attence.infra.entity.AttenceTempWorkEntity" >
            merge into 
            attence_temp_work a 
            using 
            (select 
    	        #{custMemberId,jdbcType=CHAR} CUST_MEMBER_ID,
    	        #{date,jdbcType=CHAR} "DATE",
    	        #{custId,jdbcType=CHAR} CUST_ID,
    	        #{workTimeId,jdbcType=INTEGER} WORK_TIME_ID,
    	        #{workNature,jdbcType=CHAR} WORK_NATURE,
    	        #{overWorkFlag,jdbcType=CHAR} OVER_WORK_FLAG,
    	        #{overWorkTime,jdbcType=INTEGER} OVER_WORK_TIME,
    	        #{createdOperCode,jdbcType=CHAR} CREATED_OPER_CODE,
    	        #{createdStamp,jdbcType=TIMESTAMP} CREATED_STAMP,
    	        #{lastUpdatedStamp,jdbcType=TIMESTAMP} LAST_UPDATED_STAMP,
    	        #{lastUpdatedOperCode,jdbcType=CHAR} LAST_UPDATED_OPER_CODE,
    	        #{workAroundId,jdbcType=INTEGER} WORK_AROUND_ID
    	          from dual
    	        
            ) b 
            on(a.CUST_MEMBER_ID=b.CUST_MEMBER_ID and a."DATE"=b."DATE")
    		when not matched 
    		then 
    		insert 
            <trim prefix="(" suffix=")" suffixOverrides="," >
                <if test="custMemberId != null" >
                    a.cust_member_id,
                </if>
                <if test="date != null" >
                    a."DATE",
                </if>
                <if test="custId != null" >
                    a.cust_id,
                </if>
                <if test="workTimeId != null" >
                    a.work_time_id,
                </if>
                <if test="workNature != null" >
                    a.work_nature,
                </if>
                <if test="overWorkFlag != null" >
                    a.over_work_flag,
                </if>
                <if test="overWorkTime != null" >
                    a.over_work_time,
                </if>
                <if test="createdOperCode != null" >
                    a.created_oper_code,
                </if>
                <if test="createdStamp != null" >
                    a.created_stamp,
                </if>
                <if test="lastUpdatedStamp != null" >
                    a.last_updated_stamp,
                </if>
                <if test="lastUpdatedOperCode != null" >
                    a.last_updated_oper_code,
                </if>
                <if test="workAroundId != null" >
                    a.work_around_id,
                </if>
            </trim>
            <trim prefix="VALUES (" suffix=")" suffixOverrides="," >
                <if test="custMemberId != null" >
                    #{custMemberId,jdbcType=CHAR},
                </if>
                <if test="date != null" >
                    #{date,jdbcType=CHAR},
                </if>
                <if test="custId != null" >
                    #{custId,jdbcType=CHAR},
                </if>
                <if test="workTimeId != null" >
                    #{workTimeId,jdbcType=INTEGER},
                </if>
                <if test="workNature != null" >
                    #{workNature,jdbcType=CHAR},
                </if>
                <if test="overWorkFlag != null" >
                    #{overWorkFlag,jdbcType=CHAR},
                </if>
                <if test="overWorkTime != null" >
                    #{overWorkTime,jdbcType=INTEGER},
                </if>
                <if test="createdOperCode != null" >
                    #{createdOperCode,jdbcType=CHAR},
                </if>
                <if test="createdStamp != null" >
                    #{createdStamp,jdbcType=TIMESTAMP},
                </if>
                <if test="lastUpdatedStamp != null" >
                    #{lastUpdatedStamp,jdbcType=TIMESTAMP},
                </if>
                <if test="lastUpdatedOperCode != null" >
                    #{lastUpdatedOperCode,jdbcType=CHAR},
                </if>
                <if test="workAroundId != null" >
                    #{workAroundId,jdbcType=INTEGER},
                </if>
            </trim>
    
        </insert>

     

    展开全文
  • 表b根据入参创建,然后判断表b和表a主键是否冲突冲突则进行update;否则进行insert <insert id="replaceSelective" databaseId="oracle" parameterType=...
  • 1.查询冲突表下存在的自增序列,如果存在报错的那个序列,就用以下语句干掉 drop SEQUENCE SEQ_TS_SCHEDULE_HOUR ; 2.重新创建该序列,并指定起始id,如笔者表中大概id已经有1390多的数据了,不妨直接设置到1400 ...
  • (相当于一次执行多条语句)的方式去批量插入,使用MERGE如果主键冲突则执行update语句 &lt;insert id="save" parameterType="List" &gt; begin &lt;foreach collection="...
  • Oracle主键异常处理

    2017-03-06 10:35:00
    原因:在实体类中没有配置Oracle的id主键导致Oracle主键冲突   解决方案:在实体类中添加注解的序列 //@GeneratedValue中generator里面的值对应@SequenceGenerator中name里面的值(可以随便定义但一定要...
  • catch捕获主键冲突异常

    千次阅读 2020-03-19 15:32:30
    在catch(Exception e)里捕获主键冲突异常 在catch里加上这个就可以捕获主键异常 if(e instanceof DuplicateKeyException){ // "该接口数据主键冲突"+e.getMessage() }else { //"未知异常:"+e...
  • 二、mybatis+oracle数据库 单个新增或编辑:单个是我根据批量改的(可以用) <!-- 插入数据 --> <!-- 入参定义:实体类,会自动解析属性到对应的值--> merge into admin.t_user t <!-- insert 和update中...
  • oracle 导入数据库备份文件步骤: 1:cmd进入控制台 2:imp 3:输入文件路径例如 f:\a.dmp 4:提示是否只导入文件内容等。。回车到下一步 5:输入导入数据库的用户名 6:回车 7:提示成功 提示:在oracle中,一...
  • 序列问题导致主键冲突

    千次阅读 2017-11-07 13:16:55
    ,后面序列取值忽略个位数后也会不变,导致了主键冲突 unique constraint violated,建议序列不要随意建,需要考虑位数,是否循环 建议  select sysdate,'EAR' || to_char(sysdate,'YYMMDDhh24') || ...
  • 主键冲突:更新 和 主键冲突:替换

    千次阅读 2018-01-09 14:51:40
    想修改但是发现主键冲突。 一.主键冲突:更新 1.在表中插入一条数据(发现小明的学号错了,而id又是主键。怎么办呢?) 2.重新插入 3.发现2步骤更改不了,怎么办呢?这是我们将用到主键冲突处理办法。 ...
  • 主键冲突解决方案

    千次阅读 2018-05-25 09:47:24
    1.主键冲突更新 类似于插入语法,如果插入数据时主键冲突,又不想改变主键时,那么采用更新方法: insert into 表名 [(字段)] values (值列表) on duplicate key update = 新值 此方法弊端是当更新字段较多时,会...
  • --主键冲突,报错,加上ignore出错后就不报错,不插入数据,返回结果是0 --> insert ignore into success_killed(seckill_id,user_phone) values (#{seckillId},#{userPhone}) 转载于:...
  • 此序列是往data_mark_info表中插入数据,而此表的id是主键,已经使用到了48000+ 所以直接修改序列增长的值: ALTER SEQUENCE data_mark_sequence INCREMENT BY 50000; 查询下一个序列值: SELECT data_...
  • 进行数据库操作,总是会遇到各种各样的异常,...比如说如果用户输入了一个已经存在的用户名(主键)的话,下层会返回sql异常: SQL 错误: ORA-00001: 违反唯一约束条件 (BK.PK_TUSER) 类似这样。异常类为SQLInteg...
  • 向有主键的表中插入大量...2.oracle判断主键冲突 直接将数据插入表中,出现冲突则捕获异常并且忽略进行下一条数据插入,没有则直接插入 第一种办法的效率要高于第二种方法,请教各位大神有没有什么更高效的办法?
  • --为防止主键冲突,通过这个where条件就可以实现一条一条的查询  newbasicobjid := newbasicobjid + 1;--for循环一次,就将插入新表的id+1,以实现主键自增长的效果  insert into table_B --开始插入数据, ...
  • UPDATE操作出现主键冲突错误

    千次阅读 2013-07-15 17:38:40
    UPDATE操作出现主键冲突错误,如果出现了这样的问题,你一定会感到匪夷所思! mysql> UPDATE `GC_Price` SET `Price` = '155.00', `OptTime` = '2013-07-01 16:12:36', `CRCode` = '0109' WHERE (PRID = 364706189); ...
  • 使用的环境是HUE中的Oozie的workflow任何调用sqoop命令,该死的oozie的日志和异常提示功能太辣鸡了,最后发现是重复数据导致数据进入mysql表时出现主键冲突进而导致数据同步失败。 (1)众所周知hive表是没有主键与...
  • select r.TABLE_NAME from USER_CONSTRAINTS p, USER_CONSTRAINTS r where p.TABLE_NAME = 'TABLENAME' and r.CONSTRAINT_TYPE = 'R' ...将TABLENAME换成真实的表名,即可查看这张表的主键被哪些表引用了 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,354
精华内容 6,541
关键字:

oracle主键冲突