熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle回滾表空間丟失或損壞處理方法(2)

2022-06-13   來源: Oracle 

  II 數據庫是啟動著的
  如果你檢測到丟失或損壞了回滾段表空間的數據文件並且數據庫是運行著的不要把它 down 掉在很多情況下數據庫是啟著的比關閉著解決問題更容易些
  
  這種情況的兩種可能的解決方法 :
  
  A) 使丟失的那個數據文件 offline 並從備份中恢復它這種情況適用於數據庫是處於歸檔方式的
  
  B) 另一個方法是 offline 掉所有的那個文件所屬表空間的回滾段 drop 那個表空間 然後得建它們你可能不得不殺掉那些使用著回滾段的進程以便使它 offline
  
  方法 IIA: 從備份恢復那個數據文件
  
  這個方法只有你的庫是在歸檔方式下才能使用
  
   脫機 (offline) 那個丟失的數據文件
  ALTER DATABASE DATAFILE <full_path_file_name> OFFLINE;
  
  提示其於目前數據庫的事務量你可能需要建一個臨時的回滾表空間和一些臨時的回滾段以備正常業務運行
  
   從備份中恢復 (restore) 那個數據文件
  
   執行如下命令
  
  SELECT VGROUP# MEMBER SEQUENCE#
  FROM V$LOG V V$LOGFILE V
  WHERE VGROUP# = VGROUP# ;
  這將列出所有的聯機的重做日志和他們的序號及首次改變號 (first change numbers)
  
   得用聯機日志及歸檔日志恢復那個文件
  RECOVER DATAFILE <full_path_file_name>
  
   確認所有的日志都被恢復只到你收到 Media recovery complete 信息
  
   使這個數據文件 online
  ALTER DATABASE DATAFILE <full_path_file_name> ONLINE;
  
  方法 IIB: 重建回滾表空間
  
  這種方法不必考慮數據庫是否是歸檔模式的
  
  步驟如下
  
   試圖脫機所有的丟失或損壞數據文件所在回滾表空間中所包含的回滾段
  ALTER ROLLBACK SEGMENT <rollback_segment> OFFLINE;
  重復執行這個命令直到所包含的回滾段都脫機
  
   檢查回滾段的狀態
  在 drop 掉它們之前它們必需是 offline 狀態的
  SELECT SEGMENT_NAME STATUS FROM DBA_ROLLBACK_SEGS
  WHERE TABLESPACE_NAME = <TABLESPACE_NAME>;
  
   刪除掉所有脫機的 c
  DROP ROLLBACK SEGMENT <rollback_segment>;
  
   處理那些保持 online 狀態的回滾段
  重復執行 一下的命令如果回滾段在執行 中命令仍保扭虧為盈 ONLINE 狀態意味著它之中有活動的事務你可以用如下的查詢來確認一下
  SELECT SEGMENT_NAME XACTS ACTIVE_TX VSTATUS
  FROM V$ROLLSTAT V DBA_ROLLBACK_SEGS
  WHERE TABLESPACE_NAME = <TABLESPACE_NAME> AND SEGMENT_ID = USN;
  如果這個查詢沒有結果返回意味著沒有事務在這些回滾段中了哪果有結果返回那些不能 offline 的回滾段的狀態應為 PENDING OFFLINE 可以用 中的方法把這些事務殺掉
  
   強制使有活動事務的回滾段脫機
  執行如下查詢看這些 PENDING OFFLINE 的回滾段包含哪些事務
  SELECT SSID SSERIAL# SUSERNAME RNAME ROLLBACK
  FROM V$SESSION S V$TRANSACTION T V$ROLLNAME R
  WHERE RNAME IN (<PENDING_ROLLBACK_> <PENDING_ROLLBACK_N>)
  AND STADDR = TADDR AND TXIDUSN = RUSN;
  
  用 ALTER SYSTEM KILL SESSION <SID> <SERIAL#>; 語句殺掉這些事務重復執行上面的查詢直到沒有事務存在這時運行一下 中的查詢確認這些回滾段己經處於 offline 狀態 並用 中的語句把它們 drop 掉
  
   刪除這個回滾表空間
  DROP TABLESPACE <tablespace_name> INCLUDING CONTENTS;
  如果語句執行失敗請與 oracle 技術支持聯系否則轉向
  
   重建回滾段表空間
  
   重建回滾段並使它們聯機 (online)
  
  回滾段表空間的數據文件丟失或損壞在實際中是比較棘手和常見的產生這種問題 的原回很多的比如介質的損壞人為的誤操作機器的突然的斷電等等
  
  建議沒實踐過這種操作的 oracle 的愛好者可以模擬一下這種故障實際實測一下注意一定要在測試庫我模擬的方法如下
  
   單獨建了一個 rbs 表空間並在這個表空間建了一個回滾段 rbs_test
  
   指定一個 transaction 用這個回滾段
  
  sql>set transaction use rollback segment rbs_test;
  
  sql>insert into test values ();
  
  sql>insert into test values();
  
   另開一個 telnet 窗口 telnet 至主機執行如下命令 :
  
  sqlplus /nolog
  
  sql>conn / as sysdba
  
  sql>shutdown abort
  
   把新加的那個回滾段表空間的數據文件更個名
From:http://tw.wingwit.com/Article/program/Oracle/201311/17125.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.