oracle聯機熱備份的原理(1)
要求歸檔模式
SQL>; archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 14
Next log sequence to archive 16
Current log sequence 16
-------------
先看使用者管理的熱備份
看看下面這個關鍵的操作,將備份的內容置於backup模式,使用者管理的聯機熱備份必需的操作,不然copy備份的資料檔案不能用來恢復,即使用某些放時恢復了也會丟資料
SQL>; alter tablespace users begin backup;
Tablespace altered.
SQL>; list
1 select d.file_name filename,d.tablespace_name ts_name,b.status
2 from dba_data_files d,v$backup b
3* where d.file_id=b.file#
SQL>; /
FILENAME TS_NAME STATUS
---------------------------------------- ---------- ------------------
/u02/oradata/sales/system01.dbf SYSTEM NOT ACTIVE
/u02/oradata/sales/undotbs01.dbf UNDOTBS1 NOT ACTIVE
/u02/oradata/sales/sysaux01.dbf SYSAUX NOT ACTIVE
/u02/oradata/sales/users01.dbf USERS ACTIVE
/u02/oradata/sales/example01.dbf EXAMPLE NOT ACTIVE
/u02/oradata/sales/perfstat.dbf PERFSTAT NOT ACTIVE
USERS表空間現在處於backup模式,究竟這時候怎麼了?
在我們alter tablespace users begin backup 的時候是鎖定了users表空間對應的資料檔案頭的change scn。
首先考慮一下資料庫怎麼用日誌檔案做恢復:查詢不一致的資料檔案(根據檔案頭中舊的scn)
如果鎖定了檔案頭,這個檔案頭中的scn就不會改變(當然了資料塊還是會變化的,還可以做讀寫)。 然後就會應用這個scn到現在的日誌。
那我鎖定了scn,不管你後邊怎麼修改,總之做恢復的時候是應用鎖定的時候的scn一直到現在的日誌(完全恢復的話)
舉個例子:
a,b兩個資料檔案,把a置於備份模式,b正常
這時候兩個change scn都是100,然後開始備份
這期間有資料庫的修改,備份完成的時候,Scn變成了200。但是由於a的備份模式,所以a的檔案頭中記錄的scn還是100,b是200。
某個時間,假設scn 500
這時候a丟失
copy回a的備份,然後recover,完全恢復的話資料庫就應用100—500這段的日誌,自然也就不會丟失資料了。
因為不管在我copy備份的過程中你做什麼操作,總之都在鎖定的時change scn之後,所以應用的日誌就不會有遺漏了。
這時候應該能理解為什麼要資料庫處於archived模式了
看看資料檔案頭的change scn
SQL>;select NAME,TABLESPACE_NAME,STATUS,CHECKPOINT_CHANGE# from v$datafile_header;
NAME TABLESPACE STATUS CHECKPOINT_CHANGE#
-------------------------------- ---------- -------------- ------------------
/u02/oradata/sales/system01.dbf SYSTEM ONLINE 545926
/u02/oradata/sales/undotbs01.dbf UNDOTBS1 ONLINE 545926
/u02/oradata/sales/sysaux01.dbf SYSAUX ONLINE 545926
/u02/oradata/sales/users01.dbf USERS ONLINE 545498
/u02/oradata/sales/example01.dbf EXAMPLE ONLINE 545926
/u02/oradata/sales/perfstat.dbf PERFSTAT ONLINE 545926
6 rows selected.
顯然,在將users表空間置於backup狀態的時候,相應的datafile的檔案頭的scn就不會再發生改變,發生檢查點也不會改變。
SQL>; alter system checkpoint;
System altered.
SQL>; select NAME,TABLESPACE_NAME,STATUS,CHECKPOINT_CHANGE# from v$datafile_header;
NAME TABLESPACE STATUS CHECKPOINT_CHANGE#
-------------------------------- ---------- -------------- ------------------
/u02/oradata/sales/system01.dbf SYSTEM ONLINE 546196
/u02/oradata/sales/undotbs01.dbf UNDOTBS1 ONLINE 546196
/u02/oradata/sales/sysaux01.dbf SYSAUX ONLINE 546196
/u02/oradata/sales/users01.dbf USERS ONLINE 545498
/u02/oradata/sales/example01.dbf EXAMPLE ONLINE 546196
/u02/oradata/sales/perfstat.dbf PERFSTAT ONLINE 546196
6 rows selected.
下面end backup,看看scn
SQL>; alter tablespace users end backup;
Tablespace altered.
SQL>; alter system checkpoint;
System altered.
SQL>;select NAME,TABLESPACE_NAME,STATUS,CHECKPOINT_CHANGE# from v$datafile_header;
NAME TABLESPACE STATUS CHECKPOINT_CHANGE#
-------------------------------- ---------- -------------- ------------------
/u02/oradata/sales/system01.dbf SYSTEM ONLINE 546467
/u02/oradata/sales/undotbs01.dbf UNDOTBS1 ONLINE 546467
/u02/oradata/sales/sysaux01.dbf SYSAUX ONLINE 546467
/u02/oradata/sales/users01.dbf USERS ONLINE 546467
/u02/oradata/sales/example01.dbf EXAMPLE ONLINE 546467
/u02/oradata/sales/perfstat.dbf PERFSTAT ONLINE 546467
6 rows selected.
------------------
再說說rman備份
個人認為理解了使用者管理的熱備份,rman就已經理解了一大半了
rman 備份是針對塊一級的,支援增量備份,稍後說怎麼做的增量備份
Rman備份並不需要將資料庫或者表空間置於backup狀態,但是它會把scn記錄在catalog中對應你的backupset
準備在恢復的時候來使用
對users表空間做一個完全備份
$ rman target sys/oracle nocatalog
RMAN>; run {
2>; allocate channel d1 type disk;
3>; backup
4>; format='/u03/oraclebk/%d_%N_%s.bk' tablespace users;
5>; release channel d1;
6>; }
看一下備份集裡都有什麼,注意看Ckp SCN 546792,
RMAN>; list backup of tablespace users;
List of Backup Sets
===================
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
3 Full 1M DISK 00:00:02 31-MAR-05
BP Key: 3 Status: AVAILABLE Compressed: NO Tag: TAG20050331T153729
Piece Name: /u03/oraclebk/SALES_USERS_4.bk
List of Datafiles in backup set 3
File LV Type Ckp SCN Ckp Time Name
---- -- ---- ---------- --------- ----
4 Full 546792 31-MAR-05 /u02/oradata/sales/users01.dbf
恢復的時候應用546792開始到現在的歸檔日誌和重做日誌.
---------------
rman的增量備份的基本原理
其實原理很簡單,主要就是弄明白怎麼樣在做增量備份時確定某個資料塊需要備份,哪個不需要
rman在做1級備份的時候怎麼來確定0級備份之後都有哪些資料塊做了修改呢?看下面一段
Each data block in a datafile contains a system change number (SCN), which is the
SCN at which the most recent change was made to the block. During an incremental
backup, RMAN reads the SCN of each data block in the input file and compares it to
the checkpoint SCN of the parent incremental backup. If the SCN in the input data
block is greater than or equal to the checkpoint SCN of the parent, then RMAN copies
the block.
原來block裡邊也有一個change scn
也就是說在做level 1級備份的時候,需要掃描所有的資料塊並且用塊中記錄修改的SCN跟level 0備份時的SCN做比較(備份記錄中的Ckp SCN),來確定這個塊是否需要備份。
所以掃描整個資料檔案是不可避免的 !
這是傳統的rman做增量備份
在10g中rman做增量備份不再需要掃描整個資料檔案了
10g引入的新特性 block change tracking:
Block change tracking程式記錄自從上一次備份以來資料塊的變化,並把這些資訊記錄在跟蹤檔案中。RMAN使用這個檔案判斷增量備份中需要備份的變更資料。這極大的促進了備份效能,RMAN可以不再掃描整個檔案以查詢變更資料。
RMAN's change tracking feature for incremental backups improves incremental
backup performance by recording changed blocks in each datafile in a change tracking
file. If change tracking is enabled, RMAN uses the change tracking file to identify
changed blocks for incremental backup, thus avoiding the need to scan every block in
the datafile.
估計是使用的點陣圖檔案做的記錄![@more@]
SQL>; archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 14
Next log sequence to archive 16
Current log sequence 16
-------------
先看使用者管理的熱備份
看看下面這個關鍵的操作,將備份的內容置於backup模式,使用者管理的聯機熱備份必需的操作,不然copy備份的資料檔案不能用來恢復,即使用某些放時恢復了也會丟資料
SQL>; alter tablespace users begin backup;
Tablespace altered.
SQL>; list
1 select d.file_name filename,d.tablespace_name ts_name,b.status
2 from dba_data_files d,v$backup b
3* where d.file_id=b.file#
SQL>; /
FILENAME TS_NAME STATUS
---------------------------------------- ---------- ------------------
/u02/oradata/sales/system01.dbf SYSTEM NOT ACTIVE
/u02/oradata/sales/undotbs01.dbf UNDOTBS1 NOT ACTIVE
/u02/oradata/sales/sysaux01.dbf SYSAUX NOT ACTIVE
/u02/oradata/sales/users01.dbf USERS ACTIVE
/u02/oradata/sales/example01.dbf EXAMPLE NOT ACTIVE
/u02/oradata/sales/perfstat.dbf PERFSTAT NOT ACTIVE
USERS表空間現在處於backup模式,究竟這時候怎麼了?
在我們alter tablespace users begin backup 的時候是鎖定了users表空間對應的資料檔案頭的change scn。
首先考慮一下資料庫怎麼用日誌檔案做恢復:查詢不一致的資料檔案(根據檔案頭中舊的scn)
如果鎖定了檔案頭,這個檔案頭中的scn就不會改變(當然了資料塊還是會變化的,還可以做讀寫)。 然後就會應用這個scn到現在的日誌。
那我鎖定了scn,不管你後邊怎麼修改,總之做恢復的時候是應用鎖定的時候的scn一直到現在的日誌(完全恢復的話)
舉個例子:
a,b兩個資料檔案,把a置於備份模式,b正常
這時候兩個change scn都是100,然後開始備份
這期間有資料庫的修改,備份完成的時候,Scn變成了200。但是由於a的備份模式,所以a的檔案頭中記錄的scn還是100,b是200。
某個時間,假設scn 500
這時候a丟失
copy回a的備份,然後recover,完全恢復的話資料庫就應用100—500這段的日誌,自然也就不會丟失資料了。
因為不管在我copy備份的過程中你做什麼操作,總之都在鎖定的時change scn之後,所以應用的日誌就不會有遺漏了。
這時候應該能理解為什麼要資料庫處於archived模式了
看看資料檔案頭的change scn
SQL>;select NAME,TABLESPACE_NAME,STATUS,CHECKPOINT_CHANGE# from v$datafile_header;
NAME TABLESPACE STATUS CHECKPOINT_CHANGE#
-------------------------------- ---------- -------------- ------------------
/u02/oradata/sales/system01.dbf SYSTEM ONLINE 545926
/u02/oradata/sales/undotbs01.dbf UNDOTBS1 ONLINE 545926
/u02/oradata/sales/sysaux01.dbf SYSAUX ONLINE 545926
/u02/oradata/sales/users01.dbf USERS ONLINE 545498
/u02/oradata/sales/example01.dbf EXAMPLE ONLINE 545926
/u02/oradata/sales/perfstat.dbf PERFSTAT ONLINE 545926
6 rows selected.
顯然,在將users表空間置於backup狀態的時候,相應的datafile的檔案頭的scn就不會再發生改變,發生檢查點也不會改變。
SQL>; alter system checkpoint;
System altered.
SQL>; select NAME,TABLESPACE_NAME,STATUS,CHECKPOINT_CHANGE# from v$datafile_header;
NAME TABLESPACE STATUS CHECKPOINT_CHANGE#
-------------------------------- ---------- -------------- ------------------
/u02/oradata/sales/system01.dbf SYSTEM ONLINE 546196
/u02/oradata/sales/undotbs01.dbf UNDOTBS1 ONLINE 546196
/u02/oradata/sales/sysaux01.dbf SYSAUX ONLINE 546196
/u02/oradata/sales/users01.dbf USERS ONLINE 545498
/u02/oradata/sales/example01.dbf EXAMPLE ONLINE 546196
/u02/oradata/sales/perfstat.dbf PERFSTAT ONLINE 546196
6 rows selected.
下面end backup,看看scn
SQL>; alter tablespace users end backup;
Tablespace altered.
SQL>; alter system checkpoint;
System altered.
SQL>;select NAME,TABLESPACE_NAME,STATUS,CHECKPOINT_CHANGE# from v$datafile_header;
NAME TABLESPACE STATUS CHECKPOINT_CHANGE#
-------------------------------- ---------- -------------- ------------------
/u02/oradata/sales/system01.dbf SYSTEM ONLINE 546467
/u02/oradata/sales/undotbs01.dbf UNDOTBS1 ONLINE 546467
/u02/oradata/sales/sysaux01.dbf SYSAUX ONLINE 546467
/u02/oradata/sales/users01.dbf USERS ONLINE 546467
/u02/oradata/sales/example01.dbf EXAMPLE ONLINE 546467
/u02/oradata/sales/perfstat.dbf PERFSTAT ONLINE 546467
6 rows selected.
------------------
再說說rman備份
個人認為理解了使用者管理的熱備份,rman就已經理解了一大半了
rman 備份是針對塊一級的,支援增量備份,稍後說怎麼做的增量備份
Rman備份並不需要將資料庫或者表空間置於backup狀態,但是它會把scn記錄在catalog中對應你的backupset
準備在恢復的時候來使用
對users表空間做一個完全備份
$ rman target sys/oracle nocatalog
RMAN>; run {
2>; allocate channel d1 type disk;
3>; backup
4>; format='/u03/oraclebk/%d_%N_%s.bk' tablespace users;
5>; release channel d1;
6>; }
看一下備份集裡都有什麼,注意看Ckp SCN 546792,
RMAN>; list backup of tablespace users;
List of Backup Sets
===================
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
3 Full 1M DISK 00:00:02 31-MAR-05
BP Key: 3 Status: AVAILABLE Compressed: NO Tag: TAG20050331T153729
Piece Name: /u03/oraclebk/SALES_USERS_4.bk
List of Datafiles in backup set 3
File LV Type Ckp SCN Ckp Time Name
---- -- ---- ---------- --------- ----
4 Full 546792 31-MAR-05 /u02/oradata/sales/users01.dbf
恢復的時候應用546792開始到現在的歸檔日誌和重做日誌.
---------------
rman的增量備份的基本原理
其實原理很簡單,主要就是弄明白怎麼樣在做增量備份時確定某個資料塊需要備份,哪個不需要
rman在做1級備份的時候怎麼來確定0級備份之後都有哪些資料塊做了修改呢?看下面一段
Each data block in a datafile contains a system change number (SCN), which is the
SCN at which the most recent change was made to the block. During an incremental
backup, RMAN reads the SCN of each data block in the input file and compares it to
the checkpoint SCN of the parent incremental backup. If the SCN in the input data
block is greater than or equal to the checkpoint SCN of the parent, then RMAN copies
the block.
原來block裡邊也有一個change scn
也就是說在做level 1級備份的時候,需要掃描所有的資料塊並且用塊中記錄修改的SCN跟level 0備份時的SCN做比較(備份記錄中的Ckp SCN),來確定這個塊是否需要備份。
所以掃描整個資料檔案是不可避免的 !
這是傳統的rman做增量備份
在10g中rman做增量備份不再需要掃描整個資料檔案了
10g引入的新特性 block change tracking:
Block change tracking程式記錄自從上一次備份以來資料塊的變化,並把這些資訊記錄在跟蹤檔案中。RMAN使用這個檔案判斷增量備份中需要備份的變更資料。這極大的促進了備份效能,RMAN可以不再掃描整個檔案以查詢變更資料。
RMAN's change tracking feature for incremental backups improves incremental
backup performance by recording changed blocks in each datafile in a change tracking
file. If change tracking is enabled, RMAN uses the change tracking file to identify
changed blocks for incremental backup, thus avoiding the need to scan every block in
the datafile.
估計是使用的點陣圖檔案做的記錄![@more@]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18921899/viewspace-1017260/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle聯機熱備份的原理(轉)Oracle
- oracle聯機熱備份的原理(2)Oracle
- oracle聯機熱備份的原理,及rman增量備份原理Oracle
- Oracle聯機熱備份的原理及rman增量備份原理Oracle
- oracle聯機熱備份的原理及rman增量備份原理(zt)Oracle
- 揭祕ORACLE備份之--熱備份(也叫聯機備份)Oracle
- Oracle熱備份原理分析Oracle
- oracle雙機熱備份Oracle
- 熱備份原理
- oracle雙機熱備份方法Oracle
- Oracle使用者管理熱備份原理Oracle
- Oracle 聯機備份 離線備份 物理備份 恢復Oracle
- oracle的熱備份和冷備份Oracle
- Oracle 熱備份Oracle
- Oracle冷備份和熱備份的處理Oracle
- Oracle 熱備份和冷備份的區別Oracle
- Oracle OCP(62):熱備份Oracle
- Oracle備份恢復之熱備份恢復及異機恢復Oracle
- Oracle學習系列—資料庫備份—熱備份Oracle資料庫
- 歸納熱備份機制
- oracle備份恢復的大致原理!Oracle
- ORACLE備份策略(1)Oracle
- Oracle資料庫的熱備份與完整恢復測試 (1)Oracle資料庫
- Oracle資料庫冷備份與熱備份操作梳理Oracle資料庫
- mysql的冷備份與熱備份MySql
- Oracle物理熱備份指令碼(ZT)Oracle指令碼
- 搭建Oracle的exp備份機Oracle
- [Oracle] rman備份的指令碼(1)Oracle指令碼
- 資料庫備份與異機恢復——熱備份方式資料庫
- 歸檔模式下聯機熱備份某個表空間步驟模式
- linux下oracle熱備份指令碼LinuxOracle指令碼
- ORACLE備份&恢復案例(1)Oracle
- 學一點 mysql 雙機異地熱備份----快速理解mysql主從,主主備份原理及實踐MySql
- RMAN的備份原理
- XtraBackup完整備份與增量備份的原理
- Backup And Recovery User's Guide-RMAN備份概念-聯機備份和備份模式GUIIDE模式
- 防火牆的雙機熱備1:主備、負載方式防火牆負載
- MySQL的冷備份和熱備份概念理解(轉)MySql