ORACLE資料庫基於時間點的不完全恢復
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。
----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表。
為了將影響減低到最小,經過仔細的研究,確定瞭如下的恢復流程:
通知業務部門,停止配號業務並繼續執行其它業務。待18:00點下班後,SHUTDOWN 原資料庫並將原庫資料檔案,控制檔案,REDOLOG 檔案重新命名,隨後執行資料庫的基於時間點的不完全恢復,恢復到15:13分,然後取出PORT_DETIALS表,並恢復到原庫中,即可恢復PORT_DETIALS表。
三、恢復步驟
具體各步驟執行如下:
1. 確定資料檔案,控制檔案,REDO LOG路徑及名稱
SQL> select * from v$logfile order by group#;
具體各步驟執行如下:
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
---------- ------- --------------------------------------------------------------------------------
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
--------------------------------------------------------------------------------
/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
--------------------------------------------------------------------------------
/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。
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
$ 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
.
.
.
$ mv /itsmdata/oradata/ora7/tools01.dbf /itsmdata/oradata/ora7/tools01.dbf.orig
.
.
.
4. 執行資料庫的基於時間點的不完全恢復,並匯出PORT_DETAILS 表
1)restore資料庫
$ rman target / catalog
Recovery Manager: Release 8.1.7.4.0 - Production
$ rman target / catalog
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-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 > 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
Recovery Manager: Release 8.1.7.4.0 - Production
$ rman target / catalog
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-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;
}
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
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;
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle基於時間點的不完全恢復Oracle
- RMAN基於時間點恢復Oracle資料庫Oracle資料庫
- 基於時間執行資料庫不完全恢復資料庫
- Oracle基於時間點的恢復Oracle
- 備份與恢復:Polardb資料庫資料基於時間點恢復資料庫
- Oracle 12c PDB基於時間點的不完全恢復記錄Oracle
- oracle資料庫不完全恢復Oracle資料庫
- RAC 資料庫恢復到單例項下並且基於時間點恢復資料庫單例
- 基於percona xtrabackup之innobackupex實現基於時間點資料庫恢復資料庫
- Oracle Rman 資料庫的不完全恢復Oracle資料庫
- oracle實驗記錄 (恢復-表空間基於時間點恢復(rman))Oracle
- oracle基於scn的不完全恢復Oracle
- oracle 閃回基於時間的恢復Oracle
- 【RMAN】使用RMAN備份將資料庫不完全恢復到指定時間點資料庫
- [RMAN]使用RMAN備份將資料庫不完全恢復到指定時間點資料庫
- oracle實驗記錄 (恢復-表空間基於時間點恢復(手動))Oracle
- mongodb 基於oplog的時間點恢復MongoDB
- 資料庫不完全恢復。資料庫
- 資料庫不完全恢復資料庫
- 使用RMAN的不完全恢復-基於時間/SCN/日誌序列
- 用mysqlbinlog做基於時間點的資料恢復一例MySql資料恢復
- Oracle 11g 主動選擇的不完全恢復,基於時間,DDL操作Oracle
- 【備份恢復】閃回資料庫(三)基於時間戳閃回資料庫資料庫時間戳
- 基於cancel的資料庫恢復資料庫
- 恢復到特定點(時間點、scn、日誌序列號),rman不完全恢復
- 基於tsm的oracle資料庫備份及恢復Oracle資料庫
- 如何進行Oracle資料庫不完全恢復RBOracle資料庫
- oracle 基於使用者管理的不完全恢復Oracle
- 【RMAN】表空間基於時間點的RMAN恢復-TSPITR
- 關於 RMAN 對於可插拔資料庫按時間點的恢復 (文件 ID 1984554.1)資料庫
- MySQL binlog基於時間點恢復資料失敗是什麼鬼?MySql
- Oracle 基於 RMAN 的不完全恢復(incomplete recovery by RMAN)Oracle
- 【TSPITR】RMAN表空間基於時間點的自動恢復
- 使用bbed完成資料庫的不完全恢復資料庫
- Backup And Recovery User's Guide-執行基於時間的或基於改變的不完全恢復GUIIDE
- mysql通過percona xtrabackup全備和mysql binlog實現基於時間點的資料庫恢復MySql資料庫
- 【資料庫資料恢復】如何恢復Oracle資料庫truncate表的資料資料庫資料恢復Oracle
- 最佳化Oracle停機時間及資料庫恢復(轉)Oracle資料庫