ORA-00001: unique constraint (BBASS.PK98) violated 主键约束问题
BBASS.PK98为当前要插入数据的表中的一个主键名。
出现这个错误的原因:主键存在重复的问题,在bbass平台中(包括以后很多时候),很多model在自动生成主键的时候,会采用sequence的方式,并且很多时候hibernate的配置文件中会将不同的model的sequence名称配置为相同的名称。
在网上查看了一些资料:
发现不少说这是一个9i的BUG,10g中已经fixed。这是我查到的原文:
ORA-00001 PERFSTAT.STATS$SQL_SUMMARY_PK2009-03-13 19:23又遇到了ORA-00001 PERFSTAT.STATS$SQL_SUMMARY_PK ,记得当时好像disable一下就可以了,今天有空metalink上查了一下,原来是9i的bug,10g中fixed.
Database Bug.2784796 - ORA-00001 UNIQUE CONSTRAINT (PERFSTAT.STATS$SQL_SUMMARY_PK) VIOLATED.
解决方法:
1.ALTER TABLE PERFSTAT.STATS$SQL_SUMMARY MODIFY CONSTRAINT STATS$SQL_SUMMARY_PK DISABLE NOVALIDATE;
2.1. Please run the following sql statements: (Please be sure the view STATS$V_$SQLXS created successfully in the sys schema) sqlplus " / as sysdba"
SQL> spool run_statspack.txt
SQL> create or replace view STATS$V_$SQLXS as select max(sql_text) sql_text , sum(sharable_mem) sharable_mem , sum(sorts) sorts , min(module) module , sum(loaded_versions) loaded_versions , sum(fetches) fetches , sum(executions) executions , sum(loads) loads , sum(invalidations) invalidations , sum(parse_calls) parse_calls , sum(disk_reads) disk_reads , sum(buffer_gets) buffer_gets , sum(rows_processed) rows_processed , max(command_type) command_type , address address , hash_value hash_value , count(1) version_count , sum(cpu_time) cpu_time , sum(elapsed_time) elapsed_time , max(outline_sid) outline_sid , max(outline_category) outline_category , max(is_obsolete) is_obsolete , max(child_latch) child_latch from v$sql where ( plan_hash_value > 0 or executions > 0 or parse_calls > 0 or disk_reads > 0 or buffer_gets > 0) group by hash_value, address;
SQL> select owner,object_name from dba_objects where status ='INVALID';
SQL> @?/rdbms/admin/utlrp
SQL> select owner,object_name from dba_objects where status ='INVALID';
SQL> conn perfstat/perfstat_password
SQL> execute statspack.snap(i_snap_level=>5);
SQL> spool off;
但是针对主键重复的问题是:save数据时,无法插入新的数据,
我们的解决方法:重置sequence。在sqlplus中或者PS/SQL中手工重置一下sequence的值(前提是查出所有用同一sequence名称的表中最大的id)。
然后可以重置sequence中的start with的值,但是oracle是不允许直接这个语句(ALTER SEQUENCE SEQ_OTHERID start with 50000;)执行的。所以解决的方法是:
1、直接先drop再create,DROP SEQUENCE SEQ_OTHERID (SEQ_OTHERID 是sequence_name);
--SEQ_OTHERID 是sequence_name
SQL>DROP SEQUENCE SEQ_OTHERID;
-- Create sequence
SQL>create sequence SEQ_OTHERID minvalue 1 maxvalue 999999999999999999999999999 start with 50000 increment by 1 cache 20;
然后可以
SQL>select SEQ_OTHERID.nextval from dual;查看新的 start with的值,已经改变为50000了。
注意:
在生产环境中:也就是说这些sequence正在被用到的时候,如果drop掉的话,就会出现错误。
所以可以采用下面的解决方法:
2、可以先修改increment by的值,这个是可以直接alter的
SQL>ALTER SEQUENCE SEQ_OTHERID INCREMENT BY 50000;
再执行下面的SQL语句
SQL>select SEQ_OTHERID.nextval from dual;
执行完后,start with的值就变为之前sequence中的start with+50000的值,
再将INCREMENT BY 修改回来
SQL>ALTER SEQUENCE SEQ_OTHERID INCREMENT BY 1;
上述过程就相当于修改了start with的值。
再贴一个网上搜到的方法:
--create procedure pro_test for test
create or replace procedure pro_reset_seq(v_seqname varchar2) as n_temp number(10);
s_tsql varchar2(100);
begin execute immediate ' select ' || v_seqname || '.nextval from dual' into n_temp; if n_temp <> 1 then n_temp := -(n_temp-1); s_tsql := ' alter sequence ' || v_seqname || ' increment by ' || n_temp; execute immediate s_tsql; execute immediate ' select ' || v_seqname || '.nextval from dual' into n_temp; s_tsql := ' alter sequence ' || v_seqname || ' increment by 1 '; execute immediate s_tsql; end if; end;
/ 在SQL PLUS中调用 exec pro_reset_seq('seq_test');
/ 你所希望重置的序列就可以重新从1开始递增了。
相关推荐
15. ORA-00001:unique constraint (BUSHR.PK_T_DIC_BMFL) violated - 违反唯一约束,尝试插入重复的主键值。确保插入的数据不违反唯一性约束。 16. ORA-01031:insufficient privileges - 没有足够的权限执行操作...
#### ORA-00001: Unique Constraint Violated 当尝试插入或更新违反唯一约束的数据时触发此错误。例如,在具有唯一索引的列上插入重复数据。 #### ORA-00017: Rollback Segment Full 在进行事务回滚操作时,如果...
1. **ORA-00001: unique constraint (owner.constraint) violated** - 这个错误表示尝试插入的数据违反了一个唯一约束条件。解决方法通常是检查数据是否重复,或者修改数据以满足唯一性要求。 2. **ORA-00017: ...
#### ORA-00001: Unique constraint violated - **解释**: 当尝试插入或更新的数据违反了唯一性约束时触发此错误。 - **解决方案**: 检查数据是否重复,并确保每个字段值都是唯一的。 #### ORA-00017: Resource ...
#### ORA-00001: Unique constraint violated - **描述**:当尝试插入或更新一个行时,违反了唯一性约束。 - **解决方法**:确保数据不违反任何唯一性约束,或者修改约束以适应数据。 #### ORA-00017: Rollback ...
##### ORA-00001: Unique Constraint Violated - **描述**:当尝试插入或更新违反了唯一约束的数据时出现。 - **解决方法**: - 检查数据是否违反了表定义中的唯一约束。 - 使用`ALTER TABLE`语句删除或修改该约束...
1. **ORA-00001: unique constraint violated** 这个错误意味着违反了唯一性约束,即尝试插入的数据在指定的唯一索引或主键列中已经存在。解决方法包括检查插入数据的唯一性,或者如果数据本应重复,可能需要调整...
这些错误代码通常伴随着一个错误消息,描述了问题的具体情况,比如违反了唯一性约束导致的"ORA-00001: unique constraint violated"。 学习和理解Oracle9i错误代码,可以提升数据库管理员的故障排除能力。错误代码...
#### ORA-00001: Unique constraint (table name.column name) violated 当尝试插入或更新违反了唯一性约束的记录时,会触发此错误。例如,如果某列被定义为唯一键,而尝试插入一个已存在的值,就会引发ORA-00001...
例如,"ORA-00001: unique constraint violated" 这个错误意味着你在尝试插入或更新数据时违反了唯一性约束,即试图插入的数据在指定列中已经存在。解决这个问题的方法包括检查插入的数据是否正确,或者修改约束条件...
- **ORA-00001: unique constraint (SYS.C0012345) violated** - **含义**:尝试插入一条违反唯一约束的数据。 - **解决方法**:检查数据是否符合约束条件,确保唯一性。 - **ORA-00936: missing expression** - ...
1. **ORA-00001: unique constraint (SYS.UK_XXXXX) violated** - **解释**:此错误表示尝试插入违反唯一约束的数据。这可能是由于尝试向设置了唯一索引的字段插入重复值导致的。 - **解决方案**: - 检查数据...
1. **违反约束的错误**:如`ORA-00001: unique constraint violated`表示尝试插入的数据违反了唯一性约束。必须识别并修正导致冲突的数据。 2. **级联删除与更新**:外键约束的ON DELETE CASCADE和ON UPDATE ...
例如,"ORA-00001: unique constraint violated"表示尝试插入或更新的数据违反了唯一性约束,可能是因为试图插入已存在的键值。 学习和理解这些错误代码对于数据库管理员(DBA)和开发者至关重要,因为它们能指导...
1. **ORA-00001: unique constraint (SYS.UNQ$XXXXXXXX) violated** - **含义**:当尝试插入违反唯一约束的数据时,会触发此错误。 - **原因**:可能是由于试图向具有唯一索引或唯一约束的列中插入重复值。 - **...
例如,尝试插入一个违反唯一约束的记录,你会看到类似"ORA-00001: unique constraint violated"的错误。 2. **日志文件**:Oracle的服务器和客户端日志文件,如alert.log(服务器端)和trace文件(客户端或服务器端...
1. **错误描述**:每个错误码都有一个详细的描述,解释了错误发生的原因,例如“ORA-00001: unique constraint violated”表示违反了唯一性约束,这意味着试图插入或更新的数据违反了某个唯一索引或唯一约束。...
例如,"ORA-00001"表示"unique constraint violated"(唯一性约束违反),意味着试图插入或更新的数据违反了表的唯一性约束。 3. **查询错误代码**:在Oracle文档中,可以通过错误代码快速查找错误详情。Oracle提供...
这条语句会失败,并抛出错误信息`ORA-00001: unique constraint (SYS.NAME_UNIQUE) violated`,提示唯一约束被违反。 3. **插入包含空值的数据**: ```sql INSERT INTO unique_test (id, fname, lname) VALUES ...
在尝试配置Oracle 11g Enterprise Manager (EM) 时,可能会遇到一个特定的错误,即“ORA-00001: unique constraint (SYSMAN.PARAMETERS_PRIMARY_KEY) violated”。这个错误表明在尝试插入或更新数据到SYSMAN....