move表操作流程

zlingyi發表於2015-04-01

今天收到開發人員說資料庫報錯,

 ORA-01502: index 'LRWLPOS.SYS_C0020279' or partition of such index is in unusable state 
檢視為索引為不可用狀態,刪除資料刪除不了,懷疑為昨天move表導致。重建失效索引後,將業務重跑OK,
今天檢視了一下阿里巴巴資料庫操作手冊,上面詳細註明了move表所帶來的風險,看來風險意識還沒到位。以後做生產操作需要加強風險意識。

一、
目的


明確MOVE TABLE操作的風險及標準流程,最大限度避免MOVE TABLE操作帶來的故障。

二、 適用範圍

l 最佳化操作中,為了降低表,分割槽,LOB的高水位

l 操作物件包括:普通表,分割槽,子分割槽,LOB欄位

備註:表中不能包含LONG 欄位

三、 風險評估

l MOVE 表期間,會阻塞所有關於此表的DMLDDL操作,且INDEX會失效

l MOVE 表完成後,表統計資訊會失效,需要重新收集(9i)  

select object_name from dba_objects where status='INVALID';(查詢move表前後是否有失效的物件)
select *  from user_indexes where status <>'VALID' ;(查詢是否有失效的索引)
如果有失效的索引需要重建索引 alter index idx_t rebuild;

l 如果表上存在TRANSACTION,則無法使用MOVE操作,會報resource busy

l MOVE到其他表空間,保證表空間有足夠的空閒空間

四、 操作流程

1. 準備工作

a) 和應用確認MOVE表的持續時間和期間無法操作表(包括查詢)的風險,看是否能接受或者選擇停相關應用模組

b) 事先整理完成MOVE TABLEREBUILD INDEX的指令碼
select index_name
from dba_indexes
where owner='LRWLPOS' and table_name='POSTXNJNLHIS'(檢視錶相關索引)
寫好rebuild index的相關指令碼

c) 確認原來表的大小@size,方便操作前後對比

d) 如果前後表空間不同,請確認空閒空間@tbs

2. 執行過程

a) alter table *** move tablespace ***

[partition *** tablspace_name ***]

[lob(***) store as (tablespace ***)]  parallel ?;

b) MOVE操作期間,檢視資料庫等待事件@showlong和鎖情況@lock

c) 重建索引,需要考慮是否要收集統計資訊,詳見【重建INDEX

d) 檢視失效物件@dbcheck

3. 驗證方案

a) 常規檢查:@dbcheck

b) 大小確認:@size

c) 資料庫是否正常:@active

五、 核心物件風險

不建議使用MOVE操作

六、 回退方案

無需回退



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28686045/viewspace-1481181/,如需轉載,請註明出處,否則將追究法律責任。

相關文章