Oracle dba_data_files dba_segments dba_free_space
2012-07-15 03:44
381 查看
1, dba_data_files,dba_segments,dba_free_space
得出结论:一般情况下(没有drop表的时候):dba_data_files bytes = (dba_segments bytes + dba_free_space bytes)
SQL>
-------------------- --------------- ---------- --- ---------- ---------- ------------ ---------- -----------
TS_20120626 120 15360 YES 3.4360E+10 4194302 12800 125763584 15352
SQL>select OWNER,SEGMENT_NAME,TABLESPACE_NAME,BYTES/1024/1024,BLOCKS fromdba_segmentswhere
TABLESPACE_NAME='TS_20120626';
OWNER SEGMENT_NAME TABLESPACE_NAME BYTES/1024/1024 BLOCKS
----------------------- ------------------------------ ------------------------------ --------------- ----------
USER_20120626 TB_20120626_001 TS_20120626 61 7808
SQL>select
tablespace_name,bytes/1024/1024||' MB' Total_Free fromdba_free_spacewhere tablespace_name='TS_20120626';
TABLESPACE_NAME TOTAL_Free
------------------------------ -------------------------------------------
TS_20120626 58.9375 MB
2, delete,truncate,drop对空间的变化影响
delete表数据,对上述3个视图查询没有任何变化,满足上述相等原则.
truncate表数据,表空间一次性回收,dba_free_space增加,dba_segments减少,让满足上述相等原则.
drop表,表空间一次性回收,但dba_segment会多出个回收站,但实际上dba_free_segment也把回收站的那部分空间计算在内了,所以回收站的内容实际也是可以使用的部分,表面上看这个等式不成立了,但实质上做了些改变,看下面的例子.
SQL>select TABLESPACE_NAME,BYTES/1024/1024,BLOCKS, AUTOEXTENSIBLE,MAXBYTES,MAXBLOCKS,INCREMENT_BY,USER_BYTES,USER_BLOCKS
from dba_data_files where tablespace_name='TS_20120626';
TABLESPACE_NAME BYTES/1024/1024 BLOCKS AUT MAXBYTES MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS
------------------------- --------------- ---------- --- ---------- ---------- ------------ ---------- -----------
TS_20120626 320
40960 YES 3.4360E+10 4194302 12800 335478784 40952
SQL>select OWNER,SEGMENT_NAME,TABLESPACE_NAME,BYTES/1024/1024,BLOCKS from dba_segments where TABLESPACE_NAME='TS_20120626';
OWNER SEGMENT_NAME TABLESPACE_NAME BYTES/1024/1024 BLOCKS
----------------------- ----------------------------- ------------------- --------------- ----------
USER_20120626 TB_20120626_002 TS_20120626 168 21504
USER_20120626 TB_20120626_001 TS_20120626 .0625
8 //truncate的表数据
USER_20120626 BIN$w1rH4uiTmbbgQKjANgEvlg==$0 TS_20120626 28
3584//drop后的回收站部分
SQL>select tablespace_name,bytes/1024/1024||' MB' Total_Free from dba_free_space where tablespace_name='TS_20120626';
TABLESPACE_NAME TOTAL_FREE
------------------------------ -------------------------------------------
TS_20120626 27.9375 MB//truncate后,一次性回收的部分.
TS_20120626 95.9375 MB
TS_20120626 .0625 MB //drop后,从这里开始都是回收站的部分.这里和上面的BIN$w1rH4uiTmbbgQKjANgEvlg==$0是同一空间
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
45 rows selected.
将上述查询结果用tablespace_name分组加起来
SQL>select tablespace_name,count(tablespace_name) ,sum(bytes/1024/1024)||' MB' Total_Free from dba_free_space where tablespace_name='TS_20120626'
group by tablespace_name;
TABLESPACE_NAME COUNT(TABLESPACE_NAME) TOTAL_FREE
------------------------------ ---------------------- -------------------------------------------
TS_20120626 45151.875MB
所以上述等式需要改为(有drop时):dba_data_files bytes = (dba_segments bytes + dba_free_space bytes- dba_segment回收站部分)
得出结论:一般情况下(没有drop表的时候):dba_data_files bytes = (dba_segments bytes + dba_free_space bytes)
SQL>
select TABLESPACE_NAME, BYTES/1024/1024,BLOCKS, AUTOEXTENSIBLE, MAXBYTES, MAXBLOCKS, INCREMENT_BY, USER_BYTES, USER_BLOCKS from dba_data_files where tablespace_name='TS_20120626';TABLESPACE_NAME BYTES/1024/1024 BLOCKS AUT MAXBYTES MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS
-------------------- --------------- ---------- --- ---------- ---------- ------------ ---------- -----------
TS_20120626 120 15360 YES 3.4360E+10 4194302 12800 125763584 15352
SQL>select OWNER,SEGMENT_NAME,TABLESPACE_NAME,BYTES/1024/1024,BLOCKS fromdba_segmentswhere
TABLESPACE_NAME='TS_20120626';
OWNER SEGMENT_NAME TABLESPACE_NAME BYTES/1024/1024 BLOCKS
----------------------- ------------------------------ ------------------------------ --------------- ----------
USER_20120626 TB_20120626_001 TS_20120626 61 7808
SQL>select
tablespace_name,bytes/1024/1024||' MB' Total_Free fromdba_free_spacewhere tablespace_name='TS_20120626';
TABLESPACE_NAME TOTAL_Free
------------------------------ -------------------------------------------
TS_20120626 58.9375 MB
2, delete,truncate,drop对空间的变化影响
delete表数据,对上述3个视图查询没有任何变化,满足上述相等原则.
truncate表数据,表空间一次性回收,dba_free_space增加,dba_segments减少,让满足上述相等原则.
drop表,表空间一次性回收,但dba_segment会多出个回收站,但实际上dba_free_segment也把回收站的那部分空间计算在内了,所以回收站的内容实际也是可以使用的部分,表面上看这个等式不成立了,但实质上做了些改变,看下面的例子.
SQL>select TABLESPACE_NAME,BYTES/1024/1024,BLOCKS, AUTOEXTENSIBLE,MAXBYTES,MAXBLOCKS,INCREMENT_BY,USER_BYTES,USER_BLOCKS
from dba_data_files where tablespace_name='TS_20120626';
TABLESPACE_NAME BYTES/1024/1024 BLOCKS AUT MAXBYTES MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS
------------------------- --------------- ---------- --- ---------- ---------- ------------ ---------- -----------
TS_20120626 320
40960 YES 3.4360E+10 4194302 12800 335478784 40952
SQL>select OWNER,SEGMENT_NAME,TABLESPACE_NAME,BYTES/1024/1024,BLOCKS from dba_segments where TABLESPACE_NAME='TS_20120626';
OWNER SEGMENT_NAME TABLESPACE_NAME BYTES/1024/1024 BLOCKS
----------------------- ----------------------------- ------------------- --------------- ----------
USER_20120626 TB_20120626_002 TS_20120626 168 21504
USER_20120626 TB_20120626_001 TS_20120626 .0625
8 //truncate的表数据
USER_20120626 BIN$w1rH4uiTmbbgQKjANgEvlg==$0 TS_20120626 28
3584//drop后的回收站部分
SQL>select tablespace_name,bytes/1024/1024||' MB' Total_Free from dba_free_space where tablespace_name='TS_20120626';
TABLESPACE_NAME TOTAL_FREE
------------------------------ -------------------------------------------
TS_20120626 27.9375 MB//truncate后,一次性回收的部分.
TS_20120626 95.9375 MB
TS_20120626 .0625 MB //drop后,从这里开始都是回收站的部分.这里和上面的BIN$w1rH4uiTmbbgQKjANgEvlg==$0是同一空间
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 .0625 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
TS_20120626 1 MB
45 rows selected.
将上述查询结果用tablespace_name分组加起来
SQL>select tablespace_name,count(tablespace_name) ,sum(bytes/1024/1024)||' MB' Total_Free from dba_free_space where tablespace_name='TS_20120626'
group by tablespace_name;
TABLESPACE_NAME COUNT(TABLESPACE_NAME) TOTAL_FREE
------------------------------ ---------------------- -------------------------------------------
TS_20120626 45151.875MB
所以上述等式需要改为(有drop时):dba_data_files bytes = (dba_segments bytes + dba_free_space bytes- dba_segment回收站部分)
相关文章推荐
- 谈谈Oracle dba_free_space
- oracle resize报错,dba_segments与dba_data_files中相差很大
- 6.Oracle杂记——数据字典dba_free_space
- oracle 10g recyclebin引起的dba_free_space性能问题
- dba_free_space
- dba_free_space中同一个file_id存在多条记录的问题
- 6220: Permanent data partition free space insufficient to allocate 33296 bytes of memory
- DBA_FREE_SPACE的file_id和relative_fno问题
- dba_free_space 等表空间的视图不能在过程中被使用的问题解决
- 数据字典 dba_free_space及相对文件号RELATIVE_FNO 小结
- ORA-01653/01654错误和dba_free_space视图的理解
- 查询dba_data_files遇到ORA-00379: no free buffers available in buffer pool DEFAULT for block size 2K
- oracle 中视图dba_segments 每个字段是什么意思
- Win A Free Copy of Packt’s Managing Multimedia and Unstructured Data in the Oracle Database e-book
- oracle desc dba_data_files视图报ORA-4043错误小记
- dba_free_space 以及查询剩余表空间百分比和回滚段命中率的SQL
- oracle dba_data_files视图字段说明
- 11.Oracle杂记——数据字典dba_segments
- oracle Data blocks,Extents,Segments
- Permanent data region free space insufficient to allocate 64792 bytes of memory