首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 壞塊處理完整方案:無備份環境下表與索引修復實戰

     編輯:Oracle 資料庫基礎

環境

  • Oracle 11.2.0.1.0 64-bit / Windows Server 2008 R2
  • 告警日誌大量 ORA-01578、ORA-01110、ORA-26040

一、定位損壞物件類型

1.1 根據 File# + Block# 查段

SELECT tablespace_name, segment_type, owner, segment_name
FROM dba_extents
WHERE file_id = 6
  AND 329302 BETWEEN block_id AND block_id + blocks - 1;

1.2 LOBSEGMENT 進一步定位基表

SELECT owner, table_name
FROM dba_lobs
WHERE segment_name = 'SYS_LOB0000820025C00004$$';

1.3 索引段直接得知索引名

SELECT tablespace_name, segment_type, owner, segment_name
FROM dba_extents
WHERE file_id = 6
  AND 329302 BETWEEN block_id AND block_id + blocks - 1;
-- 回傳 SEGMENT_TYPE=INDEX, SEGMENT_NAME=M83_SU_USR_PK_1

二、資料表壞塊處理 (無備份 → 接受資料遺失)

2.1 設定事件 10231 跳過壞塊

ALTER SYSTEM SET EVENTS '10231 trace name context forever, level 10';

2.2 匯出完好資料

exp yksoft/*** file=xx.dmp log=xx.log tables=CONSTANT
# 多表
exp yksoft/*** file=xx.dmp log=xx.log tables=TABLE1,TABLE2

2.3 關閉事件

ALTER SYSTEM SET EVENTS '10231 trace name context off';

2.4 重建表並匯入

DROP TABLE yksoft.CONSTANT PURGE;
CREATE TABLE yksoft.CONSTANT ...;  -- 依原結構
imp yksoft/*** file=xx.dmp log=imp.log tables=CONSTANT

三、索引壞塊處理 (標準:刪除重建)

3.1 嘗試直接刪除

DROP INDEX yksoft.M83_SU_USR_PK_1;
-- 若報 ORA-02429 (主鍵/唯一約束依賴) → 需先刪約束

3.2 完整重建流程

  1. 查詢索引所屬表與欄位
    SELECT index_name, column_name, table_name
    FROM dba_ind_columns WHERE index_name='M83_SU_USR_PK_1';
  2. 導出表結構 DDL
    SET LONG 90000 PAGES 999
    SELECT DBMS_METADATA.GET_DDL('TABLE','M83_SU_USR','YKSOFT') FROM DUAL;
  3. 導出索引 DDL
    SELECT DBMS_METADATA.GET_DDL('INDEX','M83_SU_USR_PK_1','YKSOFT') FROM DUAL;
  4. 刪除約束
    ALTER TABLE yksoft.M83_SU_USR DROP CONSTRAINT M83_SU_USR_PK_1;
  5. 刪除索引
    DROP INDEX yksoft.M83_SU_USR_PK_1;
  6. 重建索引 (依導出 DDL)
    CREATE UNIQUE INDEX "YKSOFT"."M83_SU_USR_PK_1" ON "YKSOFT"."M83_SU_USR" ("RECIDX")
    PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
    STORAGE(...) TABLESPACE "YKSPACE";
  7. 重建約束
    ALTER TABLE yksoft.M83_SU_USR ADD CONSTRAINT "M83_SU_USR_PK_1" PRIMARY KEY ("RECIDX");

關鍵提醒

  • **有備份優先 RMAN 恢復** (零資料遺失)
  • 事件 10231 僅供匯出階段開啟,**匯出完畢立即關閉**
  • 索引重建建議 NOLOGGING 加速,完成後切回 LOGGING
  • 壞塊修復後執行 DBMS_REPAIR.CHECK_OBJECT 驗證
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved