2014-1-15 关于oracle的一些实验

 通过实验可以得知:

1.对于,即便没有真正数据,建表之后也会预分配空间

2.disable 主键取消索引空间,当重新enable,空间会发生变化。

3.PCTINCREASE参数,我经过实验,没有效果。

 

col SEGMENT_NAME format a20;
col PARTITION_NAME format a20;
col PARTITION_NAME format a10;
col TABLESPACE_NAME format a20;
1.创建一个表,并添加主键
test@CISCOSYS> create table t1 (id int,name varchar2(32));
表已创建。
test@CISCOSYS> alter table  t1 add constraint pk_t1 primary key(id);
表已更改。
虽然还没有存储数据,但表及新建的索引均已分配了空间
test@CISCOSYS> select SEGMENT_NAME   ,PARTITION_NAME ,
2                      SEGMENT_TYPE ,TABLESPACE_NAME,BYTES,
3                     BLOCKS,EXTENTS ,INITIAL_EXTENT,
4                     NEXT_EXTENT,MIN_EXTENTS, MAX_EXTENTS
5                     from user_segments
6  where segment_name in ('T1','PK_T1');
SEGMENT_NAME         PARTITION_ SEGMENT_TYPE       TABLESPACE_NAME           BYTES     BLOCKS    EXTENTS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS
-------------------- ---------- ------------------ -------------------- ---------- ---------- ---------- -------------- ----------- ----------- -----------
T1                              TABLE              USERS                     65536          8          1          65536                       1  2147483645
PK_T1
INDEX              USERS                     65536          8          1          65536                       1  2147483645
系统默认的块大小
test@CISCOSYS> show parameter db_block_size;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_block_size                        integer     8192(bytes)=8K
BYTES=BLOCKS*db_block_size
初始化10000条数据
test@CISCOSYS> insert into t1 select level,'n'||level from dual connect by level<=10000;
已创建10000行。
test@CISCOSYS> commit;
提交完成。
数据初始化后,索引及表的空间均增加了
test@CISCOSYS> select SEGMENT_NAME   ,PARTITION_NAME ,
2            SEGMENT_TYPE ,TABLESPACE_NAME,BYTES,
3           BLOCKS,EXTENTS ,INITIAL_EXTENT,
4           NEXT_EXTENT,MIN_EXTENTS, MAX_EXTENTS
5           from user_segments   where segment_name in ('T1','PK_T1');
SEGMENT_NAME         PARTITION_ SEGMENT_TYPE       TABLESPACE_NAME           BYTES     BLOCKS    EXTENTS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS
-------------------- ---------- ------------------ -------------------- ---------- ---------- ---------- -------------- ----------- ----------- -----------
T1                              TABLE              USERS                    262144         32          4          65536                       1  2147483645
PK_T1                           INDEX              USERS                    196608         24          3          65536                       1  2147483645
同时,可以看出系统的一个区,有8个块组成!
--------------------------------------------------------------------
将主键置为diable ,主键在段内就不能查询了,也就意味着索引删除了
test@CISCOSYS> alter table t1 disable constraint pk_t1;
表已更改。
test@CISCOSYS>  select SEGMENT_NAME   ,PARTITION_NAME ,
2   SEGMENT_TYPE ,TABLESPACE_NAME,BYTES,
3  BLOCKS,EXTENTS ,INITIAL_EXTENT,
4  NEXT_EXTENT,MIN_EXTENTS, MAX_EXTENTS
5  from user_segments   where segment_name in ('T1','PK_T1');
SEGMENT_NAME         PARTITION_ SEGMENT_TYPE       TABLESPACE_NAME           BYTES     BLOCKS    EXTENTS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS
-------------------- ---------- ------------------ -------------------- ---------- ---------- ---------- -------------- ----------- ----------- -----------
T1                              TABLE              USERS                    262144         32          4          65536                       1  2147483645
重新启用又查询到了,同时发现索引占的空间增加了!!!
test@CISCOSYS> alter table t1 enable constraint pk_t1;
表已更改。
test@CISCOSYS>  select SEGMENT_NAME   ,PARTITION_NAME ,
2   SEGMENT_TYPE ,TABLESPACE_NAME,BYTES,
3  BLOCKS,EXTENTS ,INITIAL_EXTENT,
4  NEXT_EXTENT,MIN_EXTENTS, MAX_EXTENTS
5  from user_segments   where segment_name in ('T1','PK_T1');
SEGMENT_NAME         PARTITION_ SEGMENT_TYPE       TABLESPACE_NAME           BYTES     BLOCKS    EXTENTS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS
-------------------- ---------- ------------------ -------------------- ---------- ---------- ---------- -------------- ----------- ----------- -----------
T1                              TABLE              USERS                    262144         32          4          65536                       1  2147483645
PK_T1                           INDEX              USERS                    262144         32          4          65536                       1  2147483645
设置最初的并发事务条目(块级别)
test@CISCOSYS> alter table t1 INITRANS 4;
表已更改。
查询确认
test@CISCOSYS> SELECT
2  TABLE_NAME,
3  PCT_FREE,
4  PCT_USED,
5  INI_TRANS,
6  MAX_TRANS,
7  INITIAL_EXTENT
8  from dba_tables where table_name ='T1';
TABLE_NAME   PCT_FREE   PCT_USED  INI_TRANS  MAX_TRANS INITIAL_EXTENT
---------- ---------- ---------- ---------- ---------- --------------
T1                 10                     4        255          65536
设置PCTUSED 参数(对于块,低于这个值,才可以插入,默认为40)
PCTFREE,PCTUSED两个参数配合使用。
如果一个块的可用空间小于PCTFREE,那么不允许再插入,只能更新,删除。
当删除若干数据时,可用空间低于PCTUSED,允许插入。
test@CISCOSYS> alter table t1 storage(next 50k)
2  ;
alter table t1 storage(next 50k)
*
第 1 行出现错误:
ORA-25150: 不允许对区参数执行 ALTERING
表空间使用本地管理,其中的表不能修改NEXT MAXEXTENTS和PCTINCREASE参数
sys@CISCOSYS> create table t2(id int,name varchar2(32)) storage(initial 10k);
表已创建。
SELECT
TABLE_NAME,
PCT_FREE,
PCT_USED,
INI_TRANS,
MAX_TRANS,
INITIAL_EXTENT
from dba_tables where table_name  in ('T1','T2','T3');
test@CISCOSYS> SELECT
2  TABLE_NAME,
3  PCT_FREE,
4  PCT_USED,
5  INI_TRANS,
6  MAX_TRANS,
7  INITIAL_EXTENT
8  from dba_tables where table_name  in ('T1','T2','T3');
TABLE_NAME   PCT_FREE   PCT_USED  INI_TRANS  MAX_TRANS INITIAL_EXTENT
---------- ---------- ---------- ---------- ---------- --------------
T2                 10         40          1        255          16384
T3                 10                     1        255          65536
T1                 10                     4        255          65536
select SEGMENT_NAME   ,PARTITION_NAME ,
SEGMENT_TYPE ,TABLESPACE_NAME,BYTES,
BLOCKS,EXTENTS ,INITIAL_EXTENT,
NEXT_EXTENT,MIN_EXTENTS, MAX_EXTENTS
from dba_segments
where segment_name in ('T3','T2','T3);
指定的initial=17K.系统会根据系统指定块大小,最近的整数倍(2*8<17k<3*8)
create table t4(id int,name varchar2(32)) storage(initial 17k);
test@CISCOSYS> select SEGMENT_NAME   ,PARTITION_NAME ,
2                       SEGMENT_TYPE ,TABLESPACE_NAME,BYTES,
3                      BLOCKS,EXTENTS ,INITIAL_EXTENT,
4                      NEXT_EXTENT,MIN_EXTENTS, MAX_EXTENTS
5                      from dba_segments
6   where segment_name in ('T3','T2','T4');
SEGMENT_NAME         PARTITION_ SEGMENT_TYPE       TABLESPACE_NAME           BYTES     BLOCKS    EXTENTS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS
-------------------- ---------- ------------------ -------------------- ---------- ---------- ---------- -------------- ----------- ----------- -----------
T2                              TABLE              SYSTEM                    65536          8          1          16384                       1  2147483645
T3                              TABLE              USERS                     65536          8          1          65536                       1  2147483645
T4                              TABLE              USERS                     65536          8          1          24576                       1  2147483645
test@CISCOSYS> SELECT 24576/1024 from dual;
24576/1024
----------
24
明确段与块的关系
test@CISCOSYS> select * from dba_extents where segment_NAME='T1';
OWNER                          SEGMENT_NAME         PARTITION_ SEGMENT_TYPE       TABLESPACE_NAME    EXTENT_ID    FILE_ID   BLOCK_ID      BYTES
------------------------------ -------------------- ---------- ------------------ -------------------- ---------- ---------- ---------- ----------
TEST                           T1                              TABLE              USERS                 0          5        721      65536
TEST                           T1                              TABLE              USERS                 1          5        745      65536
TEST                           T1                              TABLE              USERS                 2          5        753      65536
TEST                           T1                              TABLE              USERS                 3          5        769      65536
test@CISCOSYS> SELECT SEGMENT_NAME,EXTENTS FROM DBA_SEGMENTS WHERE SEGMENT_NAME='T1';
SEGMENT_NAME            EXTENTS
-------------------- ----------
T1                            4
测试pctincrease参数(发现没有效果)
test@CISCOSYS> create table t2 (id int,name varchar2(32)) storage(pctincrease 20);
表已创建。
test@CISCOSYS> insert into  t2 select level,'name'||level from dual connect by level <=10000;
已创建10000行。
test@CISCOSYS> commit;
提交完成。
test@CISCOSYS> select * from dba_extents where segment_NAME='T2';
OWNER                          SEGMENT_NAME         PARTITION_ SEGMENT_TYPE       TABLESPACE_NAME    EXTENT_ID    FILE_ID   BLOCK_ID      BYTES     BLOCKS RE
------------------------------ -------------------- ---------- ------------------ -------------------- ---------- ---------- ---------- ---------- ----------
SYS                            T2                              TABLE              SYSTEM                0          1      59497      65536          8
TEST                           T2                              TABLE              USERS                 0          4       5793      65536          8
TEST                           T2                              TABLE              USERS                 1          4       5801      65536          8
TEST                           T2                              TABLE              USERS                 2          4       5809      65536          8
TEST                           T2                              TABLE              USERS                 3          4       5817      65536          8
--

 

你可能感兴趣的:(oracle,storage)