oracle 熱備份

  1. Oracle 熱備份是指數據庫處於open狀態下,對數據庫的數據文件、控制文件、參數文件、密碼文件等
  2. 進行一系列備份操作。 
  3.  
  4. 熱備是基於用戶管理備份恢復的一種方式,也是除了RMAN備份之外較爲常用的一種備份方式。 
  5.  
  6. 進行oracle熱備份日誌必須開啓歸檔模式(數據庫在mount狀態下運行----alter  database archivelog) 
  7.  
  8. SQL> startup  mount; 
  9. ORACLE instance started. 
  10.  
  11. Total System Global Area  524288000 bytes 
  12. Fixed Size          2022016 bytes 
  13. Variable Size         159384960 bytes 
  14. Database Buffers      356515840 bytes 
  15. Redo Buffers            6365184 bytes 
  16. Database mounted. 
  17.  
  18. SQL> archive log list(查看日誌是否歸檔) 
  19. Database log mode          Archive Mode 
  20. Automatic archival         Enabled 
  21. Archive destination        USE_DB_RECOVERY_FILE_DEST 
  22. Oldest online log sequence     5 
  23. Next log sequence to archive   7 
  24. Current log sequence           7 
  25.  
  26. SQL> select log_mode from v$database;(查看日誌是否歸檔) 
  27.  
  28. LOG_MODE 
  29. ------------ 
  30. ARCHIVELOG 
  31. @@@@@ 
  32. 基於表空間的熱備份實驗: 
  33. SQL> select checkpoint_change#,name from v$datafile; 
  34.  
  35. CHECKPOINT_CHANGE# NAME 
  36. ------------------ ---------------------------------------------------------------------------------------------------- 
  37.         674728 /u01/app/oracle/oradata/orcl/system01.dbf 
  38.         674728 /u01/app/oracle/oradata/orcl/undotbs01.dbf 
  39.         674728 /u01/app/oracle/oradata/orcl/sysaux01.dbf 
  40.         674728 /u01/app/oracle/oradata/orcl/users01.dbf 
  41.         674728 /u01/app/oracle/oradata/orcl/example01.dbf 
  42.  
  43.  
  44. SQL> alter tablespace users begin backup;鎖定了users表空間對應的數據文件頭的change scn。  
  45.     數據庫怎麼用日誌文件做恢復:查找不一致的數據文件(根據文件頭中舊的scn) 
  46.     如果鎖定了文件頭,這個文件頭中的scn就不會改變(當然了數據塊還是會變化的,還可以做讀寫)。
  47.  然後就會應用這個scn到現在的日誌。 
  48.     那我鎖定了scn,不管你後邊怎麼修改,總之做恢復的時候是應用鎖定的時候的scn一直到現在的日誌
  49. (完全恢復的話)  
  50.  
  51.  
  52. SQL> select * from v$backup; 
  53.  
  54.      FILE# STATUS        CHANGE# TIME 
  55. ---------- ------------------ ---------- ------------------ 
  56.      1 NOT ACTIVE              0 
  57.      2 NOT ACTIVE              0 
  58.      3 NOT ACTIVE              0 
  59.      4 ACTIVE         676082 02-MAR-13 
  60.      5 NOT ACTIVE              0 
  61.  
  62. 路徑(/u01/app/oracle/oradata/orcl)
  63.  [oracle@station7 orcl]$ cp users01.dbf /home/oracle/backup/(備份users表空間) 
  64.  
  65. SQL> alter tablespace users end backup; 
  66.  
  67. SQL> select * from v$backup; 
  68.  
  69.      FILE# STATUS        CHANGE# TIME 
  70. ---------- ------------------ ---------- ------------------ 
  71.      1 NOT ACTIVE              0 
  72.      2 NOT ACTIVE              0 
  73.      3 NOT ACTIVE              0 
  74.      4 NOT ACTIVE         676082 02-MAR-13 
  75.      5 NOT ACTIVE              0 
  76. @@@@@ 
  77. 熱備份時相關SCN 如何處理? 
  78.  
  79. 在開始進行熱備份時,數據文件頭的checkpoint scn 和控制文件中該文件的scn lock住,
  80. 但是數據文件的dml操作可以正常進行,也就意味着block 的scn 是正常增加的,數據文件並沒有鎖定。
  81. 爲什麼要Lock 文件的checkpoint scn(實際上對應了恢復時的rba)
  82.  主要是爲了標示進行恢復操作時需要的redo log, 這樣就可以保證數據文件內所有的塊都能得到恢復,
  83. 因爲在進行數據文件拷貝時無法保證數據文件頭是最先拷貝完成的。
  84. 如果先拷貝的是數據文件的其他部分然後才 去拷貝的數據文件頭,
  85. 這時候很有可能數據文件頭的checkpoint scn已經改變了而恢復時應用redo log的範圍是由數據文件頭的rba決定的。
  86. 當熱備份結束時,在備份結束的時候,oracle會把數據文件頭和control文件中關於這個數據文件的SCN號
  87. 更新爲數據庫的SCN號 
  88.  
  89. @@@@ 
  90. 表空間級檢查點 
  91. 爲什麼儲存在CONTROL FILE中要分爲兩個地方(SYSTEM CHECKPOINT SCN,DATAFILE CHECKPOINT SCN) ? 
  92.  
  93. 當你把一個tbs設爲read-only時,他的SCN會凍結停止,此時DATAFILE CHECKPOINT SCN是不會再遞增改變的,
  94.  但是整體的SYSTEM CHECKPOINT SCN卻仍然會不斷遞增前進。 
  95. 所以,這就是爲什麼需要分別在兩個地方儲存SCN。 
  96. --測試前 
  97. SQL> select checkpoint_change#,name from v$database ; 
  98.  
  99. CHECKPOINT_CHANGE# NAME 
  100. ------------------ --------- 
  101.         678717 ORCL 
  102.  
  103. SQL> select checkpoint_change#,name from v$datafile where name like '%user%';  
  104.  
  105. CHECKPOINT_CHANGE# 
  106. ------------------ 
  107. NAME 
  108. -------------------------------------------------------------------------------- 
  109.         678717  
  110. /u01/app/oracle/oradata/orcl/users01.dbf 
  111.  
  112.  
  113. --測試 
  114. SQL> alter tablespace users read only
  115.  
  116. Tablespace altered 
  117.  
  118.  
  119. --測試後 
  120. SQL> select checkpoint_change#,name from v$database ; 
  121.  
  122. CHECKPOINT_CHANGE# NAME 
  123. ------------------ --------- 
  124.         678717(不變) ORCL  
  125.  
  126. SQL> select checkpoint_change#,name from v$datafile where name like '%user%';  
  127.  
  128. CHECKPOINT_CHANGE# 
  129. ------------------ 
  130. NAME 
  131. -------------------------------------------------------------------------------- 
  132.         679072(增加) 
  133. /u01/app/oracle/oradata/orcl/users01.dbf 
  134.  
  135. @@@@@ 
  136.  
  137. select checkpoint_change# from v$database
  138. CHECKPOINT_CHANGE# 
  139. -------------------- 
  140. 293184 
  141. select name,checkpoint_change#,last_change# from v$datafile where name like '%user%'
  142. NAME CHECKPOINT_CHANGE# LAST_CHANGE# 
  143. ----------------------------------- -------------------- -------------- 
  144. /u02/oradata/OMFD1/users01.dbf 293184 293184 
  145. 正常shutdown database後,SCN會發生什麼變化? 
  146. 我們可以把數據庫開在mount mode 
  147. 可以看到儲存在control file中的三個SCN位置都是相同,注意此時的stop scn不會是NULL,而是等於start scn 
  148.  
  149.  
  150. 我們來查詢datafile header SCN: 
  151. select name,checkpoint_change# from v$datafile_header where name like '%users01%'
  152. NAME CHECKPOINT_CHANGE# 
  153. ----------------------------------- -------------------- 
  154. /u02/oradata/OMFD1/users01.dbf 293184 
  155.  
  156. 當clean shutdown 時,checkpoint會進行,並且此時datafile的stop scn和start scn會相同。
  157.  等到我門開啓數據庫時,Oracle檢查datafile header中的start scn和存於control file中的datafile的scn
  158. 是否相同,
  159.  如果相同,接着檢查start scn和stop scn是否相同,如果仍然相同,數據庫就會正常開啓,
  160. 否則就需要recovery...
  161.  等到數據庫開啓後,儲存在control file中的stop scn就會恢復爲NULL值,
  162. 此時表示datafile是open在正常模式下了。 
  163. @@@@@ 
  164. crash recovery 和media recovery 的比較 
  165. 啓動數據庫時,如果發現STOP SCN = NULL,表示需要進行crash recovery;啓動數據庫時,
  166. 如果發現有datafile header的START SCN 不等於儲存於CONTROLFILE的DATAFILE SCN,
  167. 表示需要進行Media recovery 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章