一 理解什麼是數據庫恢復 當我們使用一個數據庫時
總希望數據庫的內容是可靠的
正確的
但由於計算機系統的故障(硬件故障
軟件故障
網絡故障
進程故障和系統故障)影響數據庫系統的操作
影響數據庫中數據的正確性
甚至破壞數據庫
使數據庫中全部或部分數據丟失
因此當發生上述故障後
希望能重構這個完整的數據庫
該處理稱為數據庫恢復
恢復過程大致可以分為復原(Restore)與恢復(Recover)過程
數據庫恢復可以分為以下兩類
實例故障的一致性恢復
當實例意外地(如掉電
後台進程故障等)或預料地(發出SHUTDOUM ABORT語句)中止時出現實例故障
此時需要實例恢復
實例恢復將數據庫恢復到故障之前的事務一致狀態
如果在在線後備發現實例故障
則需介質恢復
在其它情況Oracle在下次數據庫起動時(對新實例裝配和打開)
自動地執行實例恢復
如果需要
從裝配狀態變為打開狀態
自動地激發實例恢復
由下列處理
(
) 為了解恢復數據文件中沒有記錄的數據
進行向前滾
該數據記錄在在線日志
包括對回滾段的內容恢復
(
) 回滾未提交的事務
按步
重新生成回滾段所指定的操作
(
) 釋放在故障時正在處理事務所持有的資源
(
) 解決在故障時正經歷一階段提交的任何懸而未決的分布事務
介質故障或文件錯誤的不一致恢復
介質故障是當一個文件
一個文件的部分或磁盤不能讀或不能寫時出現的故障
文件錯誤一般指意外的錯誤導致文件被刪除或意外事故導致文件的不一致
這種狀態下的數據庫都是不一致的
需要DBA手工來進行數據庫的恢復
這種恢復有兩種形式
決定於數據庫運行的歸檔方式和備份方式
(
) 完全介質恢復可恢復全部丟失的修改
一般情況下需要有數據庫的備份且數據庫運行在歸檔狀態下並且有可用歸檔日志時才可能
對於不同類型的錯誤
有不同類型的完全恢復可使用
其決定於毀壞文件和數據庫的可用性
(
) 不完全介質恢復是在完全介質恢復不可能或不要求時進行的介質恢復
重構受損的數據庫
使其恢復介質故障前或用戶出錯之前的一個事務一致性狀態
不完全介質恢復有不同類型的使用
決定於需要不完全介質恢復的情況
有下列類型
基於撤消
基於時間和基於修改的不完全恢復
基於撤消(CANCEL)恢復
在某種情況
不完全介質恢復必須被控制
DBA可撤消在指定點的操作
基於撤消的恢復地在一個或多個日志組(在線的或歸檔的)已被介質故障所破壞
不能用於恢復過程時使用
所以介質恢復必須控制
以致在使用最近的
未損的日志組於數據文件後中止恢復操作
基於時間(TIME)和基於修改(SCN)的恢復
如果DBA希望恢復到過去的某個指定點
是一種理想的不完全介質恢復
一般發生在恢復到某個特定操作之前
恢復到如意外刪除某個數據表之前
第二章 數據庫恢復案例測試環境 數據庫環境
以下的所有案例都是通過測試經過
環境為
OS
Windows
Server
DB
Oracle
DBNAME
TEST
數據文件
SQL> select file#
status
enabled
name from v$datafile;
FILE# STATUS ENABLED NAME
SYSTEM READ WRITE D:\Oracle\ORADATA\TEST\SYSTEM
DBF
ONLINE READ WRITE D:\Oracle\ORADATA\TEST\RBS
DBF
ONLINE READ WRITE D:\Oracle\ORADATA\TEST\USERS
DBF
ONLINE READ WRITE D:\Oracle\ORADATA\TEST\TEMP
DBF
ONLINE READ WRITE D:\Oracle\ORADATA\TEST\TOOLS
DBF
ONLINE READ WRITE D:\Oracle\ORADATA\TEST\INDX
DBF
控制文件
SQL> select * from v$controlfile;
STATUS NAME
D:\Oracle\ORADATA\TEST\CONTROL
CTL
D:\Oracle\ORADATA\TEST\CONTROL
CTL
D:\Oracle\ORADATA\TEST\CONTROL
CTL
聯機日志
SQL> select * from v$logfile;
GROUP# STATUS MEMBER
STALE D:\Oracle\ORADATA\TEST\REDO
LOG
D:\Oracle\ORADATA\TEST\REDO
LOG
STALE D:\Oracle\ORADATA\TEST\REDO
LOG
數據庫備份腳本
冷備份腳本:
rem script:coldbak
sql
rem creater:chenjiping
rem date:
rem desc:offline full backup database
connect database
connect internal/password;
shutdown database
shutdown immediate;
Copy Data file
!xcopy d:\Oracle\oradata\test\*
dbf d:\database/H/R;
Copy Control file
!xcopy d:\Oracle\oradata\test\*
ctl d:\database/H/R;
Copy Log file
!xcopy d:\Oracle\oradata\test\*
log d:\database/H/R;
startup database
startup;
說明
以上腳本在數據庫關閉狀態下備份數據庫所有的數據文件
聯機日志
控制文件(在一個目
錄下)
如果成功備份
所有文件是一致的;
沒有備份參數文件
參數文件可以另外備份
沒有必要每次都備份
只需要在改變設置後備份一次;
如果以上命令沒有成功依次執行
那麼備份將是無效的
如連接數據庫不成功
那麼肯定關閉數據庫也不成功
那麼備份則無效;
冷備份建議下人工干預下執行
數據庫OS熱全備份腳本
rem script:hotbak
sql
rem creater:chenjiping
rem date:
rem desc:backup all database datafile in archive
connect database
connect internal/password;
archive
alter system archive log current;
start
alter tablespace system begin backup;
!xcopy d:\Oracle\oradata\test\system
dbf d:\databak/H/R;
alter tablespace system end backup;
alter tablespace rbs begin backup;
!xcopy d:\Oracle\oradata\test\rbs
dbf d:\databak/H/R;
alter tablespace rbs end backup;
alter tablespace users begin backup;
!xcopy d:\Oracle\oradata\test\users
dbf d:\databak/H/R;
alter tablespace users end backup;
alter tablespace tools begin backup;
!xcopy d:\Oracle\oradata\test\tools
dbf d:\databak/H/R;
alter tablespace tools end backup;
alter tablespace indx begin backup;
!xcopy d:\Oracle\oradata\test\indx
dbf d:\databak/H/R;
alter tablespace indx end backup;
end
bak control file
binary
alter database backup controlfile to
d:\databak\controlbinbak
;
ascii
alter database backup controlfile to trace;
alter system archive log current;
說明
熱備份必須在數據庫歸檔方式下才可以運行
以上腳本可以在數據庫運行狀態下備份數據庫所有的數據文件(除了臨時數據文件)
沒有必要備份聯機日志
歸檔日志至少需要一次完整備份之後的所有日志
如果以上命令沒有成功依次執行
那麼備份也是無效的
如連接數據庫不成功
那麼備份則無效
RMAN備份只講敘有恢復目錄的情況
如果沒有恢復目錄
情形大致相似
以下是RMAN的熱備份全備份的腳本
# script:bakup
rcv
# creater:chenjiping
# date:
# desc:backup all database datafile in archive with rman
# connect database
connect rcvcat rman/rman@back;
connect target internal/virpure;
# start backup database
run{
allocate channel c
type disk;
backup full tag
dbfull
format
d:\backup\full%u_%s_%p
database
include current controlfile;
sql
alter system archive log current
;
release channel c
;
}
# end
From:http://tw.wingwit.com/Article/program/Oracle/201311/17129.html