表空間不完全恢復(全備--備份控制檔案--刪除表空間andy--日誌檔案)
為什麼會使用備份的控制檔案? 實際工作中主要有兩種情況:
第一種:當前控制檔案全部損壞,而資料檔案備份,控制檔案備份及當前日誌處於不同SCN版本,它們之間又增加過表空間(資料檔案)。
第二種:當前控制檔案沒有損壞,但想要恢復被刪除的表空間。
實驗3 :全備<老>--備份控制檔案<次新>--刪除表空間andy--日誌檔案<新>
情形:使用者使用正常操作命令刪除了表空間及其資料檔案,但之後又希望恢復刪除的表空間。全備裡有這個表空間的資料檔案。
分析:當使用者使用drop tablesapce xxx including contents and datafiles 這條DDL語句後,資料庫的結構發生了變更,涉及了三個地方。
a)控制檔案
b)該表空間下的資料檔案
c)系統表空間(資料字典)
特別提醒的是:當前的控制檔案裡已經沒有該表空間的資訊了,所以不能使用當前的控制檔案做恢復。恢復這個表空間要滿足三個條件:
a)要有該表空間的資料檔案備份
b)使用不完全恢復(基於時間點或scn)
c)使用備份的控制檔案,而這個控制檔案是刪除該表空間前的控制檔案,不是當前的控制檔案。這個非常重要,該控制檔案中的內容記錄了你需要恢復資料庫結構,重要的這個控制檔案必須包括有你要恢復的那個表空間的資訊。
1)準備環境
--生成要備份的資料檔案的命令
SQL> select 'ho cp ' || name || ' /home/oracle/coldbak' from v$datafile;
'HOCP'||NAME||'/HOME/ORACLE/COLDBAK'
-------------------------------------------------------------------------
ho cp /home/oracle/app/oradata/orcl/system01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/sysaux01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/undotbs01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/users01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/tbtb01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/ogg01.dbf /home/oracle/coldbak
6 rows selected.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> ho cp /home/oracle/app/oradata/orcl/system01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/sysaux01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/undotbs01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/users01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/tbtb01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/ogg01.dbf /home/oracle/coldbak
SQL> startup;
ORACLE instance started.
Total System Global Area 1068937216 bytes
Fixed Size 2220200 bytes
Variable Size 729812824 bytes
Database Buffers 331350016 bytes
Redo Buffers 5554176 bytes
Database mounted.
Database opened.
SQL> alter database backup controlfile to '/home/oracle/coldbak/ctl01.bak';
Database altered.
SQL> select name from v$tablespace;
NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
USERS
TEMP
LZY
GOLDGATE
SQL> create tablespace andy datafile '/home/oracle/app/oradata/orcl/andy01.dbf' size 1m;
Tablespace created.
SQL> create table andy.andy(id int) tablespace andy;
Table created.
SQL> insert into andy.andy values (101);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from andy.andy;
ID
----------
101
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
2042681
2)模擬正常刪除表空間
SQL> drop tablespace andy including contents and datafiles;
3) 關閉資料庫
SQL> shutdown immediate;
4)還原所有資料檔案,以老控制檔案替換當前控制檔案
[oracle@11g orcl]$ rm -rf *.dbf
[oracle@11g orcl]$ rm -rf /home/oracle/app/oradata/orcl/control01.ctl
[oracle@11g orcl]$ rm -rf /home/oracle/app/flash_recovery_area/orcl/control02.ctl
[oracle@11g coldbak]$ cp ctl01.bak /home/oracle/app/oradata/orcl/control01.ctl
[oracle@11g coldbak]$ cp ctl01.bak /home/oracle/app/flash_recovery_area/orcl/control02.ctl
[oracle@11g coldbak]$ cp *.dbf /home/oracle/app/oradata/orcl/
5)啟動資料庫後,要做基於時間點(或SCN)的不完全恢復
SQL> startup;
ORACLE instance started.
Total System Global Area 1068937216 bytes
Fixed Size 2220200 bytes
Variable Size 729812824 bytes
Database Buffers 331350016 bytes
Redo Buffers 5554176 bytes
Database mounted.
ORA-01589: 要開啟資料庫則必須使用 RESETLOGS 或 NORESETLOGS 選
SQL> recover database until change 2042681 using backup controlfile;
6)resetlogs開啟資料庫
SQL> alter database open resetlogs;
Database altered.
7)驗證
SQL> select * from andy.andy;
ID
----------
101
OK,結束。 轉載請標明出處。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2132359/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 不完全恢復(全備--備份控制檔案--新建表空間andy--日誌檔案)
- 不完全恢復(資料檔案備份--新建表空間--控制檔案備份--日誌歸檔檔案)
- undo表空間檔案丟失恢復(1)--有備份
- 刪除表空間和表空間包含的檔案
- 【管理篇備份恢復】rman恢復測試(一) 表空間資料檔案
- Oracle 11g 表空間的誤刪除前傳, 有關控制檔案的備份和恢復(預熱)Oracle
- rman恢復資料檔案 恢復表空間
- 全備份情況下,刪除控制檔案及恢復
- 歸檔模式下,offline表空間備份與恢復模式
- 【物理熱備】(下)備份恢復系統表空間 手工備份恢復
- RMAN恢復表空間,資料檔案,歸檔檔案,控制檔案等介紹
- 無新表空間資料檔案備份,歸檔都存在的還原與恢復
- Oracle rman 備份與恢復 臨時表空間的檔案問題解決Oracle
- 系統表空間檔案丟失無備份用控制程式碼的辦法恢復
- mysql無備份恢復-獨立表空間MySql
- 表空間級資料庫備份恢復資料庫
- 備份與恢復系列 九 丟失表空間資料檔案的還原與恢復
- undo表空間檔案丟失恢復(2)--無備份有redo的情況下恢復
- undo表空間檔案丟失恢復(3)--無備份無redo的情況下恢復
- undo表空間檔案丟失恢復(4)--無備份無recover的情況下恢復
- system表空間檔案損壞----完全恢復
- UNDO 表空間檔案損壞的恢復
- DB2 使用表空間備份恢復庫DB2
- oracle誤刪除表空間的資料檔案Oracle
- 表空間&資料檔案和控制檔案(zt)
- 大檔案表空間
- 【備份與恢復】控制檔案的恢復(不完全恢復)
- 移動資料檔案、系統表空間檔案、臨時表空間檔案
- 刪除表空間,有rman全備的恢復(使用dbms_backup_restore來進行恢復)REST
- Oracle 11g 表空間的誤刪除, 當前的控制檔案不識別該表空間Oracle
- Oracle RMAN 不完全恢復(只有資料檔案備份,丟失歸檔日誌備份)Oracle
- 【備份恢復】利用 備份控制檔案到指定目錄下的控制檔案 恢復控制檔案
- 【學習日記】oracle之表空間、資料檔案、控制檔案Oracle
- 非系統表空間損壞,rman備份恢復
- mysql 無備份恢復drop資料-共享表空間MySql
- 控制檔案 線上日誌 回滾表空間 筆記筆記
- 如何正確的刪除表空間資料檔案
- oracle刪除(釋放)資料檔案/表空間流程Oracle