濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > [Oracle] 解析在沒(méi)有備份的情況下undo損壞怎么辦

[Oracle] 解析在沒(méi)有備份的情況下undo損壞怎么辦

熱門標(biāo)簽:百度地圖標(biāo)注素材 征服眼公司地圖標(biāo)注 征服者火車站地圖標(biāo)注 阿爾巴尼亞地圖標(biāo)注app 開(kāi)封智能外呼系統(tǒng)廠家 美圖秀秀地圖標(biāo)注 人工智能地圖標(biāo)注自己能做嗎 外呼線路外顯本地號(hào)碼 word地圖標(biāo)注方向

如果Oracle在運(yùn)行中很不幸遇到undo損壞,當(dāng)然最好的方法是完全恢復(fù),不過(guò)如果沒(méi)有備份,可以采用一種非常規(guī)的手段(利用Oracle的隱藏參數(shù)),如果此時(shí)undo包含未提交的事務(wù),會(huì)造成一點(diǎn)點(diǎn)的數(shù)據(jù)丟失(一般都是可忍受的),如果沒(méi)有未提交的事務(wù),則不會(huì)有數(shù)據(jù)丟失。其主要步驟有:

1. 修改undo表空間管理為手動(dòng);
2. 設(shè)置隱藏參數(shù)(_offline_rollback_segments或_corrupted_rollback_segments)標(biāo)識(shí)受影響的回滾段,使Oracle忽略其上的未提交事務(wù);
3. 手動(dòng)刪除受影響的回滾段和undo表空間,然后重建新的undo表空間;
4. 還原undo表空間管理為自動(dòng)。

實(shí)驗(yàn)如下:
Step 1.
如果undo數(shù)據(jù)文件損壞,數(shù)據(jù)庫(kù)只能到mount狀態(tài),open時(shí)會(huì)出現(xiàn)以下錯(cuò)誤:
ORA-01157: cannot identify/lock data file 14 - see DBWR trace file
ORA-01110: data file 14: 'I:\INTEL_DATA\O06DMS0\UNDO1.O06DMS0'
說(shuō)明該undo文件已經(jīng)損壞或丟失,把該文件offline之后就可以打開(kāi)數(shù)據(jù)庫(kù)了:
SQL> alter database datafile 'I:\INTEL_DATA\O06DMS0\UNDO1.O06DMS0' offline drop;
SQL> alter database open;
打開(kāi)數(shù)據(jù)庫(kù)的目的是為了找出受影響的回滾段:
SQL> select segment_name,status from dba_rollback_segs;

SEGMENT_NAME                   STATUS
------------------------------ ----------------
SYSTEM                         ONLINE
_SYSSMU10_1201331463$          OFFLINE
_SYSSMU9_2926456744$           OFFLINE
_SYSSMU8_640224757$            OFFLINE
_SYSSMU7_3984293596$           OFFLINE
_SYSSMU6_3694658906$           OFFLINE
_SYSSMU5_3475919656$           OFFLINE
_SYSSMU4_168502732$            OFFLINE
_SYSSMU3_1987193959$           OFFLINE
_SYSSMU2_3908286755$           OFFLINE
_SYSSMU1_3281912951$           OFFLINE

SQL> show parameter undo

NAME                                 TYPE        VALUE
------------------------------------ ----------- -------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      undo1
關(guān)閉數(shù)據(jù)庫(kù):
SQL> shutdown immediate;

Step 2.
創(chuàng)建一個(gè)臨時(shí)的pfile:
SQL> create pfile='H:\initO06DMS0.ora' from spfile;
修改pfile如下:
*.undo_management='manual'   -- undo表空間管理方式修改為手動(dòng)
*.undo_tablespace='undo2'     --指定一個(gè)新的undo表空間
*._offline_rollback_segments=('_SYSSMU10_1201331463$','_SYSSMU9_2926456744$','_SYSSMU8_640224757$','_SYSSMU7_3984293596$','_SYSSMU6_3694658906$','_SYSSMU5_3475919656$','_SYSSMU4_168502732$','_SYSSMU3_1987193959$','_SYSSMU2_3908286755$','_SYSSMU1_3281912951$')  --把所有受影響的回滾段都列在這里
并以改pfile重新啟動(dòng)數(shù)據(jù)庫(kù):
SQL> startup pfile='H:\initO06DMS0.ora'

Step 3.
手動(dòng)刪除受影響的回滾段:
SQL>drop rollback segment "_SYSSMU10_1201331463$";
SQL>drop rollback segment "_SYSSMU9_2926456744$";
SQL>drop rollback segment "_SYSSMU8_640224757$";
SQL>drop rollback segment "_SYSSMU7_3984293596$";
SQL>drop rollback segment "_SYSSMU6_3694658906$";
SQL>drop rollback segment "_SYSSMU5_3475919656$";
SQL>drop rollback segment "_SYSSMU4_168502732$";
SQL>drop rollback segment "_SYSSMU3_1987193959$";
SQL>drop rollback segment "_SYSSMU2_3908286755$";
SQL>drop rollback segment "_SYSSMU1_3281912951$";
手動(dòng)刪除舊的undo表空間:
SQL> drop tablespace undo1 including contents;
重建新的undo表空間:
SQL> create undo tablespace undo2 datafile 'I:\INTEL_DATA\O06DMS0\UNDO2.O06DMS0' size 100m;
創(chuàng)建新的spfile,覆蓋舊的spfile:
SQL> create spfile from pfile='H:\initO06DMS0.ora';
關(guān)閉數(shù)據(jù)庫(kù):
SQL> shutdown immediate;

Step 4.
以原來(lái)的spfile啟動(dòng)數(shù)據(jù)庫(kù):
SQL> startup;
還原undo表空間管理為自動(dòng):
SQL> alter system set undo_management='auto' scope=spfile;
取消隱藏參數(shù)的設(shè)置:
SQL> alter system reset "_offline_rollback_segments" scope=spfile;
重啟使其生效:
SQL> shutdown immediate;
SQL> startup
SQL> show parameter undo

NAME                                 TYPE        VALUE
------------------------------------ ----------- -------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      undo2

最終檢查一下:
SQL> select segment_name,status from dba_rollback_segs;

SEGMENT_NAME                   STATUS
------------------------------ ----------------
SYSTEM                         ONLINE
_SYSSMU40_1968985325$          ONLINE
_SYSSMU39_4040503138$          ONLINE
_SYSSMU38_4059847715$          ONLINE
_SYSSMU37_2692202156$          ONLINE
_SYSSMU36_2617425201$          ONLINE
_SYSSMU35_1133967719$          ONLINE
_SYSSMU34_1916939664$          ONLINE
_SYSSMU33_99444166$            ONLINE
_SYSSMU32_162619813$           ONLINE
_SYSSMU31_830375278$           ONLINE

您可能感興趣的文章:
  • Oracle數(shù)據(jù)塊損壞之10231內(nèi)部事件不完全恢復(fù)
  • ORACLE檢查找出損壞索引(Corrupt Indexes)的方法詳解
  • Oracle數(shù)據(jù)庫(kù)的備份與恢復(fù)
  • Oracle誤刪除表數(shù)據(jù)后的數(shù)據(jù)恢復(fù)詳解
  • oracle冷備份恢復(fù)和oracle異機(jī)恢復(fù)使用方法
  • oracle如何恢復(fù)被覆蓋的存儲(chǔ)過(guò)程
  • Oracle數(shù)據(jù)庫(kù)數(shù)據(jù)丟失恢復(fù)的幾種方法總結(jié)
  • oracle drop table(表)數(shù)據(jù)恢復(fù)方法
  • ORACLE 數(shù)據(jù)庫(kù)RMAN備份恢復(fù)
  • Oracle數(shù)據(jù)庫(kù)不同損壞級(jí)別的恢復(fù)教程

標(biāo)簽:淮南 六安 酒泉 孝感 葫蘆島 宜春 泰安 海北

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《[Oracle] 解析在沒(méi)有備份的情況下undo損壞怎么辦》,本文關(guān)鍵詞  Oracle,解析,在,沒(méi)有,備份,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《[Oracle] 解析在沒(méi)有備份的情況下undo損壞怎么辦》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于[Oracle] 解析在沒(méi)有備份的情況下undo損壞怎么辦的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    灵璧县| 林甸县| 石棉县| 阳曲县| 新沂市| 杂多县| 绥化市| 巴里| 扶绥县| 西林县| 积石山| 武隆县| 余姚市| 西盟| 汤阴县| 澎湖县| 五峰| 西乌珠穆沁旗| 客服| 文水县| 新干县| 宣武区| 亚东县| 临洮县| 德江县| 射洪县| 璧山县| 迭部县| 冷水江市| 宁远县| 东海县| 哈巴河县| 博野县| 台中市| 东安县| 德安县| 邢台县| 东阳市| 稻城县| 嘉善县| 安乡县|