資料庫恢復原理探討
資料庫恢復原理的簡單學習
資料庫恢復太有意思,理解了原理,很多東西都變得容易多了,火候快到了
搞清楚資料庫怎樣用日誌來做資料庫恢復(這樣才不會濫用命令,導致資料庫根本沒有辦法恢復)
--資料庫冷自動備份指令碼
select 'host copy ' || name || ' ' || name || '.bak;' backcmd
from (select name name
from v$datafile
union
select member name
from v$logfile
union
select name name from v$controlfile);
--資料庫冷備份恢復指令碼
select 'host copy ' || name || '.bak ' || name || ';' revrcmd
from (select name name
from v$datafile
union
select member name
from v$logfile
union
select name name from v$controlfile);
下面是恢復的時候遇到的問題,在恢復前我已經清空日誌資訊(alter database clear logfile group n;)
那為什麼我在啟動的時候還要用控制檔案恢復呢並且基於取消恢復!
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 281018368 bytes
Fixed Size 1248552 bytes
Variable Size 142607064 bytes
Database Buffers 134217728 bytes
Redo Buffers 2945024 bytes
資料庫裝載完畢。
ORA-00338: 日誌 1 (用於執行緒 1) 比控制檔案更新
ORA-00312: 聯機日誌 1 執行緒 1: 'D:ORACLEPRODUCT10.2.0ORADATAORCLREDO01.LOG'
SQL> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出現錯誤:
ORA-01139: RESETLOGS 選項僅在不完全資料庫恢復後有效
不可以直接啟動要先做恢復
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 583012 (在 04/25/2009 23:52:50 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: D:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG20
09_04_26O1_MF_1_1_%U_.ARC
ORA-00280: 更改 583012 (用於執行緒 1) 在序列 #1 中
指定日誌: {
cancel
介質恢復已取消。
SQL> alter database open resetlogs;
資料庫已更改。
SQL>
用控制檔案的基於取消的恢復並沒有恢復資料
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 281018368 bytes
Fixed Size 1248552 bytes
Variable Size 150995672 bytes
Database Buffers 125829120 bytes
Redo Buffers 2945024 bytes
資料庫裝載完畢。
ORA-00338: 日誌 2 (用於執行緒 1) 比控制檔案更新
ORA-00312: 聯機日誌 2 執行緒 1: 'D:ORACLEPRODUCT10.2.0ORADATAORCLREDO02.LOG'
SQL> recover database using backup controlfile
ORA-00279: 更改 583578 (在 04/26/2009 00:09:38 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: D:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG20
09_04_26O1_MF_1_2_%U_.ARC
ORA-00280: 更改 583578 (用於執行緒 1) 在序列 #2 中
指定日誌: {
D:ORACLEPRODUCT10.2.0ORADATAORCLREDO03.LOG
ORA-00310: 歸檔日誌包含序列 3; 要求序列 2
ORA-00334: 歸檔日誌: 'D:ORACLEPRODUCT10.2.0ORADATAORCLREDO03.LOG'
SQL> recover database using backup controlfile
ORA-00279: 更改 583578 (在 04/26/2009 00:09:38 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: D:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG20
09_04_26O1_MF_1_2_%U_.ARC
ORA-00280: 更改 583578 (用於執行緒 1) 在序列 #2 中
指定日誌: {
D:ORACLEPRODUCT10.2.0ORADATAORCLREDO02.LOG
ORA-00279: 更改 583820 (在 04/26/2009 00:14:30 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: D:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG20
09_04_26O1_MF_1_3_%U_.ARC
ORA-00280: 更改 583820 (用於執行緒 1) 在序列 #3 中
ORA-00278: 此恢復不再需要日誌檔案 'D:ORACLEPRODUCT10.2.0ORADATAORCLREDO02.
LOG'
指定日誌: {
D:ORACLEPRODUCT10.2.0ORADATAORCLREDO03.LOG
已應用的日誌。
完成介質恢復。
SQL> alter database open noresetlogs;
alter database open noresetlogs
*
第 1 行出現錯誤:
ORA-01588: 要開啟資料庫則必須使用 RESETLOGS 選項
SQL> alter database open resetlogs;
資料庫已更改。
SQL>
上邊總共講兩種恢復辦法:一藉助與日誌檔案恢復資料
要基於備份控制檔案來恢復資料(時間點或者其他資訊)
二不借助日誌檔案恢復資料
清空日誌或者基於 恢復資料
上邊的資料雖然恢復成功,但是在資料查詢的時候,有ora01578的錯誤(應該怎麼解決)
在恢復需要日誌檔案的時候要根據提示或者從最舊的開始恢復,直到恢復成功!
問題與總結:
==========================================
--問題?日誌裡有新的東西!恢復的時候可以恢復不!?
可以透過線上日誌恢復,但是 ora-01578資料庫塊有問題的錯誤,資料恢復的時候出現邏輯錯誤
這個問題的答案是:資料庫操作沒有記錄日誌,所以資料無法恢復,資料庫操作要注意沒有日誌的操作,
一定要發生在全備前!
--日誌? 當用resetlogs開啟資料庫的時候,日誌裡的資訊也會被更新,在沒有開啟資料庫前,資訊應該沒變化
所以用resetlogs開啟資料庫後要做資料庫的全備份,這個也是很多資料上怎樣強調的(嘿嘿)
以上的分析都是要使用全冷備份來恢復資料
下面是一步一步缺少檔案來做資料的恢復操作!
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 281018368 bytes
Fixed Size 1248552 bytes
Variable Size 180355800 bytes
Database Buffers 96468992 bytes
Redo Buffers 2945024 bytes
資料庫裝載完畢。
ORA-01122: 資料庫檔案 2 驗證失敗
ORA-01110: 資料檔案 2: 'D:ORACLEPRODUCT10.2.0ORADATAORCLUNDOTBS01.DBF'
ORA-01207: 檔案比控制檔案更新 - 舊的控制檔案
SQL> recover database using backup controlfile ;
ORA-00279: 更改 587150 (在 04/26/2009 01:30:41 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: D:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG20
09_04_26O1_MF_1_1_%U_.ARC
ORA-00280: 更改 587150 (用於執行緒 1) 在序列 #1 中
指定日誌: {
cancel
介質恢復已取消。
SQL> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出現錯誤:
ORA-01113: 檔案 1 需要介質恢復
ORA-01110: 資料檔案 1: 'D:ORACLEPRODUCT10.2.0ORADATAORCLSYSTEM01.DBF'
SQL> recover database using backup controlfile ;
ORA-00279: 更改 587150 (在 04/26/2009 01:30:41 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: D:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG20
09_04_26O1_MF_1_1_%U_.ARC
ORA-00280: 更改 587150 (用於執行緒 1) 在序列 #1 中
指定日誌: {
cancel
介質恢復已取消。
SQL> recover database using backup controlfile ;
ORA-00279: 更改 587150 (在 04/26/2009 01:30:41 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: D:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG20
09_04_26O1_MF_1_1_%U_.ARC
ORA-00280: 更改 587150 (用於執行緒 1) 在序列 #1 中
指定日誌: {
cancel
介質恢復已取消。
SQL> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出現錯誤:
ORA-01113: 檔案 1 需要介質恢復
ORA-01110: 資料檔案 1: 'D:ORACLEPRODUCT10.2.0ORADATAORCLSYSTEM01.DBF'
SQL>
問題的原因:資料庫沒有足夠的日誌用來做資料恢復!
恢復的流程:1,檢查資料檔案和控制檔案的scn時候一樣,如果控制檔案的比較高,那麼資料檔案要恢復,反 之,要用基於備份的
控制檔案恢復!
2,如果有日誌的時候可以恢復,沒有日誌的時候需要前滾資料庫
特殊關於日誌的資料庫恢復!
1,損壞的是非當前聯機日誌
alter database clear logfile group n;
alter database clear unarchived log group n;
alter database open;
利用重新建立日誌的辦法可以恢復資料庫!
2,損壞當前有活動的聯機日誌
SQL> alter database open;
alter database open
*
第 1 行出現錯誤:
ORA-00313: 無法開啟日誌組 1 (用於執行緒 1) 的成員
ORA-00312: 聯機日誌 1 執行緒 1:
'D:ORACLEPRODUCT10.2.0ORADATAORCLREDO01.LOG'
ORA-27046: 檔案大小不是邏輯塊大小的倍數
OSD-04012: 檔案大小不匹配 (OS 50630038)
線上活動日誌損壞
SQL> alter database clear unarchived logfile group 1;
alter database clear unarchived logfile group 1
*
第 1 行出現錯誤:
ORA-01624: 日誌 1 是緊急恢復例項 orcl (執行緒 1) 所必需的
ORA-00312: 聯機日誌 1 執行緒 1:
'D:ORACLEPRODUCT10.2.0ORADATAORCLREDO01.LOG'
不允許重新建立日誌檔案
SQL> create pfile='d:lihj.ora' from spfile;
檔案已建立。
建立引數檔案
SQL> shutdown immediate
ORA-01109: 資料庫未開啟
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup mount pfile='d:lihj.ora'
ORACLE 例程已經啟動。
Total System Global Area 205520896 bytes
Fixed Size 1248116 bytes
Variable Size 71304332 bytes
Database Buffers 130023424 bytes
Redo Buffers 2945024 bytes
資料庫裝載完畢。
SQL> recover database until cancel;
ORA-00279: 更改 573358 (在 04/26/2009 09:02:32 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
D:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG2009_04_26O1_MF_1_
2_%U_.ARC
ORA-00280: 更改 573358 (用於執行緒 1) 在序列 #2 中
指定日誌: {
cancel
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 將出現如下錯誤
ORA-01194: 檔案 1 需要更多的恢復來保持一致性
ORA-01110: 資料檔案 1: 'D:ORACLEPRODUCT10.2.0ORADATAORCLSYSTEM01.DBF'
ORA-01112: 未啟動介質恢復
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9879835/viewspace-1021300/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Ceph monitor故障恢復探討
- 資料備份方法及災難恢復探討(轉)
- 【資料庫資料恢復】SAP資料庫資料恢復案例資料庫資料恢復
- 寶塔資料庫恢復 mysql資料庫丟失恢復 mysql資料庫刪除庫恢復 寶塔mysql資料庫恢復資料庫MySql
- 【資料庫資料恢復】Sql Server資料庫資料恢復案例資料庫資料恢復SQLServer
- 【伺服器資料恢復】機房意外斷電導致伺服器資料丟失的資料恢復案例探討伺服器資料恢復
- NoSQL資料庫探討 -- 非關係型資料庫SQL資料庫
- 資料庫常見故障及恢復原理(轉)資料庫
- 基於MySQL資料庫討論虛擬機器資料恢復MySql資料庫虛擬機資料恢復
- 資料庫修復資料恢復資料庫資料恢復
- 恢復資料庫資料庫
- 【資料庫資料恢復】透過恢復NDF檔案修復資料庫的資料恢復過程資料庫資料恢復
- 【資料庫資料恢復】如何恢復Oracle資料庫truncate表的資料資料庫資料恢復Oracle
- 【資料庫資料恢復】windows server下SqlServer資料庫的資料恢復資料庫資料恢復WindowsServerSQL
- 使用恢復建議恢復資料庫資料庫
- 【資料庫資料恢復】Oracle資料庫誤truncate table的資料恢復案例資料庫資料恢復Oracle
- 【資料庫資料恢復】oracle資料庫誤truncate table怎麼恢復資料?資料庫資料恢復Oracle
- 【資料庫資料恢復】誤truncate table的Oracle資料庫資料恢復方案資料庫資料恢復Oracle
- 伺服器資料恢復—透過拼接資料庫碎片恢復SqlServer資料庫資料的資料恢復案例伺服器資料恢復資料庫SQLServer
- 【資料庫資料恢復】MS SQL資料庫附加資料庫出錯怎麼恢復資料?資料庫資料恢復SQL
- 資料庫恢復方案資料庫
- RMAN恢復資料庫資料庫
- sybase資料庫恢復資料庫
- 【資料庫資料恢復】SqlServer資料庫無法讀取的資料恢復案例資料庫資料恢復SQLServer
- 資料庫資料恢復—NTFS分割槽損壞如何恢復SqlServer資料庫資料資料庫資料恢復SQLServer
- 【資料庫資料恢復】sql server資料庫連線失效的資料恢復案例資料庫資料恢復SQLServer
- 【資料庫資料恢復】linux系統下MYSQL資料庫資料恢復案例資料庫資料恢復LinuxMySql
- 【資料庫資料恢復】MongoDB資料庫檔案損壞的資料恢復案例資料庫資料恢復MongoDB
- 【資料庫資料恢復】Oracle資料庫ASM磁碟組掉線如何恢復資料?資料庫資料恢復OracleASM
- Sybase ASE資料庫恢復,Sybase資料恢復,資料誤刪除恢復工具READSYBDEVICE資料庫資料恢復dev
- 【資料庫資料恢復】SQL server資料庫被加密怎麼辦?如何恢復?資料庫資料恢復SQLServer加密
- 伺服器資料恢復成功案例+伺服器資料恢復原理伺服器資料恢復
- 【資料庫資料恢復】ASM磁碟組掉線的Oracle資料庫資料恢復案例資料庫資料恢復ASMOracle
- 【資料庫資料恢復】SQL Server資料庫磁碟空間不足的資料恢復案例資料庫資料恢復SQLServer
- 資料庫資料恢復—SQLserver資料庫中勒索病毒被加密怎麼恢復資料?資料庫資料恢復SQLServer加密
- 時序資料庫破局開放探討資料庫
- Oracle 資料庫分散式技術的探討Oracle資料庫分散式
- Oracle中 HWM與資料庫效能的探討Oracle資料庫