Oracle表空間時間點恢復技術TSPITR
假定Oracle資料庫發生了以下情形:
1、表空間中,某個表的重要資料被破壞或刪除。
2、誤用DDL語言更改了表空間中的一個或多個表的結構,因此無法使用閃回來恢復這些表。
3、表被誤刪,並且已不在回收站中,如使用了帶purge選項的刪表操作。
那麼我們該如何恢復呢?
一種可行的方法就是利用Oracle的表空間時間點恢復技術TSPITR(Tablespace Point In Time Recover),這是一種僅在部分資料庫上執行不完整恢復的技術。該技術依據目標資料庫的表空間的一個子集來建立輔助資料庫,僅在此子集上執行不完整的恢復,然後使用輔助資料庫的表空間來替代目標資料庫中的表空間。最終結果看起來好像僅恢復和還原了該子集,而保持目標資料庫的其餘部分是最新的。
手動完成表空間的時間點恢復非常繁瑣,但利用RMAN可以自動執行TSPITR,在不影響資料庫中其他表空間或物件的前提下,方便的將一個或多個表空間的內容還原到過去的某個時間點。TSPITR是一個有用的恢復工具,但使用前需要明確以下前提:
1、資料庫必須位於歸檔模式,且存在相應的備份集合。
2、要恢復的表空間必須是自包含的,不依賴於其它表空間中的物件。例如,如果一個表在其它表空間中包含索引,則它們或者一起參與恢復,或者先將依賴關係解除才能做恢復。
當然,TSPITR並非是發生所有表空間災難後的萬能救星。例如,不能使用它來恢復已經刪除的表空間。另外,如果重新命名了表空間,則無法將其恢復到重新命名之前的時間點。
使用RMAN執行TSPITR很簡單,在此之前需要執行幾個步驟以確保操作成功,下面我們透過一個例子說明TSPITR技術的使用方法。
1、假定表空間CMES中的一張表被誤刪,且已無法從回收站中找回
sqlplus cmes/cmes@mes
drop table c_material_t purge;
2、確定破壞大致發生的時間點
這裡,首先在作業系統提示符下設定用於控制日期時間格式的環境變數,並使用此會話完成後面的工作,確保日期時間的正確解析:
set nls_date_format=yyyy-mm-dd hh24:mi:ss
檢視當前時間:
select sysdate from dual;
SYSDATE
-------------------
2016-02-15 21:30:48
3、驗證表空間的依賴性
檢視資料字典檢視TS_PITR_CHECK來確定某個表空間是否與其它表空間存在依賴關係:
select obj1_owner, obj1_name, ts1_name, obj2_owner, obj2_name, ts2_name
from ts_pitr_check
where (ts1_name = 'CMES' and ts2_name != 'CMES')
or (ts1_name != 'CMES' and ts2_name = 'CMES');
該檢視填充了一對一關係的行,其中表空間ts1_name中的一個物件依賴於表空間ts2_name中的一個物件。檢查結果是cmes表空間中的物件沒有和其它表空間物件存在依賴關係。
倘若發現表空間物件存在依賴關係,可以臨時將依賴關係解除,或者將包含依賴物件的表空間一併新增到恢復集中。後者效果更好,可以確保維護表之間邏輯上的一致性。
4、確定在執行TSPITR後會丟失的物件
檢視資料字典檢視TS_PITR_OBJECTS_TO_BE_DROPPED來確定表空間在按目標時間進行恢復後將會丟失的物件:
select owner, name, to_char(creation_time, 'yyyy-mm-dd hh24:mi:ss') create_time
from ts_pitr_objects_to_be_dropped
where tablespace_name = 'CMES'
and creation_time > to_date('2016-02-15 21:20:00', 'yyyy-mm-dd hh24:mi:ss');
檢查結果,按選取的時間恢復表空間cmes將是安全的,沒有物件會丟失。倘若存在丟失的物件,可以在執行恢復操作前先匯出這些物件,然後在完成恢復後重新將它們匯入。
5、使用RMAN命令自動執行TSPITR
在D:\下新建一個輔助目錄auxdata,RMAN將使用該目錄建立臨時輔助資料庫。
啟動RMAN命令連線到目標資料庫:
rman target /
執行恢復命令:
recover tablespace cmes until time '2016-02-15 21:20:00' auxiliary destination 'd:\auxdata';
6、恢復後的表空間會處於離線狀態,因此還需要手動執行命令將表空間聯機
sql'alter tablespace cmes online';
7、驗證表空間狀態,確認丟失的表已恢復
select tablespace_name, status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS ONLINE
CMES ONLINE
RMES ONLINE
INDX ONLINE
select count(*) from cmes.c_material_t;
COUNT(*)
----------
345
另外一點需要注意,在TSPITR執行完成後,恢復目標時間之前的表空間備份將不能再使用,因此應當儘快重新備份一次表空間或整個資料庫。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28974745/viewspace-2151298/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 表空間TSPITR恢復-實驗
- Oracle RMAN 表空間恢復Oracle
- 【Oracle 恢復表空間】 實驗Oracle
- PostgreSQL 時間點恢復SQL
- oracle 表空間Oracle
- Oracle表空間Oracle
- oracle臨時表空間相關Oracle
- SYSTEM 表空間管理及備份恢復
- oracle建立臨時表空間和資料表空間以及刪除Oracle
- Oracle臨時表空間檢視、新增臨時表空間資料檔案、修改預設臨時表空間 方法!Oracle
- oracle temp 表空間Oracle
- 增加oracle表空間Oracle
- (Les16 執行資料庫恢復)-表空間恢復資料庫
- oracle 表移動表空間Oracle
- Oracle表移動表空間Oracle
- oracle表空間的整理Oracle
- Oracle 批量建表空間Oracle
- Oracle清理SYSAUX表空間OracleUX
- ORACLE資料庫基於時間點的不完全恢復Oracle資料庫
- mongodb 基於oplog的時間點恢復MongoDB
- oracle 臨時表空間的增刪改查Oracle
- Oracle 表空間增加檔案Oracle
- Oracle OCP(49):表空間管理Oracle
- Oracle Temp 表空間切換Oracle
- Oracle表空間收縮方案Oracle
- oracle建立使用者,表空間,臨時表空間,分配許可權步驟詳解Oracle
- 16、表空間 建立表空間
- DM8 基於時間點的恢復
- Oracle新建使用者、表空間、表Oracle
- 當使用者無限制使用表空間配額且表空間有足夠空間時出現超出表空間的空間限額
- mysql臨時表,臨時表空間,ibtmp1表空間暴增原因初探MySql
- 【TABLESPACE】Oracle表空間最佳實踐Oracle
- oracle sql 表空間利用率OracleSQL
- Oracle OCP(47):表空間的建立Oracle
- Oracle的表空間quota詳解Oracle
- PostgreSQL啟動恢復期間,恢復到的時間線的確定SQL
- 臨時表空間和回滾表空間使用率查詢
- 檢視oracle臨時表空間佔用率的檢視Oracle
- oracle11g 查詢臨時表空間的使用率和正在使用臨時表空間的使用者Oracle