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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 備份與恢復:Polardb資料庫資料基於時間點恢復資料庫
- 基於percona xtrabackup之innobackupex實現基於時間點資料庫恢復資料庫
- mongodb 基於oplog的時間點恢復MongoDB
- 如何進行Oracle資料庫不完全恢復RBOracle資料庫
- DM8 基於時間點的恢復
- Oracle 不完全恢復Oracle
- MySQL binlog基於時間點恢復資料失敗是什麼鬼?MySql
- 7.5 使用binary log 做基於時間點的恢復
- 【資料庫資料恢復】如何恢復Oracle資料庫truncate表的資料資料庫資料恢復Oracle
- BBED 修改oracle 資料檔案的 SCN 號來做資料庫不完全恢復。Oracle資料庫
- 【資料庫資料恢復】誤truncate table的Oracle資料庫資料恢復方案資料庫資料恢復Oracle
- 【資料庫資料恢復】Oracle資料庫誤truncate table的資料恢復案例資料庫資料恢復Oracle
- 【資料庫資料恢復】ASM磁碟組掉線的Oracle資料庫資料恢復案例資料庫資料恢復ASMOracle
- 【資料庫資料恢復】oracle資料庫誤truncate table怎麼恢復資料?資料庫資料恢復Oracle
- 關於Oracle資料庫的時間查詢Oracle資料庫
- Oracle資料庫恢復之resetlogsOracle資料庫
- 【DATAGUARD】Oracle 通過Dataguard指定恢復時間用於找回丟失資料Oracle
- DM7使用DMRMAN恢復資料庫到指定時間點/LSN資料庫
- 【資料庫資料恢復】SQL Server資料庫磁碟空間不足的資料恢復案例資料庫資料恢復SQLServer
- 【資料庫資料恢復】ASM例項不能掛載的Oracle資料庫資料恢復案例資料庫資料恢復ASMOracle
- 【資料庫資料恢復】LINUX環境下ORACLE資料庫誤刪除的資料恢復資料庫資料恢復LinuxOracle
- 【資料庫資料恢復】Oracle資料庫ASM磁碟組掉線如何恢復資料?資料庫資料恢復OracleASM
- PostgreSQL 時間點恢復SQL
- 大事務導致資料庫恢復時間長資料庫
- 【資料庫資料恢復】斷電導致Oracle資料庫資料丟失的資料恢復案例資料庫資料恢復Oracle
- 【oracle資料庫資料恢復】誤操作導致的資料庫誤刪除的資料恢復案例Oracle資料庫資料恢復
- PG 資料庫的 表的不完全恢復的簡易方法資料庫
- oracle資料庫損壞的恢復過程-基於IBM伺服器儲存Oracle資料庫IBM伺服器
- 【北亞資料恢復】異常斷電導致Oracle資料庫報錯的oracle資料恢復資料恢復Oracle資料庫
- Oracle & MySQL & PostgreSQL資料庫恢復支援OracleMySql資料庫
- Oracle資料庫冷備和恢復Oracle資料庫
- 【資料庫資料恢復】HP-UX系統ORACLE資料庫被誤刪除的資料恢復資料庫資料恢復UXOracle
- 【資料庫資料恢復】Oracle資料庫檔案出現壞塊報錯的資料恢復案例資料庫資料恢復Oracle
- oracle基於SCN增量恢復Oracle
- 資料庫資料恢復-oracle資料庫報錯無法開啟的如何恢復資料?資料庫資料恢復Oracle
- 2.MongoDB 4.2副本集環境基於時間點的恢復MongoDB
- 【資料庫資料恢復】Oracle ASM例項無法掛載的資料恢復案例資料庫資料恢復OracleASM
- 資料庫資料恢復-ORACLE資料庫的常見故障&各種故障下的資料恢復可能性資料庫資料恢復Oracle