--=======================
-- Oracle 熱備份
--=======================
Oracle 熱備份是指數據庫處於open狀態下,對數據庫的數據文件、控制文件、參數文件、密碼文件等進行一系列備份操作。
熱備是基於用戶管理備份恢復的一種方式,也是除了RMAN備份之外較為常用的一種備份方式。
一、熱備的過程
凍結塊頭-->控制SCN在備份時不發生變化
進行物理拷貝
解凍塊頭-->讓SCN可以變化(當對SCN解凍后,系統會自動更新SCN至最新的狀態)
二、基於數據庫的熱備
alter database begin backup;
拷貝所有的datafile到備份目錄
alter database end backup;
三、基於表空間的熱備
alter tablespace tablespace_name begin backup;
拷貝tablespace_name表空間的數據文件到備份目錄
alter tablespace tablespace_name end backup;
alter tablespace tablespace_name begin backup時完成的任務
檢查點事件發生,檢查點通知DBWn將該表空間上所有的臟數據被寫入到磁盤
在數據文件頭部凍結當前檢查點事件發生時的SCN號
所有發生變化數據塊的完整鏡像(修改前后)被寫入到redo log中
允許該表空間內數據的正常讀寫
建議使用基於表空間的熱備,這樣將盡可能的減少對系統性能的影響
四、控制文件的熱備
alter database backup controlfile to '<dir>'; --控制文件的完整備份
alter database backup controlfile to trace as '<dir>' --用於創建控制文件的語句,丟失了部分信息
控制文件發生變化情況
alter database [add |drop] logfile
alter database [add |drop] logfile member
alter database [add |drop] logfile group
alter database [archivelog |noarchivelog]
alter database rename file
create tablespace
alter tablespace [add | rename] datafile
alter tablespace [read write | read only]
drop tablespace
更多關於控制文件請參考:Oracle 控制文件
五、參數文件的熱備
create pfile from spfile ;
create pfile = '<dir>' from spfile;
更多關於參數文件請參考:Oracle 參數文件
六、臨時表空間的數據文件、日志文件不需要備份
--查看臨時表空間
SQL> select tablespace_name from dba_temp_files;
TABLESPACE_NAME
------------------------------
TEMP
--查看臨時表空間的數據文件
SQL> select name from v$tempfile;
NAME
------------------------------------------------------
/u01/app/oracle/oradata/orcl/temp01.dbf
--將臨時表空間置為備份模式,收到了錯誤的提示
SQL> alter tablespace temp begin backup;
alter tablespace temp begin backup
*
ERROR at line 1:
ORA-03217: invalid option for alter of TEMPORARY TABLESPACE
--將臨時表空間置為備份模式,收到了錯誤的提示
SQL> alter temporary tablespace temp begin backup;
alter temporary tablespace temp begin backup
*
ERROR at line 1:
ORA-00940: invalid ALTER command
七、熱備腳本
1.基於數據庫熱備的腳本
SQL> ho cat /tmp/tmphotbak.sql;
set feedback off
set heading off
set verify off
set trimspool off
set pagesize 0
set linesize 200
define dir = '/u01/app/Oracle/hotbak'
define script = '/tmp/hotbak.sql'
spool &script
select 'ho cp ' ||name|| ' &dir' from v$datafile;
spool off
alter database begin backup;
start &script
alter database end backup;
alter database backup controlfile to '&dir/controlbak.ctl';
create pfile = '&dir/initorcl.ora' from spfile;
SQL> start /tmp/tmphotbak.sql; --執行該腳本即可對數據庫進行熱備
2.基於表空間熱備的腳本
SQL> ho cat /tmp/tmphotbak_tb.sql
set feedback off
set heading off
set verify off
set trimspool off
set pagesize 0
set linesize 200
define dir = '/u01/app/oracle/hotbak'
define script = '/tmp/hotbak_tb.sql'
ho rm &script
ho rm &dir/*
spool &script
select 'alter tablespace '|| tablespace_name ||' begin backup ;' ||
chr(10)||'ho cp ' || file_name || ' &dir ' ||
chr(10)||'alter tablespace '|| tablespace_name || ' end backup;'
from dba_data_files order by tablespace_name;
spool off
start &script
alter database backup controlfile to '&dir/controlbak.ctl';
create pfile = '&dir/initorcl.ora' from spfile;
SQL> start /tmp/tmphotbak.sql; --執行該腳本即可對數據庫基於表空間進行熱備
八、備份的相關視圖
v$backup
SQL> desc v$backup;
Name Null? Type
----------------------------------------- -------- ---------------------
FILE# NUMBER
STATUS VARCHAR2(18)
CHANGE# NUMBER --記錄備份時的SCN號
TIME DATE
SQL> select * from v$backup; --狀態為NOT ACTIVE ,此時沒有任何數據處於備份狀態
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- ---------
1 NOT ACTIVE 1006747 16-AUG-10
2 NOT ACTIVE 1006793 16-AUG-10
3 NOT ACTIVE 1006729 16-AUG-10
4 NOT ACTIVE 1006807 16-AUG-10
5 NOT ACTIVE 1006717 16-AUG-10
SQL> alter tablespace users begin backup; --對表空間users進行熱備
Tablespace altered.
SQL> select * from v$backup; --對應的file# 為的處於ACTIVE狀態
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- ---------
1 NOT ACTIVE 1006747 16-AUG-10
2 NOT ACTIVE 1006793 16-AUG-10
3 NOT ACTIVE 1006729 16-AUG-10
4 ACTIVE 1006852 16-AUG-10
5 NOT ACTIVE 1006717 16-AUG-10
--備份時發生斷電或意外故障的恢復
--假定users表空間目前置於begin bakup模式,系統斷電
SQL> alter tablespace users begin backup;
Tablespace altered.
--在另一個會話中強制關閉數據庫
SQL> shutdown abort;
ORACLE instance shut down.
--啟動后收到錯誤提示
SQL> startup
ORACLE instance started.
Total System Global Area 469762048 bytes
Fixed Size 1220048 bytes
Variable Size 92275248 bytes
Database Buffers 373293056 bytes
Redo Buffers 2973696 bytes
Database mounted.
ORA-01113: file 4 needs media recovery
ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'
--查看備份視圖,文件此時處於活動狀態
SQL> select * from v$backup;
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- ---------
1 NOT ACTIVE 1006958 16-AUG-10
2 NOT ACTIVE 1006983 16-AUG-10
3 NOT ACTIVE 1006943 16-AUG-10
4 ACTIVE 1007072 16-AUG-10
5 NOT ACTIVE 1006931 16-AUG-10
--使用end backup來終止備份
SQL> alter database datafile 4 end backup; --此處也可以使用recover datafile 4來完成恢復
Database altered.
SQL> alter database open;
Database altered.
SQL> select * from dual;
D
-
X
有關Oracle的冷備份,請參考:Oracle 冷備份