-- 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 冷備份
九、更多參考
Oracle 冷備份
SPFILE錯誤導致資料庫無法啟動
Oracle 使用者、對象許可權、系統許可權
Oracle 角色、設定檔
Oracle 聯機重做記錄檔(ONLINE LOG FILE)
Oracle 控制檔案(CONTROLFILE)
Oracle 資料表空間與資料檔案
Oracle 歸檔日誌
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/robinson_0612/archive/2010/08/16/5816012.aspx