问题现象
用户告知数据库因坏块导致其部分程序报错
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");