一次不完全恢復中途Kill rman後的問題處理+壞塊處理過程
最近有點忙,沒有時間整理東西,今天週末,就整理下了...
問題描述:
Oracle Linux 6.0+oracle11gr2
昨天回家,一同事電話說自己誤truncate了一張大表(約:20:40左右)
由於公司在西單,我住的地太遠,暫時也不能遠端操作
隨即電話通知其進行不完全恢復,語句如下:(注:閃回沒開)
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
shutdown immediate;
startup mount;
sql "alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''";
set until time '2011-08-02 20:30:00';
restore database;
recover database;
alter database open resetlogs;}
庫大概有4.2T左右
備份為前天晚上的0級增量備份
3號早上9:10檢視,資料檔案restore的差3個檔案(檔案都較大),由於業務需求,不得不將rman先kill,準備重新open庫進行業務,就缺少時間,非常可惜。當shutdown immediate後再open時報資料庫資料檔案1需要介質恢復,資料庫處於nomount階段;此刻已經9:20左右了,高頻庫是用不了了,於是及時將資料切換至低頻庫進行落資料,估計損失了5分鐘左右的資料量。(注:由於是金融資料庫,每天9:15開始有大量資料入庫,約600k/6s。)
完了,只能接著上次進行恢復了,這次調整相關引數後進行不完全的恢復,語句如下:
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
allocate channel c5 type disk;
allocate channel c6 type disk;
shutdown immediate;
startup mount;
sql "alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''";
set until time '2011-08-02 20:30:00';
restore database;
recover database;
alter database open resetlogs;}
20分鐘左右(注:歸檔檔案也是很大的)完成,日誌無錯誤資訊。
當再次resetlogs開啟後,以前truncate的表是回來了,不過又有出現下列錯誤:
SQL> select count(*) from level1.STOCKQUOTELevel1sh;
select count(*) from level1.STOCKQUOTELevel1sh
*
第 1 行出現錯誤:
ORA-01578: ORACLE 資料塊損壞 (檔案號 65, 塊號 3038195)
ORA-01110: 資料檔案 65: '/opt/M1HFData/oradata/m1hf/level1_P15.dbf'
ORA-26040: 資料塊是使用 NOLOGGING 選項載入的
SQL> select count(*) from level1.STOCKQUOTELevel1sz;
select count(*) from level1.STOCKQUOTELevel1sz
*
第 1 行出現錯誤:
ORA-01578: ORACLE 資料塊損壞 (檔案號 50, 塊號 3109427)
ORA-01110: 資料檔案 50: '/opt/M1HFData/oradata/m1hf/level1_P0.dbf'
ORA-26040: 資料塊是使用 NOLOGGING 選項載入的
由錯誤提示可知是資料檔案損壞,故繼續進行解決:
1、 先確定損壞的是表段還是索引段,若是後者,則就簡單了
SQL> select * from dba_extents where file_id=50 and 3109427 between block_id and block_id+blocks-1;
OWNER
------------------------------
SEGMENT_NAME
--------------------------------------------------------------------------------
PARTITION_NAME SEGMENT_TYPE TABLESPACE_NAME
------------------------------ ------------------ ------------------------------
EXTENT_ID FILE_ID BLOCK_ID BYTES BLOCKS RELATIVE_FNO
---------- ---------- ---------- ---------- ---------- ------------
LEVEL1
STOCKQUOTELEVEL1SZ
P20110803 TABLE PARTITION LEVEL1
0 50 3109424 65536 8 50
顯然沒那麼簡單了
2、 使用診斷事件
SQL> alter system set events '10231 trace name context forever,level 10';
注:此事件跳過全表掃描時的壞塊
系統已更改。
3、 建立表並跟換表名
SQL> create table STOCKQUOTELEVEL1SZ_tmp as select * from level1.STOCKQUOTELEVEL1SZ;
表已建立。
SQL> alter table STOCKQUOTELEVEL1SZ rename to STOCKQUOTELEVEL1SZ_bak;
表已更改。
SQL> alter table level1.STOCKQUOTELEVEL1SZ_tmp rename to STOCKQUOTELEVEL1SZ;
表已更改。
關閉事件:SQL> alter system set events '10231 trace name context off';
4、檢視相關表資料
SQL> select count(*) from level1.STOCKQUOTELEVEL1SZ;
COUNT(*)
----------
749420
4、 做資料庫日檢無其他問題
切換開始使用高頻庫。此時已經10:10左右
至此,此次事件已經解決,後邊再備份了。
總結:此次估計丟失高頻庫與低頻庫切換時間隔5mins的資料,資料量約:5mins*60/6*600k=29.29M
哎,很悲劇的一次不完全恢復.....記錄於此,時刻警醒自己。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26143577/viewspace-704723/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一次壞塊的處理過程(一)
- 一次壞塊的處理過程(二)
- 一次壞塊的處理過程 [轉]
- ORACLE資料庫壞塊的處理 (一次壞快處理過程)Oracle資料庫
- Oracle壞塊問題處理Oracle
- rman備份後發現壞塊的處理
- rman建立catalog過程及問題處理
- 一次使用BBED處理壞塊
- 一次線上問題處理過程記錄
- 一次Row Cache Lock問題處理過程
- RMAN恢復之RMAN-06555處理
- 【故障處理】一次RAC故障處理過程
- Oracle壞塊處理Oracle
- rootvg壞塊處理
- ORACLE 壞塊處理Oracle
- 處理塊損壞
- Oracle壞塊修復處理實驗Oracle
- RMAN備份時候檔案壞塊的處理
- 【RMAN】“壞塊”導致RMAN備份不成功的RMAN處理方法
- RMAN處理split block問題BloC
- 發生壞塊後的處理及確認
- Oracle RMAN備份中對壞塊(corrupt block)的處理OracleBloC
- ORACLE資料庫壞塊的處理 (處理無物件壞快的方法)Oracle資料庫物件
- AwaysOn災備恢復演練問題處理
- 如何處理Oracle資料庫中的壞塊問題(轉)Oracle資料庫
- Library cache pin問題的處理過程
- undo表空間損壞的處理過程
- Oracle如何進行塊介質的恢復?(有邏輯壞塊是如何處理)Oracle
- 一次ORACLE資料庫undo壞塊處理Oracle資料庫
- BAD Block 壞塊的處理BloC
- oracle taf unknown 問題處理過程Oracle
- DBA實踐---壞塊處理
- 資料庫壞塊處理資料庫
- Oracle壞塊處理相關Oracle
- oracle corrupt block壞塊處理OracleBloC
- 【WebLogic故障處理】一次嚴重的WebLogic記憶體洩漏問題處理過程Web記憶體
- 一次efi的問題處理
- MySQL資料庫INNODB表損壞修復處理過程分享MySql資料庫