2014-1-15 关于oracle的一些实验
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>>
表已更改。
虽然还没有存储数据,但表及新建的索引均已分配了空间
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
6where 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 12147483645
PK_T1
INDEX USERS 65536 8 1 65536 12147483645
系统默认的块大小
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 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 12147483645
PK_T1 INDEX USERS 196608 24 3 65536 12147483645
同时,可以看出系统的一个区,有8个块组成!
--------------------------------------------------------------------
将主键置为diable ,主键在段内就不能查询了,也就意味着索引删除了
test@CISCOSYS>>
表已更改。
test@CISCOSYS>select SEGMENT_NAME ,PARTITION_NAME ,
2 SEGMENT_TYPE ,TABLESPACE_NAME,BYTES,
3BLOCKS,EXTENTS ,INITIAL_EXTENT,
4NEXT_EXTENT,MIN_EXTENTS, MAX_EXTENTS
5from 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 12147483645
重新启用又查询到了,同时发现索引占的空间增加了!!!
test@CISCOSYS>>
表已更改。
test@CISCOSYS>select SEGMENT_NAME ,PARTITION_NAME ,
2 SEGMENT_TYPE ,TABLESPACE_NAME,BYTES,
3BLOCKS,EXTENTS ,INITIAL_EXTENT,
4NEXT_EXTENT,MIN_EXTENTS, MAX_EXTENTS
5from 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 12147483645
PK_T1 INDEX USERS 262144 32 4 65536 12147483645
设置最初的并发事务条目(块级别)
test@CISCOSYS>>
表已更改。
查询确认
test@CISCOSYS> SELECT
2TABLE_NAME,
3PCT_FREE,
4PCT_USED,
5INI_TRANS,
6MAX_TRANS,
7INITIAL_EXTENT
8from dba_tables where table_name ='T1';
TABLE_NAME PCT_FREE PCT_USEDINI_TRANSMAX_TRANS INITIAL_EXTENT
---------- ---------- ---------- ---------- ---------- --------------
T1 10 4 255 65536
设置PCTUSED 参数(对于块,低于这个值,才可以插入,默认为40)
PCTFREE,PCTUSED两个参数配合使用。
如果一个块的可用空间小于PCTFREE,那么不允许再插入,只能更新,删除。
当删除若干数据时,可用空间低于PCTUSED,允许插入。
test@CISCOSYS>>
2;
alter table t1 storage(next 50k)
*
第 1 行出现错误:
ORA-25150: 不允许对区参数执行>
表空间使用本地管理,其中的表不能修改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_namein ('T1','T2','T3');
test@CISCOSYS> SELECT
2TABLE_NAME,
3PCT_FREE,
4PCT_USED,
5INI_TRANS,
6MAX_TRANS,
7INITIAL_EXTENT
8from dba_tables where table_namein ('T1','T2','T3');
TABLE_NAME PCT_FREE PCT_USEDINI_TRANSMAX_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 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 intot2 select level,'name'||level from dual connect by levelcommit;
提交完成。
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
页:
[1]