一直认为rman备份集大小要与segment大小相当或比segment大,但在昨天下午的一次备份中发现,我这个想法是错误的。做个测试如下:
1. 创建一个空的测试表,初始分配空间100M。
SQL> create table test tablespace test storage(initial 100m) as select * from dba_objects where 1=2;
Table created.
SQL> select bytes/1024/1024 from dba_segments where wner='SYS' and segment_name='TEST';
BYTES/1024/1024
---------------
105
SQL> select sum(bytes)/1024/1024 from dba_segments;
SUM(BYTES)/1024/1024
--------------------
309.867188
可见,segment总大小为309M。
2.用dbms_space包分析test表的空间使用情况
SQL> declare
total_blocks number;
total_bytes number;
unused_blocks number;
unused_bytes number;
last_used_extent_file_id number;
last_used_extent_block_id number;
last_used_block number;
begin
dbms_space.unused_space('SYS','TEST','TABLE',total_blocks,total_bytes,unused_blocks,unused_bytes,last_used_extent_file_id,
last_used_extent_block_id,last_used_block);
dbms_output.put_line('Total blocks is '||to_char(total_blocks));
dbms_output.put_line('Total bytes is '||to_char(total_bytes));
dbms_output.put_line('Total unused blocks is '||to_char(unused_blocks));
dbms_output.put_line('Total unused bytes is '||to_char(unused_bytes));
dbms_output.put_line('HWM= '||to_char(total_blocks-unused_blocks-1));
end;
/ 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
PL/SQL procedure successfully completed.
SQL> set serveroutput on
SQL> /
Total blocks is 13440
Total bytes is 110100480
Total unused blocks is 13439
Total unused bytes is 110092288
HWM= 0
可见,test表分配的13440个block中有13439个block是空的,执行rman备份时,这部分block将不被备份。
3.执行rman备份,执行完毕后,查看备份集大小
[oracle@ora-as4 rman_bk]$ du -sh .
163M .
可见,rman备份集只有163M,而segment总大小为309M,之所以会有如此大的差别,是因为segment中包含了一部分空块导致。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10972173/viewspace-374880/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10972173/viewspace-374880/