表空間不完全恢復(全備--備份控制檔案--刪除表空間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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SYSTEM 表空間管理及備份恢復
- Oracle 表空間增加檔案Oracle
- Oracle使用備份檔案集恢復歸檔日誌Oracle
- 新建的表空間(或資料檔案)丟失以及控制檔案丟失,有新建表空間(或資料檔案)前的控制文
- MySQL 遷移表空間,備份單表MySql
- Linux檔案刪除空間未釋放Linux
- 【PG備份恢復】pg_basebackup 多表空間備份恢復測試
- Tablespace表空間刪除
- MySQL 系統表空間檔案解析MySql
- RM刪除檔案空間釋放詳解
- MySQL innodb表使用表空間物理檔案複製表MySql
- 表空間和資料檔案的管理
- [20210527]rman與undo表空間備份.txt
- Oracle RMAN 表空間恢復Oracle
- Oracle 刪除使用者、表空間、資料檔案、使用者下的所有表Oracle
- [待整理]oracle10g刪除(釋放)資料檔案/表空間流程Oracle
- Oracle臨時表空間檢視、新增臨時表空間資料檔案、修改預設臨時表空間 方法!Oracle
- PostgreSQL從小白到高手教程 - 第41講:postgres表空間備份與恢復SQL
- oracle 普通表空間資料檔案壞塊Oracle
- Oracle 10g大檔案表空間(轉)Oracle 10g
- 表空間(資料檔案shrink)收縮示例
- oracle建立臨時表空間和資料表空間以及刪除Oracle
- Windows 10刪除備份檔案方法Windows
- 刪除臨時表空間組
- 表空間TSPITR恢復-實驗
- 【Oracle 恢復表空間】 實驗Oracle
- Linux基楚操作指引【檔案改名、檔案備份、檔案刪除】Linux
- 免備案空間是什麼?怎麼購買免備案空間主機?
- MySQL InnoDB系統表空間資料檔案配置MySql
- 手工rm刪除歸檔日誌對備份歸檔日誌的影響
- Linux檔案刪除但空間不釋放問題篇Linux
- 12 使用RMAN備份和恢復檔案
- 2.5.9 在資料庫建立期間支援大檔案表空間資料庫
- 2.5.4 為 SYSAUX 表空間指定資料檔案屬性UX
- PostgreSQL在不同的表空間移動資料檔案SQL
- 表空間與資料檔案的offline和online操作
- 檔案的基本管理和XFS檔案系統備份恢復
- 16、表空間 建立表空間
- XFS檔案系統的備份、恢復、修復