為啥要寫這個呢,因為之前遇到個場景。操作系統為Solaris的,oracle11.2.0.4。
一個運維把一張關鍵表drop了。然后發現recyclebin是off的,然后。。然后好像只能從備份里面找了,沒有邏輯備份,只有備份到虛擬磁帶機的RMAN備份。好吧,問題也不大找個測試機基於時間點恢復,再expdp導入。可是沒有Solaris的機器,整個數據庫4T,跨平台恢復呢。。也要好長時間。於是想到了表空間恢復,但是出故障后,並沒有及時把表空間offline,導致其他的表繼續寫,然后就尷尬了。后來找的專家用工具修復的。
------------------------------------------------------------------------------------------------------------------------
想了想有個很low思路可行(請不要嘲笑本咸魚),但可能局限性比較大。
1.先將除了A表(被drop的表)其他的表備份出來(expdp)或者移動到其他表空間。
2.用表空間恢復到指定時間點,找到了A表。
3.再將其他的表再導入表空間。
-------------------------------------------------------------------------------------------------------------------------
記錄下表空間恢復步驟(其實我也是抄別人的哈哈哈)。
1.故障表空間offline,實例時open的
2.建立輔助實例恢復
全自動(自動建立輔助實例)
rman target /
RMAN> RECOVER TABLESPACE test01 UNTIL SCN=1002453 auxiliary destination '/home/oracle';
手動(需要建立輔助實例)
rman target / auxiliary sys/oracle@jssdup
run
{
set newname for tablespace test01 to '/home/oracle/data/%b';
set newname for datafile '/u01/app/oracle/oradata/orcl/system01.dbf' to '/home/oracle/data/system01.dbf';
set newname for datafile '/u01/app/oracle/oradata/orcl/sysaux01.dbf' to '/home/oracle/data/sysaux01.dbf';
set newname for datafile '/u01/app/oracle/oradata/orcl/undotbs01.dbf' to '/home/oracle/data/undotbs01.dbf';
set newname for datafile '/u01/app/oracle/oradata/orcl/users01.dbf' to '/home/oracle/data/users01.dbf';
allocate auxiliary channel c1 device type disk;
recover tablespace test01 until scn 1002453;
}
3.然后就OK了。
-----------------------------------------------------------------------------------------------------------------
表空間時點恢復TSPITR原理及步驟
1.自包含檢查,也就是檢查是否存在依賴性。執行DBMS_TTS.TRANSPORT_SET_CHECK后,查看視圖TRANSPORT_SET_VIOLATIONS,如果有記錄被返回,則需要先解決依賴。
2.檢查是否連接到一個用戶管理的輔助實例,否則RMAN將創建一個輔助實例,啟動並連接到輔助實例。
3.在目標數據庫中將要被恢復的表空間置於脫機狀態。
4.對輔助實例使用恢復目標時間之前的控制文件備份來還原控制文件。
5.從恢復集和輔助集中將數據文件還原到輔助實例。還原的數據文件可以存儲在你指定的目錄中或者是文件的原始目錄中(對於恢復集文件)或者在輔助目錄中(對於輔助集文件,如果你使用了有auxliary destination參數的recover tablespace命令)。
6.在輔助實例中將數據文件還原和恢復到指定的目標時間點。
7.使用resetlogs選項將輔助實例打開
8.將輔助實例上恢復集表空間置為只讀模式
9.使用DataPump從輔助實例導出恢復集表空間產生一個傳輸表空間dump文件
10.關閉輔助實例
11.從目標實例刪除恢復集表空間(即需要進行時點還原的表空間)
12.DataPump程序將使用傳輸表空間方式將dump文件導入到目標數據庫
13.將導入到目標數據庫的表空間置為讀/寫並立即離線
14.刪除所有輔助集數據文件
原文:https://blog.csdn.net/leshami/article/details/70670220
-------------------------------------------------------------------------------------------------------------
其實我一直只想做到第8步,然后從輔助實例中expdp導出表A,但是好像一直沒辦法停下。。。有大佬有辦法請告訴我,謝謝!