ORACLE資料庫基於時間點的不完全恢復

shilei1發表於2019-05-01

ORACLE資料庫基於時間點的不完全恢復

 (2006-09-18 16:42:25)
2006年維護典型案例之
----ORACLE資料庫基於時間點的不完全恢復
一、問題概述
2006年7月7日,15:15分,由於開發人員不慎,誤將PORT_DETIALS表TRUNCATE,導致該表資料完全丟失。經過短暫時間的資訊收集了解到如下情況:
1. PORT_DETIALS於15:15分被TRUNCATE ,該表資料為號碼埠資訊,丟失會影響整個配號流程。
2. 資料庫工作於ARCHIVED模式,使用帶CATALOG 的RMAN的聯機備份。
3. 上一次資料庫全備份執行日期為2006年6月27日。且自上次全備份以來的所有ARCHIVED  LOG檔案均被完整備份,日誌序列號為4823----4913。
二、解決方案
為了將影響減低到最小,經過仔細的研究,確定瞭如下的恢復流程:
通知業務部門,停止配號業務並繼續執行其它業務。待18:00點下班後,SHUTDOWN 原資料庫並將原庫資料檔案,控制檔案,REDOLOG 檔案重新命名,隨後執行資料庫的基於時間點的不完全恢復,恢復到15:13分,然後取出PORT_DETIALS表,並恢復到原庫中,即可恢復PORT_DETIALS表。
三、恢復步驟
具體各步驟執行如下:
1. 確定資料檔案,控制檔案,REDO LOG路徑及名稱
 SQL> select * from v$logfile order by group#;
    GROUP# STATUS  MEMBER
---------- ------- --------------------------------------------------------------------------------
         1         /itsmdata/oradata/ora7/redo11.log
         1         /itsmidx/oradata/ora7/redo12.log
         2         /itsmdata/oradata/ora7/redo21.log
         2         /itsmidx/oradata/ora7/redo22.log
         3         /itsmdata/oradata/ora7/redo31.log
         3         /itsmidx/oradata/ora7/redo32.log
         4         /itsmdata/oradata/ora7/redo41.log
         4         /itsmidx/oradata/ora7/redo42.log
         5         /itsmdata/oradata/ora7/redo51.log
         5         /itsmidx/oradata/ora7/redo52.log
         6         /itsmdata/oradata/ora7/redo61.log
         6         /itsmidx/oradata/ora7/redo62.log
SQL> select name from v$datafile ;
NAME
--------------------------------------------------------------------------------
/itsmdata/oradata/ora7/system01.dbf
/itsmdata/oradata/ora7/tools01.dbf
/itsmdata/oradata/ora7/rbs01.dbf
/itsmdata/oradata/ora7/data_hx01.dbf
/itsmdata/oradata/ora7/data_hx02.dbf
/itsmidx/oradata/ora7/data_hx03.dbf
/itsmdata/oradata/ora7/data_hx04.dbf
/itsmdata/oradata/ora7/data_hx05.dbf
/itsmsys/oradata/ora7/data_hx06.dbf
/itsmdata/oradata/ora7/data_hx_0101.dbf
/jfxtdata/oradata/data_hx_idx01.dbf
/jfxtdata/oradata/data_hx_idx02.dbf
/jfxtdata/oradata/data_hx_idx03.dbf
/jfxtdata/oradata/data_hx_idx04.dbf
/itsmdata/oradata/ora7/data_hx07.dbf
/itsmdata/oradata/ora7/data_hx08.dbf
/itsmidx/oradata/ora7/data_hx09.dbf
/itsmdata/oradata/ora7/data_hx10.dbf
/itsmdata/oradata/ora7/data_hx11.dbf
/itsmidx/oradata/ora7/data_hx12.dbf
/itsmdata/oradata/ora7/data_hx13.dbf
/itsmdata/oradata/ora7/perfstat.dbf
/itsmdata/oradata/ora7/data_hx_0102.dbf
/itsmdata/oradata/ora7/data_hx_0103.dbf
/jfxtdata/oradata/data_hx_idx05.dbf
/jfxtdata/oradata/data_hx_idx06.dbf
/itsmdata/oradata/ora7/perfstat1.dbf  
SQL> select name from v$controlfile ;
NAME
--------------------------------------------------------------------------------
/itsmsys/oradata/ora7/control01.ctl
/itsmidx/oradata/ora7/control02.ctl
/itsmdata/oradata/ora7/control03.ctl
2. 確定需要的恢復的ARCHIVED LOG 檔案
SQL〉select thread#,to_char(first_time,'yyyymmdd') riqi,sequence# from v$log_history
where to_char(first_time,'yyyymmdd')>='20060627'
order by thread#,riqi;
查詢得出需要恢復的日誌序列號為4823----4913。
3.18:00關閉資料庫,重新命名相關檔案。
$ sqlplus "/as sysdba"
Sql> shutdown immediate
Sql>exit
$ mv /itsmdata/oradata/ora7/system01.dbf  /itsmdata/oradata/ora7/system01.dbf.orig
$ mv /itsmdata/oradata/ora7/tools01.dbf   /itsmdata/oradata/ora7/tools01.dbf.orig
.
.
.
4. 執行資料庫的基於時間點的不完全恢復,並匯出PORT_DETAILS 表
1)restore資料庫
$ rman target / catalog rmanhx/******@rmanyy
Recovery Manager: Release 8.1.7.4.0 - Production
RMAN-06005: connected to target database: ORA7 (DBID=1302697569)
RMAN-06008: connected to recovery catalog database
RMAN>startup nomount ;
RMAN > run {
allocate channel 'dev1' type sbt_tape parms
'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=ora7)';
allocate channel 'dev2' type sbt_tape parms
'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=ora7)';
restore database;
release channel dev1;
release channel dev2;
}
RMAN > exit
2)恢復歸檔日誌
$ rman target / catalog rmanhx/******@rmanyy
Recovery Manager: Release 8.1.7.4.0 - Production
RMAN-06005: connected to target database: ORA7 (DBID=1302697569)
RMAN-06008: connected to recovery catalog database
RMAN > run {
allocate channel 'dev1' type sbt_tape parms
'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=ora7)';
allocate channel 'dev2' type sbt_tape parms
'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=ora7)';
restore archivelog from logseq 4823 until logseq 4913;
release channel dev1;
release channel dev2;
}
RMAN>exit

3)RECOVER資料庫至2006年7月7日15:13
$ Sqlplus "/as sysdba"
Sql> alter database mount;
Sql> alter session set nls_date_format='yyyymmdd hh24:mi:ss';
Sql > set until time='20060707 15:00:00';
Sql > recover database;
Sql > alter database open resetlogs;
Sql >exit
$ exp itsm/**** tables=port_details direct=y file=/itsmdata/port.dmp feedback=10000 recordlength=65535

5. 關閉不完全恢復的資料庫,並恢復原庫的資料檔案、控制檔案及REDO檔名,啟動原庫。
$sqlplus "/as sysdba"
sql > shutdown immediate
sql > exit
$ mv /itsmdata/oradata/ora7/system01.dbf.orig  /itsmdata/oradata/ora7/system01.dbf
$ mv /itsmdata/oradata/ora7/tools01.dbf.orig   /itsmdata/oradata/ora7/tools01.dbf
.
.
.
$sqlplus "/ as sysdba"
Sql > startup
6.DISABLE PORT_DETAILS表上的觸發器,匯入資料後,ENABLE表上的觸發器。
Sql >ALTER TABLE PORT_DETAILS DISABLE ALL TRIGGERS;
Sql > exit ;
$ imp itsm/itsm file=/itsmdata/port.dmp buffer=51200000 ignore=y indexes=n fromuser=itsm tables=port_details touser=itsm feedback=10000 commit=y
Sql >ALTER TABLE PORT_DETAILS ENABLE ALL TRIGGERS;
經過如上的恢復步驟,整個恢復過程完成,經過檢查及測試,資料完全恢復,業務執行正常。本案例涉及到ORACLE資料庫的帶CATALOG 的RMAN備份與基於時間點的不完全恢復;資料庫的冷備份等等資料庫的備份與恢復高階技術,可以作為解決同類問題的參考文件。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/196700/viewspace-1067981/,如需轉載,請註明出處,否則將追究法律責任。

相關文章