一、 什么是熱備份
熱備份也叫聯機備份,它是指數據庫處於open狀態下,對數據庫的數據文件、控制文件、參數文件、密碼文件等進行一系列備份操作(其中數據文件是必須備份的)。
它要求數據庫處在歸檔模式下。
在熱備時,是可以進行DML操作的
二、 熱備的過程
凍結塊頭-->控制SCN在備份時不發生變化,並產生檢查點,發生在置於備份狀態的時候
進行物理拷貝
解凍塊頭-->讓SCN可以變化(當對SCN解凍后,系統會自動更新SCN至最新的狀態)
三、 需要注意的問題
由於數據文件處於備份狀態時重做日志后台進程要將這些文件的所有的變化數據塊寫到重做日志文件中,這對重做日志緩沖區和重做日志文件的壓力都增大了,所以需要注意幾下加點:
- 重做日志緩沖區和重做日志文件適當增大
- 在聯機備份時,每次只備份一個表空間
- 在DML最少的時候做備份
四、 幾種不同的熱備方式
1、 基於表空間的熱備
--查詢表空間的名字和狀態
SQL> select file_id,tablespace_name,status from dba_data_files; FILE_ID TABLESPACE_NAME STATUS ---------- ------------------------------ --------- 4 USERS AVAILABLE 3 UNDOTBS1 AVAILABLE 2 SYSAUX AVAILABLE 1 SYSTEM AVAILABLE 5 COSTCTL_TBS AVAILABLE 6 DEV_DATA AVAILABLE 7 PDMS_DATA AVAILABLE 已選擇7行。
--開始備份,將會
SQL> alter tablespace PDMS_DATA begin backup; 表空間已更改。
--拷貝數據文件到指定的備份磁盤上
SQL> host cp /opt/oracle/app/oradata/pdms/PDMS_DATA.dbf /u03/backup/hotbak
--查看所有數據文件的備份狀態
SQL> select * from v$backup; FILE# STATUS CHANGE# TIME ---------- ------------------ ---------- -------------- 1 NOT ACTIVE 0 2 NOT ACTIVE 0 3 NOT ACTIVE 0 4 NOT ACTIVE 0 5 NOT ACTIVE 0 6 NOT ACTIVE 0 7 ACTIVE 12657642 15-12月-16
--將表空間重新設置為非備份狀態
SQL> alter tablespace PDMS_DATA end backup; 表空間已更改。
--查看備份狀態
SQL> select * from v$backup; FILE# STATUS CHANGE# TIME ---------- ------------------ ---------- -------------- 1 NOT ACTIVE 0 2 NOT ACTIVE 0 3 NOT ACTIVE 0 4 NOT ACTIVE 0 5 NOT ACTIVE 0 6 NOT ACTIVE 0 7 NOT ACTIVE 12657642 15-12月-16 已選擇7行。
2. 基於數據庫的熱備
alter database begin backup;
拷貝所有的datafile到備份目錄
alter database end backup;
3. 控制文件的熱備
alter database backup controlfile to '<dir>' [reuse]; --控制文件的完整備份
alter database backup controlfile to trace as '<dir>' --用於創建控制文件的語句,丟失了部分信息,可以直接查看
SQL> alter database backup controlfile to '/u03/backup/hotbak/control01.ctl'; 數據庫已更改。 SQL> alter database backup controlfile to trace as '/u03/backup/hotbak/control02.ctl'; 數據庫已更改。
查control02.ctl

4. 參數文件的熱備
create pfile from spfile ;
create pfile = '<dir>' from spfile;
SQL> create pfile = '/u03/backup/hotbak/initdbsrv1.ora' from spfile; 文件已創建。
5. 臨時表空間的數據文件、日志文件不需要備份
五、熱備腳本
基於表空間的熱備(推薦使用這種方式)
vim hotbak.sql
set feedback off set heading off set verify off set trimspool off set pagesize 0 set linesize 200 define dir = '/u03/backup/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/initdbsrv1.ora' from spfile;
其中char(10)表示換行,紅色部分需要自行修改
SQL> start hotbak.sql; --執行該腳本即可對數據庫基於表空間進行熱備
基於數據庫(數據文件)的熱備
vim hotbak.sql
set feedback off set heading off set verify off set trimspool off set pagesize 0 set linesize 200 define dir = '/u03/backup/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/initdbsrv1.ora' from spfile;