測試truncate,delete 對rman 備份集大小的影響

huzhichengforce發表於2015-03-11
思路:
建立5張一模一樣大小的表並插入blob 欄位,表b3 在表空間b3上,表b4 在表空間b4上,表b7 在表空間b4上,表b5 在表空間b5上,。b8 在表空間b8上
create table xx(id int ,img blob);

上面表空間裡面都只有一個檔案,載入完資料後大小都為800M。
1、備份表空間 b3 
rman>backup tablespace b3  format '/orabak/tb_%d_%U';
備份集大小為
[oracle@DATABASE orabak]$ du -h tb_ORCL_0aq1jkl2_1_1
775M tb_ORCL_0aq1jkl2_1_1
truncate table B3;
繼續備份表空間b3
rman>backup tablespace b3  format '/orabak/tbs_%d_%U';
備份集大小為
-rw-r-----   1 oracle oinstall   1613824 Mar 11 23:42 tbs_ORCL_0bq1jkrt_1_1 16M
一個775M truncate後為16M
2、繼續往下看
truncate 表b4
備份表空間b4 
[oracle@DATABASE orabak]$ du -h tbs4_ORCL_0cq1jlc7_1_1
775M tbs4_ORCL_0cq1jlc7_1_1
大小同樣為775M
3、測試刪除 
  1、刪除單數行資料(這裡刪除單行是造成空閒塊不連續)
delete from b5 where mod(id,2)=1
備份表空間b5 (沒有關係的因為每個表空間只有一個資料檔案且存放一張表所有的表資料量相同)
 rman>backup tablespace b5 format '/orabak/tbs5_%d_%U';
備份集合大小為
[oracle@DATABASE orabak]$ du -h tbs5_ORCL_0dq1jmp1_1_1
776M tbs5_ORCL_0dq1jmp1_1_1
2、刪除id 小於2048的資料
delete from b5 where id<1024;
備份表空間b5
 backup tablespace b5 format '/orabak/tbs5_%d_%U';  
[oracle@DATABASE orabak]$ du -h tbs52_ORCL_0eq1jn3b_1_1
776M tbs52_ORCL_0eq1jn3b_1_1
大小不變
3、刪除id>1024的資料我們在b8表上操作
delete from b8 where id>1024;
備份表空間b8
[oracle@DATABASE orabak]$ du -h tbs8_ORCL_0fq1jnk8_1_1 
776M tbs8_ORCL_0fq1jnk8_1_1
備份集大小不變
結論:truncate 對rman 是有效果的
delete 對rman 來講 就算你刪除了資料他的備份大小還是檔案的大小相當
我這裡刪除單行,刪除<1024 刪除>1024 是想驗證備份時候時不時基於block 塊的ID 來計算的。你要了解資料庫分配空間的過程和原理
---------------------------------------注意本次實驗是在測試庫上基於普通檔案系統非ASM 離散檔案系統-----------------------------------------------

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26764973/viewspace-1455460/,如需轉載,請註明出處,否則將追究法律責任。

相關文章