Oracle之表空間基於時間點的恢復


記一次優化過程中;一次誤操作,在不影響其他表空間的情況下;采用表空間基於時間點的恢復(TSPITR)方法恢復數據的過程。

1.TSPITR恢復原理

   TSPITR目前最方便的方法是使用RMAN進行自動的恢復。其使用前提為兩個,一個是必須存在相應的備份集合,另一個是表空間對象是“self-contain”,也就是其他表空間中不包括與這個表空間對象相關的對象數據。

恢復步驟和原理如下:

  • RMAN三個對象集合:catalog、target和auxiliary。其中auxiliary就是用於輔助target各種備份還原要求的操作數據庫。這個庫在TSPITR中扮演臨時數據還原作用的;
  • 首先完成數據檢查工作,確定備份集合和表空間完整性;
  • 當前時間是T1,如果需要將數據還原為T0。使用RMAN提取備份數據集合,還原到auxiliary上形成一個新的實例數據庫。選擇性應用歸檔日志序列,還原auxiliary到TO時間點;
  • 使用expdp工具從auxiliary中導出目標表空間為dump對象。注意:還原auxiliary並不是100%重建target,而是選擇系統運行表空間和目標表空間;
  • 在target數據庫中刪除原表空間。使用impdp工具導入dump文件進入target數據庫;
  • 清理環境,將創建的auxiliary數據庫刪除;

2. 模擬環境:
2.1 備份數據庫

  backup database format '/data/oracle/rman/back_db_%U';

2.2 誤操作模擬

SQL> alter session set NLS_DATE_FORMAT="YYYY-MM-DD HH24:Mi:SS";

Session altered.

SQL> select sysdate from dual;

SYSDATE
-------------------
2017-04-07 11:14:22

SQL> conn lottu/li0924
Connected.

SQL> select count(1) from lottu02;

  COUNT(1)
----------
       999

SQL> truncate table lottu02;                   --誤操作

Table truncated.

3.模擬恢復操作
3.1 第一次恢復過程
模擬第一次恢復結果是失敗的;我的恢復腳本如下:

run{
sql 'alter session set NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"';
sql 'alter session set NLS_LANGUAGE=American';
recover tablespace LOTTU until time='2017-04-07 11:14:22' auxiliary destination '/u01/auxiliary';
}

在上述的步驟4出現錯誤;即使用expdp工具從auxiliary中導出目標表空間為dump對象這個過程;錯誤信息如下:

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 04/06/2017 16:43:57
RMAN-06136: ORACLE error from auxiliary database: ORA-01097: cannot shutdown while in a transaction - commit or rollback first
RMAN-06962: Error received during export of metadata
RMAN-06960:    EXPDP> ORA-39065: unexpected master process exception in MAINORA-04031: unable to allocate 32 bytes of shared memory ("shared pool","select obj# from oid$ where ...","SQLA","tmp")
RMAN-06960:    EXPDP> ORA-39097: Data Pump job encountered unexpected error -4031

根據錯誤信息中“EXPDP> ORA-39065: unexpected master process exception in MAINORA-04031: unable to allocate 32 bytes of shared memory” 出現輔助實例內存不夠。


3.2第二次恢復
本次恢復結果是成功的;與上次不同的是;本次添加了輔助實例的參數文件。操作如下;

[oracle@oracle234 auxiliary]$ cat initaux.ora 
db_name=ORA11G                                  
db_unique_name=swhw_tspitr_ORA11G
compatible=11.2.0.0.0
db_block_size=8192
db_files=200
sga_target=1024M
processes=50

其中 "db_name="和"compatible=" 需要跟恢復數據庫是一致的;這個可以從第一次恢復信息拷貝。
恢復腳本如下:

run{
set auxiliary instance parameter file to '/u01/auxiliary/initaux.ora'
sql 'alter session set NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"';
sql 'alter session set NLS_LANGUAGE=American';
recover tablespace LOTTU until time='2017-04-07 11:14:22' auxiliary destination '/u01/auxiliary';
} 

3.3 驗證結果:

SQL> select file#,status from v$datafile;

     FILE# STATUS
---------- -------
     1 SYSTEM
     2 ONLINE
     3 ONLINE
     4 ONLINE
     5 OFFLINE
     6 ONLINE

6 rows selected.

SQL> alter tablespace lottu online;

Tablespace altered.

SQL> conn lottu/li0924
Connected.
SQL> select count(1) from lottu02;

  COUNT(1)
----------
       999

從結果來看;恢復是成功的。

4. 參考文獻
http://www.cnblogs.com/jyzhao/p/4956220.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM