您好,登錄后才能下訂單哦!
假定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 hh34: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 hh34: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 hh34: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執行完成后,恢復目標時間之前的表空間備份將不能再使用,因此應當盡快重新備份一次表空間或整個數據庫。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。