Oracle備份與恢復【丟失資料檔案的恢復】
建立一個新的資料檔案:
sys@LYON> create tablespace ttbs datafile '/data/lyon/ttbs01.dbf'
2 size 10m uniform. size 1m
3 segment space management auto
4 extent management local;
Tablespace created.
Elapsed: 00:00:00.77
建一個測試表:
sys@LYON> create table ttab(x int) tablespace ttbs;
Table created.
Elapsed: 00:00:00.26
加入一些測試資料
sys@LYON> insert into ttab(x)
2 select rownum from dual
3 connect by rownum <= 10;
10 rows created.
Elapsed: 00:00:00.01
sys@LYON> commit;
Commit complete.
Elapsed: 00:00:00.01
sys@LYON> select * from ttab;
X
----------
1
2
3
4
5
6
7
8
9
10
10 rows selected.
Elapsed: 00:00:00.04
刪除資料檔案:
sys@LYON> !rm -f ttbs01.dbf
再次查詢ttab,發現居然還能查到資料:
sys@LYON> select * from ttab;
X
----------
1
2
3
4
5
6
7
8
9
10
10 rows selected.
Elapsed: 00:00:00.03
清空了下快取,發現還是可以執行查詢:
sys@LYON> alter system flush buffer_cache;
System altered.
Elapsed: 00:00:00.24
sys@LYON> select * from ttab;
X
----------
1
2
3
4
5
6
7
8
9
10
10 rows selected.
Elapsed: 00:00:00.01
難道是undo的緣故?嘗試更換一下表空間,看是否會查不到資料:
sys@LYON> create undo tablespace undotbs02 datafile '/data/lyon/undotbs02.dbf' reuse;
Tablespace created.
Elapsed: 00:00:00.55
sys@LYON> alter system set undo_tablespace=undotbs02 scope=memory;
System altered.
Elapsed: 00:00:00.08
發現還是能查詢到:
sys@LYON> select * from ttab;
X
----------
1
2
3
4
5
6
7
8
9
10
10 rows selected.
Elapsed: 00:00:00.01
嘗試了清空閃回區也不行。
最後不知道過了多少時間可以看到執行出錯了:
sys@LYON> select * from ttab;
select * from ttab
*
ERROR at line 1:
ORA-00376: file 5 cannot be read at this time
ORA-01110: data file 5: '/data/lyon/ttbs01.dbf'
Elapsed: 00:00:00.02
看來還是重做日誌的緣故
開始恢復資料檔案:
首先將該檔案offline:
sys@LYON> alter database datafile '/data/lyon/ttbs01.dbf' offline;
Database altered.
Elapsed: 00:00:00.05
然後切換到rman 執行修復(restore)
sys@LYON> !rman target /
Recovery Manager: Release 10.2.0.1.0 - Production on Tue May 25 07:33:47 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
connected to target database: LYON (DBID=1398719310)
RMAN> restore datafile '/data/lyon/ttbs01.dbf';
Starting restore at 25-MAY-10
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=153 devtype=DISK
creating datafile fno=5 name=/data/lyon/ttbs01.dbf
restore not done; all files readonly, offline, or already restored
Finished restore at 25-MAY-10
再執行恢復(這裡將檔名的指定換成了檔案編號5,其實都是一樣的):
RMAN> recover datafile 5;
Starting recover at 25-MAY-10
using channel ORA_DISK_1
starting media recovery
media recovery complete, elapsed time: 00:00:00
Finished recover at 25-MAY-10
RMAN> exit
Recovery Manager complete.
退出恢復管理器,執行查詢:
sys@LYON> select * from ttab;
select * from ttab
*
ERROR at line 1:
ORA-00376: file 5 cannot be read at this time
ORA-01110: data file 5: '/data/lyon/ttbs01.dbf'
Elapsed: 00:00:00.01
sys@LYON> alter database datafile 5 online;
Database altered.
Elapsed: 00:00:00.04
sys@LYON> select * from ttab;
X
----------
1
2
3
4
5
6
7
8
9
10
10 rows selected.
Elapsed: 00:00:00.01
至此,歸檔模式下的資料檔案丟失已經完成了。
上面是呼叫了rman進行恢復的情況,還有一種是不用rman,直接用sqlplus進行恢復:
刪除資料檔案:
[oracle@localhost lyon]$ rm -f ttbs01.dbf
在sys使用者下建立新的資料檔案,作為丟失的資料檔案:
直接建立會報錯(檔案在使用中或需要恢復):
sys@LYON> alter database create datafile '/data/lyon/ttbs01.dbf' as '/data/lyon/ttbs01.dbf';
alter database create datafile '/data/lyon/ttbs01.dbf' as '/data/lyon/ttbs01.dbf'
*
ERROR at line 1:
ORA-01182: cannot create database file 5 - file is in use or recovery
ORA-01110: data file 5: '/data/lyon/ttbs01.dbf'
Elapsed: 00:00:00.01
所以首先將該資料檔案offline:
sys@LYON> alter database datafile 5 offline;
Database altered.
Elapsed: 00:00:00.08
然後再建立檔案:
sys@LYON> alter database create datafile '/data/lyon/ttbs01.dbf' as '/data/lyon/ttbs01.dbf';
Database altered.
Elapsed: 00:00:00.51
假設資料檔案是一個裝著資料的盒子,那麼這個步驟實際上相當於我先按照丟失的那個資料檔案的樣子做個空盒子
然後在恢復的時候從重做日誌中將資料取出來再放到這個空盒子中
如果沒有恢復,是不能直接online的:
sys@LYON> alter database datafile 5 online;
alter database datafile 5 online
*
ERROR at line 1:
ORA-01113: file 5 needs media recovery
ORA-01110: data file 5: '/data/lyon/ttbs01.dbf'
Elapsed: 00:00:00.02
開始恢復(將資料取出來放到盒子中):
sys@LYON> recover datafile 5;
Media recovery complete.
sys@LYON> alter database datafile 5 online;
Database altered.
Elapsed: 00:00:00.03
於是,不用rman進行的恢復也完成了。
小結:
這次恢復的前提是要求在歸檔模式下,且對應的從開始到資料檔案丟失前的重做日誌都還存在
才能確保在此種模式下正確的恢復資料。
執行恢復的幾個主要步驟:
1、將丟失的資料檔案offline;
2、使用rman修復資料檔案(restore datafile 5)或者建立新的資料檔案(alter database create datafile xxx as xxx;)
3、恢復資料檔案(recover datafile 5)。
4、將恢復後的資料檔案online;
這樣恢復就完成了。
另外,之前提到的,資料檔案丟失後,短時間內還能對在資料檔案中的表進行查詢的問題。
不知道是不是我忽略了一個Oracle的某種機制。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-663761/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 備份恢復之資料檔案丟失
- Oracle備份與恢復【丟失控制檔案的恢復】Oracle
- rman恢復--歸檔模式有備份,丟失資料檔案的恢復模式
- rman恢復--歸檔模式無備份,丟失資料檔案的恢復模式
- 備份與恢復--資料檔案損壞或丟失
- 【備份恢復】非歸檔模式下丟失任意資料檔案 恢復操作模式
- 備份與恢復系列 九 丟失表空間資料檔案的還原與恢復
- 【備份恢復】恢復 丟失已歸檔重做日誌檔案
- 【備份恢復】 丟失一個控制檔案 之恢復操作
- RMAN資料庫恢復 之歸檔模式有(無)備份-丟失資料檔案的恢復資料庫模式
- oracle實驗記錄(恢復-丟失未備份資料檔案)Oracle
- 【備份恢復】歸檔模式下丟失系統關鍵資料檔案 利用RMAN備份恢復模式
- 歸檔模式無備份丟失資料檔案後恢復模式
- 歸檔模式有備份丟失資料檔案後恢復模式
- 資料檔案丟失的恢復
- 備份與恢復系列 八 丟失所有資料檔案的還原與恢復
- RMAN恢復案例:丟失全部資料檔案恢復
- 【rman 備份與恢復】恢復丟失所有的控制檔案
- 資料檔案丟失如何恢復
- 無備份丟失部分資料檔案和控制檔案恢復 [轉]
- 備份與恢復--利用備份的控制檔案恢復
- 【備份恢復】所有控制檔案丟失後 利用trace中的控制檔案備份執行恢復
- 沒備份,歸檔日誌存在,丟失資料檔案的恢復
- Oracle Password檔案丟失的恢復Oracle
- 只有rman備份集,控制檔案丟失的恢復
- ORACLE 只讀資料檔案備份與恢復Oracle
- 【備份恢復】Oracle 資料備份與恢復微實踐Oracle
- Oracle RMAN 不完全恢復(只有資料檔案備份,丟失歸檔日誌備份)Oracle
- 備份與恢復系列 十一 控制檔案的備份與恢復
- 備份與恢復(Parameter 檔案恢復篇)
- 恢復案例:歸檔模式下丟失全部資料檔案的恢復模式
- RMAN恢復案例:丟失非系統資料檔案恢復
- 【恢復】Redo日誌檔案丟失的恢復
- 備份與恢復--重建控制檔案後資料檔案損壞的恢復
- 【備份與恢復】控制檔案的恢復(不完全恢復)
- 備份恢復實驗(1)丟失部分控制檔案
- oracle實驗記錄 (恢復-恢復未備份的資料檔案)Oracle
- RMAN完全恢復丟失的資料檔案