Oracle不同檔案丟失/損壞的恢復方法
一、SPFILE丟失
步驟:
RMAN> set dbid 1354067853;
RMAN> restore spfile from autobackup;
或者通過某個檔案:
RMAN> restore spfile from ‘path/file_name’;
RMAN> shutdown immediate;
set dbid 1354067853;
startup;
測試:
SQL> startup --刪除SPFILE後,資料庫打不開,報錯。
ORA-01078: failure in processing system parameters
LRM-00109: ???????????????? 'E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\INITSORCL.ORA'
C:\Users\Administrator>rman target / --使用RMAN
恢復管理器: Release 10.2.0.3.0 - Production on 星期三 11月 13 09:38:35 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
已連線到目標資料庫 (未啟動)
RMAN> startup nomount; --使用RMAN在無SPFILE下啟動到nomount
啟動失敗: ORA-01078: failure in processing system parameters
LRM-00109: ???????????????? 'E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\INITSORCL.ORA'
在沒有引數檔案的情況下啟動 Oracle 例項以檢索 spfile
Oracle 例項已啟動
系統全域性區域總計 159383552 位元組
Fixed Size 1289436 位元組
Variable Size 58721060 位元組
Database Buffers 92274688 位元組
Redo Buffers 7098368 位元組
RMAN> set dbid 1354067853; --設定DBID
正在執行命令: SET DBID
RMAN> restore spfile from autobackup;
啟動 restore 於 13-11月-13
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20131113
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20131112
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20131111
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20131110
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20131109
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20131108
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20131107
通道 ORA_DISK_1: 沒有找到 7 天之內的自動備份
--沒有自動備份
RMAN> restore spfile from 'E:\oracle\product\10.2.0\flash_recovery_area\ORCL\BACKUPSET\2013_11_13\O1
_MF_NCSNF_TAG20131113T092124_985O1HY9_.BKP';
啟動 restore 於 13-11月-13
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 已找到的自動備份: E:\oracle\product\10.2.0\flash_recovery_area\ORCL\BACKUPSET\2013_
11_13\O1_MF_NCSNF_TAG20131113T092124_985O1HY9_.BKP
通道 ORA_DISK_1: 從自動備份復原 SPFILE 已完成
完成 restore 於 13-11月-13
--從指定備份檔案中恢復
RMAN> shutdown immediate;
Oracle 例項已關閉
SQL> startup --啟動資料庫
ORACLE 例程已經啟動。
Total System Global Area 377487360 bytes
Fixed Size 1290688 bytes
Variable Size 339742272 bytes
Database Buffers 29360128 bytes
Redo Buffers 7094272 bytes
資料庫裝載完畢。
資料庫已經開啟。
步驟:
RMAN> set dbid 1354067853;
RMAN> startup nomount;
RMAN> restore controlfile from autobackup;
或者從指定檔案恢復:
RMAN> restore controlfile from ‘path/file_name’;
RMAN> alter database mount;
RMAN> recover database;(保證資料一致,因為控制檔案裡scn發生改變)
RMAN> alter database open resetlogs;
測試:
SQL> startup; --啟動資料庫報錯
ORACLE instance started.
Total System Global Area 377487360 bytes
Fixed Size 1290688 bytes
Variable Size 356519488 bytes
Database Buffers 12582912 bytes
Redo Buffers 7094272 bytes
ORA-00205: error in identifying control file, check alert log for more info
SQL> select status from v$instance;
STATUS
------------
STARTED
SQL> select * from v$database;
select * from v$database
*
ERROR at line 1:
ORA-01507: database not mounted
SQL> shutdown abort;
ORACLE instance shut down.
C:\Users\Administrator>rman target / --使用RMAN
恢復管理器: Release 10.2.0.3.0 - Production on 星期三 11月 13 10:47:59 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
已連線到目標資料庫 (未啟動)
RMAN> set dbid 1354067853; --設定DBID
正在執行命令: SET DBID
RMAN> startup nomount; --啟動至nomount
Oracle 例項已啟動
系統全域性區域總計 377487360 位元組
Fixed Size 1290688 位元組
Variable Size 360713792 位元組
Database Buffers 8388608 位元組
Redo Buffers 7094272 位元組
RMAN> restore controlfile from autobackup;
啟動 restore 於 13-11月-13
使用目標資料庫控制檔案替代恢復目錄
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=157 devtype=DISK
恢復區域目標: E:\oracle\product\10.2.0\flash_recovery_area
用於搜尋的資料庫名 (或資料庫的唯一名稱): ORCL
通道 ORA_DISK_1: 在恢復區域中未找到自動備份
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20131113
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20131112
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20131111
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20131110
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20131109
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20131108
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20131107
通道 ORA_DISK_1: 沒有找到 7 天之內的自動備份
--沒有自動備份
RMAN> restore controlfile from 'E:\oracle\product\10.2.0\flash_recovery_area\ORCL\BACKUPSET\2013_11_
13\O1_MF_NCSNF_TAG20131113T092124_985O1HY9_.BKP';
啟動 restore 於 13-11月-13
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在復原控制檔案
通道 ORA_DISK_1: 恢復完成, 用時: 00:00:03
輸出檔名=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROLFILE\O1_MF_985T8O42_.CTL
輸出檔名=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\CONTROLFILE\O1_MF_985T8OHP_.CTL
完成 restore 於 13-11月-13
--使用指定的備份檔案恢復
RMAN> alter database mount; --mount資料庫
資料庫已裝載
釋放的通道: ORA_DISK_1
RMAN> recover database; --恢復資料庫
啟動 recover 於 13-11月-13
啟動 implicit crosscheck backup 於 13-11月-13
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=156 devtype=DISK
已交叉檢驗的 1 物件
完成 implicit crosscheck backup 於 13-11月-13
啟動 implicit crosscheck copy 於 13-11月-13
使用通道 ORA_DISK_1
完成 implicit crosscheck copy 於 13-11月-13
搜尋恢復區域中的所有檔案
正在編制檔案目錄...
目錄編制完畢
已列入目錄的檔案的列表
=======================
檔名: E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_11_13\O1_MF_NCSNF_TAG201311
13T092124_985O1HY9_.BKP
使用通道 ORA_DISK_1
正在開始介質的恢復
存檔日誌執行緒 1 序列 3 已作為檔案 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_3
_93F18M64_.LOG 存在於磁碟上
存檔日誌檔名 =E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_3_93F18M64_.LOG 線
程 =1 序列 =3
介質恢復完成, 用時: 00:00:02
完成 recover 於 13-11月-13
RMAN> alter database open resetlogs; --resetlogs開啟
資料庫已開啟
這種情況在之前的文章中介紹過:
http://space.itpub.net/25744374/viewspace-776419/
這裡再寫一下步驟:
(1)、如果有歸檔和備份,可以用不完全恢復
SQL> startup mount;
SQL> recover database until cancel;先選擇auto,儘量恢復可以利用的歸檔日誌,然後重新執行:
SQL> recover database until cancel;這次輸入cancel,完成不完全恢復,用resetlogs開啟資料庫:
SQL> alter database open resetlogs;
(2)、強制恢復,這種方法可能會導致資料不一致
SQL> startup mount;
SQL> alter system set “_allow_resetlogs_corruption”=true scope=spfile;
SQL> recover database until cancel;
SQL> alter database open resetlogs;
由於使用該方式開啟會造成資料的丟失,且資料庫的狀態不一致,因此,這種情況下oracle建議通過exp方式匯出資料庫,重建新資料庫後,再匯入。
2、非Current損壞
這種情況下的恢復比較簡單,因為redo log是已經完成歸檔或者正在歸檔,沒有正在使用,可以通過v$log檢視redo log的狀態。
(1)、如果status是inactive,則表示已經完成了歸檔,直接清除掉這個redo log即可。
SQL> startup mount;
SQL> alter database clear logfile group 3;
SQL> alter database open;
測試:
SQL> select group#,sequence#,bytes,members,archived,status from v$log;
GROUP# SEQUENCE# BYTES MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---
1 2 52428800 2 YES ACTIVE
2 3 52428800 2 NO CURRENT
3 1 52428800 2 YES INACTIVE
--當前INACTIVE狀態的redo是group3
SQL> shutdown immediate; --關閉資料庫,手工修改破壞group3日誌
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup --資料庫啟動報錯
ORACLE instance started.
Total System Global Area 377487360 bytes
Fixed Size 1290688 bytes
Variable Size 352325184 bytes
Database Buffers 16777216 bytes
Redo Buffers 7094272 bytes
Database mounted.
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_3_93F18LGH_
.LOG'
ORA-00312: online log 3 thread 1: 'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF
_3_93F18M64_.LOG'
--根據提示的錯誤,可以看出是group 3日誌的問題,檢視一下:
SQL> select group#,sequence#,bytes,members,archived,status from v$log;
GROUP# SEQUENCE# BYTES MEMBERS ARC STATUS
---------- ---------- ---------- ---------- --- ----
1 2 52428800 2 YES INACTIVE
3 1 52428800 2 YES INACTIVE
2 3 52428800 2 NO CURRENT
SQL> alter database clear logfile group 3;
Database altered. --清除日誌組3
SQL> alter database open; --開啟資料庫
Database altered.
(2)、如果status是ACTIVE狀態,表示正在歸檔,此時需要使用如下語句:
SQL> startup mount;
SQL> alter database clear unarchived logfile group 3;
SQL> alter database open;
若出現介質故障導致某表空間不可用,恢復可以在資料庫處於open或mount狀態下進行,步驟如下:
1.將該表空間至於offline狀態;
2.修復表空間資料;
3.恢復表空間並處於一致性;
4.將表空間online.
RMAN> sql ‘alter tablespace ts1 offline’;
如果檔案不存在,就加immediate引數:
RMAN> sql ‘alter tablespace ts1 offline immediate’;
RMAN> restore tablespace ts1;
RMAN> recover tablespace ts1;
RMAN> sql ‘alter tablespace ts1 online’;
如果出現介質故障導致某表空間資料檔案丟失(這種情況也可以參照表空間損壞的恢復),恢復可以在資料庫處於open或mount狀態下進行:步驟如下:
1.將資料檔案置於offline狀態;
2.修復資料檔案(指定資料檔案編號);
3.修復資料檔案;
4.將資料檔案online.
RMAN> sql ‘alter datafile 5 offline’;
RMAN> restore datafile 5;
RMAN> recover datafile 5;
RMAN> sql ‘alter datafile 5 online’;
測試:
SQL> startup
ORACLE instance started.
Total System Global Area 377487360 bytes
Fixed Size 1290688 bytes
Variable Size 352325184 bytes
Database Buffers 16777216 bytes
Redo Buffers 7094272 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\TS01.DBF'
--手工修改了表空間ts1的資料檔案,資料庫開啟時報錯
RMAN> restore datafile 5; --restore資料檔案
啟動 restore 於 13-11月-13
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=155 devtype=DISK
通道 ORA_DISK_1: 正在開始恢復資料檔案備份集
通道 ORA_DISK_1: 正在指定從備份集恢復的資料檔案
正將資料檔案00005恢復到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\TS01.DBF
通道 ORA_DISK_1: 正在讀取備份段 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_11_
13\O1_MF_NNNDF_TAG20131113T134432_9864G11O_.BKP
通道 ORA_DISK_1: 已恢復備份段 1
段控制程式碼 = E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_11_13\O1_MF_NNNDF_TAG20131
113T134432_9864G11O_.BKP 標記 = TAG20131113T134432
通道 ORA_DISK_1: 恢復完成, 用時: 00:00:05
完成 restore 於 13-11月-13
RMAN> recover datafile 5; --recover資料檔案
啟動 recover 於 13-11月-13
使用通道 ORA_DISK_1
正在開始介質的恢復
介質恢復完成, 用時: 00:00:03
完成 recover 於 13-11月-13
SQL> alter database open; --啟動資料庫
Database altered.
基於時間點/SCN/日誌序列的不完全恢復,可以將資料庫、表空間、資料檔案等恢復至恢復備份集儲存時間點中的任何一個時間點/SCN/日誌序列,但須謹慎,操作前一定需要做好備份,具備條件的情況下最好先恢復到異機。
1、基於時間點
run{
set until time “to_date(‘11/13/13 13:00:00’,’mm/dd/yy hh24:mi:ss’)”;
restore database;
recover database;
alter database open resetlogs;
}
-------------------------------------------------
SQL> startup nomount;
SQL> alter session set nls_date_format=’yyyy-mm-dd hh24:mi:ss’;
SQL> recover database until time ‘2013-11-13 13:10:00’;
SQL> alter database open resetlogs;
-------------------------------------------------
SQL> startup mount;
SQL> recover database until time “to_date(‘2013-11-13 13:10:00’,’YYYY-MM-DD HH24:MI:SS’)”;
SQL> alter database open resetlogs;
2、基於SCN
RMAN> startup mount;
RMAN> restore database until scn 10000;
RMAN> recover database until scn 10000;
RMAN> alter database open resetlogs;
3、基於日誌序列
RMAN> startup mount;
RMAN> restore database until SEQUENCE 100 thread 1;
//100是日誌序列
RMAN> recover database until SEQUENCE 100 thread 1;
RMAN> alter database open resetlogs;
七、非catalog下完全恢復
RMAN> restore controlfile from autobackup;
RMAN> alter database mount;
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open resetlogs;
測試:
--刪除全部資料檔案、控制檔案
C:\Users\Administrator>rman target /
恢復管理器: Release 10.2.0.3.0 - Production on 星期三 11月 13 16:46:40 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
已連線到目標資料庫 (未啟動)
RMAN> startup nomount;
Oracle 例項已啟動
系統全域性區域總計 377487360 位元組
Fixed Size 1290688 位元組
Variable Size 352325184 位元組
Database Buffers 16777216 位元組
Redo Buffers 7094272 位元組
--restore控制檔案
RMAN> restore controlfile from 'E:\oracle\product\10.2.0\flash_recovery_area\ORCL\BACKUPSET\2013_11_
13\O1_MF_NCSNF_TAG20131113T163801_986GN47H_.BKP';
啟動 restore 於 13-11月-13
使用目標資料庫控制檔案替代恢復目錄
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=157 devtype=DISK
通道 ORA_DISK_1: 正在復原控制檔案
通道 ORA_DISK_1: 恢復完成, 用時: 00:00:01
輸出檔名=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROLFILE\O1_MF_986H53FG_.CTL
輸出檔名=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\CONTROLFILE\O1_MF_986H53RV_.CTL
完成 restore 於 13-11月-13
RMAN> alter database mount; --mount資料庫
資料庫已裝載
釋放的通道: ORA_DISK_1
RMAN> recover database; --恢復資料庫
啟動 recover 於 13-11月-13
使用通道 ORA_DISK_1
正在開始介質的恢復
存檔日誌執行緒 1 序列 1 已作為檔案 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_1
_93F18H07_.LOG 存在於磁碟上
存檔日誌檔名 =E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_1_93F18H07_.LOG 線
程 =1 序列 =1
介質恢復完成, 用時: 00:00:03
完成 recover 於 13-11月-13
RMAN> alter database open resetlogs;
資料庫已開啟
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25744374/viewspace-776521/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料檔案丟失損壞的恢復--
- REDO檔案丟失或者損壞的恢復
- Oracle重做日誌檔案損壞或丟失後的恢復Oracle
- rman 恢復---歸檔丟失and資料檔案損壞
- oracle控制檔案的損壞或完全丟失的恢復辦法Oracle
- 磁碟損壞導致資料檔案丟失的恢復
- INDEX表空間檔案丟失或者損壞的恢復Index
- coreldraw檔案丟失(損壞)的恢復處理辦法
- 備份與恢復--資料檔案損壞或丟失
- RMAN_部分資料檔案丟失或者損壞的恢復
- TEMP表空間的檔案丟失或損壞後的恢復
- 損壞控制檔案的恢復方法
- Oracle Password檔案丟失的恢復Oracle
- undo檔案丟失或損壞
- 資料檔案損壞、丟失
- 2.7.10 恢復丟失或損壞的伺服器引數檔案(SPFILE)伺服器
- Oracle聯機日誌檔案丟失或損壞的處理方法Oracle
- Oracle 各種檔案丟失的恢復Oracle
- 線上日誌檔案損壞恢復方法
- 探索ORACLE之RMAN_07 磁碟損壞資料丟失恢復Oracle
- ORACLE聯機日誌檔案丟失或損壞的處理方法(轉)Oracle
- Oracle聯機日誌檔案丟失或損壞的處理方法 (轉)Oracle
- 普通資料檔案丟失的恢復方法
- oracle丟失日誌檔案的恢復( 轉)Oracle
- 還是Oracle的資料庫破壞試驗,針對不同檔案的丟失進行恢復Oracle資料庫
- 恢復丟失的控制檔案
- [20150619]undo檔案損壞或者丟失的恢復1
- [20150619]undo檔案損壞或者丟失的恢復2
- [20150619]undo檔案損壞或者丟失的恢復3
- Recovery from missing or corrupted datafile(多個資料檔案丟失或者損壞的恢復)
- 控制檔案丟失恢復
- 【控制檔案丟失恢復】
- Oracle備份與恢復【丟失資料檔案的恢復】Oracle
- 備份&恢復之五:歸檔模式下丟失或損壞一個資料檔案模式
- u盤檔案損壞怎麼恢復資料 u盤恢復損壞資料的有效方法
- 還是Oracle的資料庫破壞試驗,RMAN針對不同檔案的丟失進行恢復Oracle資料庫
- 【恢復】Redo日誌檔案丟失的恢復
- 單個控制檔案損壞的恢復