如何修复失效的主键索引?

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

如何修复失效的主键索引?

ORACLE11204

 

--A、屡次收到这样的提单故障,ORA-01502,

上传图片

 

--B、从名字上看,PK_HS_ACCTGPROCESSENTRY是个主键,故障应该是在对表做增删时,由于主键索引失效而引发这错误,,,但分析后,我有些糊涂,不明白如何把违反主键约束的数据插入表中,因为,假如索引未失效,唯一性有效,此时是无法把违反唯一性的数据插入库;假如索引已经失效,此时想插入这些数据,此时也会报错,因为索引无法使用,,,除非是插入时,忽略唯一性索引的校验,插入完后,再ENABLE 索引,结果报错,,,

 

--C、不过这不妨碍修复故障,下面是我在测试环境模拟修复该故障,

 

--1 使用sqlplus 工具,以该账号身份(上述故障中的CLOUDPRD),登录数据库。

--2 查看确认该索引的状态。

上传图片

 

--3 备份数据,预防万一。

上传图片

 

--4 删除主键关联的索引,然后查看该索引是否还存在?确认索引已经丢弃。

上传图片

 

--5 查看表中的重复数据量。

上传图片

 

--6 删除重复数据。

上传图片

 

--7 修复索引。

上传图片

 

--8 查看修复后的索引状态。

上传图片

 

 

 

-D、下面是相关步骤的执行语句

--2

select status from user_indexes where index_name='PK_HS_ACCTGPROCESSENTRY';

--3

create table t_hs_acctgprocessentry_240603 as select * from t_hs_acctgprocessentry;

--4

alter table t_hs_acctgprocessentry disable primary key drop index;

--5

Select count(*) from

(select row_id, fprocessentryid, fordetbyseq, fseqentryid, seq from

         (select rowid row_id, fprocessentryid,fordetbyseq,fseqentryid,

                 row_number() over(partition by fprocessentryid,fordetbyseq,fseqentryid order by rowid) seq from t_hs_acctgprocessentry) where seq>1);

--6

delete from t_hs_acctgprocessentry where rowid in

   (select row_id from

      (select row_id, fprocessentryid, fordetbyseq, fseqentryid, seq from

         (select rowid row_id, fprocessentryid,fordetbyseq,fseqentryid,

                 row_number() over(partition by fprocessentryid,fordetbyseq,fseqentryid order by rowid) seq

          from t_hs_acctgprocessentry) where seq>1) );

 

--7

alter table t_hs_acctgprocessentry enable primary key;


如何修复失效的主键索引?

ORACLE11204 --A、屡次收到这样的提单故障,ORA-01502, --B、从名字上看,PK_HS_ACCTGPROCESSENTRY是个主键,故障应该是在对表做增删时,...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息