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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 電腦檔案丟失資料恢復資料恢復
- 備份與恢復:polardb資料庫備份與恢復資料庫
- dg丟失歸檔,使用rman增量備份恢復
- 【資料庫資料恢復】mdb_catalog.wt檔案丟失的MongoDB資料恢復案例資料庫資料恢復MongoDB
- 【伺服器資料恢復】xfs檔案系統資料丟失的資料恢復案例伺服器資料恢復
- 【北亞資料恢復】MongoDB資料遷移檔案丟失的MongoDB資料恢復案例資料恢復MongoDB
- 【資料庫資料恢復】Sql Server資料庫檔案丟失的資料恢復過程資料庫資料恢復SQLServer
- Oracle 備份 與 恢復 概述Oracle
- 剪下的檔案還能恢復嗎,恢復剪貼丟失的檔案
- Sql Server資料庫檔案丟失的恢復方法SQLServer資料庫
- Oracle Redo丟失恢復方案Oracle
- Mysql資料備份與恢復MySql
- RAC備份恢復之Voting備份與恢復
- DATA GUARD主庫丟失資料檔案的恢復(3)
- DATA GUARD主庫丟失資料檔案的恢復(1)
- DATA GUARD主庫丟失資料檔案的恢復(2)
- 資料庫資料恢復—MongoDB資料庫檔案丟失,啟動報錯的資料恢復案例資料庫資料恢復MongoDB
- 備份與恢復oracle_homeOracle
- 分割槽丟失資料恢復資料恢復
- 硬碟資料丟失如何恢復?硬碟
- 【虛擬機器資料恢復】Hyper-V虛擬化檔案丟失的資料恢復案例虛擬機資料恢復
- 丟失的隨身碟檔案如何恢復?
- Oracle閃回功能恢復偶然丟失的資料(轉)Oracle
- 伺服器資料丟失了怎麼恢復/分割槽丟失恢復教程伺服器
- Oracle使用備份檔案集恢復歸檔日誌Oracle
- macOS Big Sur系統如何恢復丟失的資料檔案?Mac
- 【資料庫資料恢復】斷電導致Oracle資料庫資料丟失的資料恢復案例資料庫資料恢復Oracle
- RabbitMQ如何備份與恢復資料MQ
- postgresql備份與恢復資料庫SQL資料庫
- Oracle 12c 備份與恢復Oracle
- XFS檔案系統的備份、恢復、修復
- MySQL備份與恢復——基於Xtrabackup物理備份恢復MySql
- 資料庫備份恢復資料庫
- 怎樣恢復Mac檔案及資料夾資料?BackupLoupe for mac(資料恢復備份助手)3.5.4Mac資料恢復
- chkdsk 後資料丟失的恢復方法
- ORACLE備份&恢復案例(轉)Oracle
- Oracle 備份恢復之 FlashbackOracle
- oracle控制檔案的損壞或完全丟失的恢復辦法Oracle
- 備份與恢復:Polardb資料庫資料基於時間點恢復資料庫