程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> oracle熱備份用戶管理備份之塊撕裂

oracle熱備份用戶管理備份之塊撕裂

編輯:Oracle教程

oracle熱備份-----用戶管理備份

基礎知識及講解:http://blog.csdn.net/wanghui5767260/article/details/20627639

用戶管理備份:是指用戶通過將表空間置於熱備份模式,然後通過操作系統工具進行拷貝,拷貝結束後表空間熱備份模式。

1.表空間單獨存盤

2.凍結文件頭 其他塊繼續使用此時拷貝只有文件頭是好塊

3.改變了日志的行為

實驗步驟: 1. 創建一個帶有序列號的大表作為測試表 tyger 2. 沒有開啟表空間熱備模式 ① 查看當前的日志產生量 ② 更新測試表中的第3行數據,並查看日志產生量 ③ 更新完第3行數據產生的日志量 新的日志產生量-舊的日志產生量 3. 開啟表空間熱備模式 ① 在次更新第3行數據,並查看日志產生量 ② 對比開啟熱備模式更新操作產生的日志 會發現產生大量日志 ③ 更新第10000行數據,並查看日志產生量 ④ 對比發現 更新操作也產生了大量的日志 ⑤ 更新第10001行數據,並查看日志產生量 ⑥ 發現這次更新操作反而產生了很少的日志 1. 創建一個帶序列號的大表tyger,這樣相鄰行都會在一個塊裡,序列號相距比較遠的就不會在同一個塊中
SYS@ORCL>create table tyger tablespace users as select rownum rn,o.*
2 from dba_objects o;


Table created.

2. 查看當前日志產生量(沒有開啟表空間熱備模式)
SYS@ORCL>select ms.statistic#,name,value
2 from v$mystat ms,v$statname sn
3 where ms.statistic#=sn.statistic# and name='redo size';


STATISTIC# NAME VALUE
---------- -------------------------------------------------- ----------
134 redo size 12245956


3. 更行 表tyger 中的第3行數據
SYS@ORCL>update tyger set object_id=99999 where rn=3;


1 row updated.


SYS@ORCL>commit;


Commit complete.


4.查看更新第3行數據後的日志產生量
SYS@ORCL>select ms.statistic#,name,value
2 from v$mystat ms,v$statname sn
3 where ms.statistic#=sn.statistic# and name='redo size';


STATISTIC# NAME VALUE
---------- -------------------------------------------------- ----------
134 redo size 12246604


5. 計算更新第3行產生的日志量
SYS@ORCL>select 12246604-12245956 from dual;


12246604-12245956
-----------------
648 //未開啟熱備模式


6. 開啟users表空間熱備模式
SYS@ORCL>alter tablespace users begin backup;


Tablespace altered.


7. 繼續更新第3行的ID

SYS@ORCL>update tyger set object_id=88888 where rn=3;


1 row updated.


SYS@ORCL>commit;


Commit complete.


8.查看當前的日志產生量
SYS@ORCL>select ms.statistic#,name,value
2 from v$mystat ms,v$statname sn
3 where ms.statistic#=sn.statistic# and name='redo size';


STATISTIC# NAME VALUE
---------- -------------------------------------------------- ----------
134 redo size 12256856


9. 計算在開啟熱備模式後 更新第3行數據產生的日志量 (明顯高於沒有開啟熱備模式的日志量10252 >> 648)
SYS@ORCL>select 12256856-12246604 from dual;


12256856-12246604
-----------------
10252 //開啟熱備模式後產生大量的日志量


10. 更新第10000行的ID查看更新後的日志量
SYS@ORCL>update tyger set object_id=77777 where rn=10000;


1 row updated.


SYS@ORCL>commit;


Commit complete.


SYS@ORCL>select ms.statistic#,name,value
2 from v$mystat ms,v$statname sn
3 where ms.statistic#=sn.statistic# and name='redo size';


STATISTIC# NAME VALUE
---------- -------------------------------------------------- ----------
134 redo size 12265660


11. 計算更新了第10000行後的日志產生量
SYS@ORCL>select 12265660-12256856 from dual;


12265660-12256856
-----------------
8804 //首次更新第10000行產生大量日志量


12. 繼續更新第10001行的數據查看日志產生量
SYS@ORCL>update tyger set object_id=98765 where rn=10001;


1 row updated.


SYS@ORCL>select ms.statistic#,name,value
2 from v$mystat ms,v$statname sn
3 where ms.statistic#=sn.statistic# and name='redo size';


STATISTIC# NAME VALUE
---------- -------------------------------------------------- ----------
134 redo size 12266140

13. 此時發現更新完第10000行後繼續更新第10001行數據日志量很少
SYS@ORCL>select 12266140-12265660 from dual;


12266140-12265660
-----------------
480 //再次更新第10001行產生很少的日志量


結論: 通過用戶管理備份方式備份數據文件時,會將需要備份的數據文件頭部的SCN號凍結,但是其他塊還是好塊,可以繼續寫入數據,更新10000行數據時將所在數據塊頭部凍結,所以會產生大量日志,但是更新10001行數據時,此時的數據文件頭部已經被凍結,所以產生的日志量會很少。所以通過熱備-用戶管理備份方式改變了日志的行為。

\

圖中所示:對於一個正在進行熱備--用戶管理備份的數據塊,此時的數據塊塊頭的SCN號已經被凍結,當備份過程中突然數據庫崩潰,此時該塊狀態:數據塊塊頭凍結,數據塊一半已備份,另一半未備份,這就是塊撕裂 重新開啟數據庫需要對該塊執行重新熱備份。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved