因坏块需重建主键索引

问题现象

用户告知数据库因坏块导致其部分程序报错

ORA-01578: ORACLE 数据块损坏 (文件号 7, 块号 170643)
ORA-01110: 数据文件 7: 'F:\JHEMR\JHEMRV63.DBF'
ORA-06512: 在 line 23

数据库没有可用的rman备份可用来修复坏块。

解决

查询该坏块所属对象

SQL> select segment_name, segment_type, owner
  2  from dba_extents
  3  where file_id =7
  4  and 170643 between block_id
  5  and block_id + blocks -1;

SEGMENT_NAME
--------------------------------------------------------------------------------

SEGMENT_TYPE       OWNER
------------------ ------------------------------
PK_XXXX
INDEX              YYYY

该索引为主键复合索引,因此我打算通过将其进行重建解决问题。

删除主键约束

SQL> ALTER TABLE "JHEMR"."JHCDR_LAB_REPORT" DROP CONSTRAINT PK_JHCDR_LAB_REPORT;


表已更改。

删除索引

SQL> drop index "JHEMR"."PK_JHCDR_LAB_REPORT";

索引已删除。

创建索引

SQL>  CREATE UNIQUE INDEX "YYYY"."PK_XXXXXX" ON "YYYY"."TTTTT" ("PATIENT_ID", "VISIT_ID", "LAB_APPLY_NO", "SPECIMEN_NO", "HOSPITAL_NO", "
PARITEMNO")
  2    PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
  3    STORAGE(INITIAL 8388608 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  4    PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  5    BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  6    TABLESPACE "TSP_JHEMR";

索引已创建。

添加主键约束

alter table TTTTT add constraint PK_XXXXX 
primary key("PATIENT_ID", "VISIT_ID", "LAB_APPLY_NO", "SPECIMEN_NO", "HOSPITAL_NO", "PARITEMNO");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值