SQL> create table t5(id int);表已创建。SQL> insert into t5 values(1);已创建 1 行。SQL> insert into t5 values(2);已创建 1 行。SQL> insert into t5 values(3);已创建 1 行。SQL> insert into t5 values(4);已创建 1 行。SQL> commit;提交完成。SQL> exec dbms_stats.gather_table_stats('zch','T5');PL/SQL 过程已成功完成。SQL> select blocks from user_tables where table_name = 'T5'; BLOCKS
----------
5 SQL> exec dbms_stats.gather_table_stats('zch','T5');PL/SQL 过程已成功完成。SQL> select blocks from user_tables where table_name = 'T5'; BLOCKS
----------
5 SQL> create table t6 as select level id from dual connect by level < 5;表已创建。SQL> exec dbms_stats.gather_table_stats('zch','T6');PL/SQL 过程已成功完成。SQL> select blocks from user_tables where table_name = 'T6'; BLOCKS
----------
4 SQL> create table t7(id int);表已创建。SQL> insert into t7 values(1);已创建 1 行。SQL> commit;提交完成。SQL> exec dbms_stats.gather_table_stats('zch','T7');PL/SQL 过程已成功完成。SQL> select blocks from user_tables where table_name = 'T7'; BLOCKS
----------
5 我一共创建了三个表T5,T6,T7,然后插入数据,然后
使用select blocks from user_tables where table_name = '?'
结果确不一样,我想问问,这个blocks The number of used blocks in the table
应该是表使用的快,为什么会不一样,
oracle分配块的时候 和什么有关??
因为 zjwssg 在他的机器上执行相同的操作,得到的结果是1block见
http://topic.csdn.net/u/20100619/10/539e0ee0-df52-4e44-8430-d2fb1426b305.html请问大侠,是什么原因?
表已创建。
SQL> insert into t5 values(1);
已创建 1 行。
SQL> insert into t5 values(2);
已创建 1 行。
SQL> insert into t5 values(3);
已创建 1 行。
SQL> insert into t5 values(4);
已创建 1 行。
SQL> commit;
提交完成。
SQL> exec dbms_stats.gather_table_stats('SYS','T5');
PL/SQL 过程已成功完成。
SQL> select blocks,INITIAL_EXTENT from user_tables where table_name = 'T5'; BLOCKS INITIAL_EXTENT
---------- --------------
1 65536BLOCKS* NUMBER Number of used data blocks in the table SQL> select segment_name,blocks,extents,bytes,segment_type,tablespace_name from
2 dba_segments where segment_name='T5';SEGME BLOCKS EXTENTS BYTES SEGMENT_TYPE TABLESPACE_NAME
----- ---------- ---------- ---------- ------------------ ----------------------T5 8 1 65536 TABLE SYSTEMBYTES NUMBER Size, in bytes, of the segment
BLOCKS NUMBER Size, in Oracle blocks, of the segment
EXTENTS NUMBER Number of extents allocated to the segment
INITIAL_EXTENT NUMBER Size in bytes requested for the initial extent of the segment at create time. (Oracle rounds the extent size to multiples of 5 blocks if the requested size is greater than 5 blocks.)
从dba_segments 表中查,显示的是8个块,64k的字节。 刚才插入的几个值,可能没有写满这些内容,在插入一点数据看一下。
SQL> begin
2 for i in 1 .. 1000000 loop
3 insert into T5 values(10000);
4 commit;
5 end loop;
6 end;
7 /这个时间太长了,只执行了一会。 在次查看。
SQL> select blocks,INITIAL_EXTENT from user_tables where table_name = 'T5'; BLOCKS INITIAL_EXTENT
---------- --------------
1 65536SQL> select segment_name,blocks,extents,bytes,segment_type,tablespace_name from
dba_segments where segment_name='T5';
SEGME BLOCKS EXTENTS BYTES SEGMENT_TYPE TABLESPACE_NAME
----- ---------- ---------- ---------- ------------------ ---------------------T5 6528 66 53477376 TABLE SYSTEM
从这个结果来看, 从dba_segments 里查看的blocks 是准确的。
user_tables 里的blocks 可能是另一种含义. ------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
网上资源: http://tianlesoftware.download.csdn.net
相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
DBA1 群:62697716(满); DBA2 群:62697977
从网上搜了点资料,研究了下:
Dba_Segments .blocks=Dba_Tables.Blocks+Dba_Tables.Empty_Blocks 在执行查询之前,要先对表分析一下:
analyze table T5 compute statistics;select blocks,empty_blocks from user_tables where table_name = 'T5';select segment_name,blocks,extents,bytes,segment_type,tablespace_name fromdba_segments where segment_name='T5';就像8楼所说的,DBA_TABLES的blocks+empty_blocks+1=DBA_SEGMENTS;
而你的就是1个,是为同样数据分配的数据块,怎么会不一样,
我的oracle版本是10g db_block_size 8K
SQL> conn sys/manager as sysdba
已连接。
SQL> create table t11 (id int);表已创建。SQL> insert into t11 values (1);已创建 1 行。SQL> commit;提交完成。SQL> exec dbms_stats.gather_table_stats('SYS','T11');PL/SQL 过程已成功完成。SQL> select blocks from user_tables where table_name ='T11'; BLOCKS
----------
1 SQL> select blocks from user_segments where segment_name = 'T11'; BLOCKS
----------
8 SQL> conn test/test@orcl
已连接。
SQL> create table t12(id int);表已创建。SQL> insert into t12 values(1);已创建 1 行。SQL> commit;提交完成。SQL> exec dbms_stats.gather_table_stats('TEST','T12');PL/SQL 过程已成功完成。SQL> select blocks from user_tables where table_name ='T12'; BLOCKS
----------
5 SQL> select blocks from user_segments where segment_name = 'T12'; BLOCKS
----------
8 SQL> spool off我用SYS用户创建了一个表,查看blocks是1
用普通用户(只有connect,resource权限的用户),查看blocks确是5,各位大侠! 这是怎么回事??
用这个语句分析之后在看一下结果:analyze table T5 compute statistics;
SQL> conn sys/manager as sysdba
已连接。
SQL> create table t (id int);表已创建。SQL> insert into t values (1);已创建 1 行。SQL> analyze table t compute statistics;表已分析。SQL> select blocks from user_tables where table_name = 'T'; BLOCKS
----------
1 SQL> select blocks from user_segments where segment_name='T'; BLOCKS
----------
8 SQL> conn test/test@orcl
已连接。
SQL> create table t(id int);表已创建。SQL> insert into t values(1);已创建 1 行。SQL> commit;提交完成。SQL> analyze table test.t compute statistics;表已分析。SQL> select blocks from user_tables where table_name = 'T'; BLOCKS
----------
5 SQL> select blocks from user_segments where segment_name='T'; BLOCKS
----------
8
还是一样的结果,,是不是system表空间和users表空间内部的原因啊??