Oracle存储结构
1、段(Segments)的类型:
sql>create table kong.test1 (id int) tablespace kong
【注意】如果我们创建表空间或建立表空间下的段数据时不指定任何存储参数就会使用Oracle默认存储参数
Oracle默认存储参数=5倍 的blocks 块大小(5×db_block_size)。
存储参数优先级:Oracle defualt < Tablespaces < Segment
2、段的Extend Allocation 分区扩展和Deallocation 分区释放
(1)段的Extend Allocation 分区扩展:
sql>create tablespace kong1 datafile 'd:\oracle\oradata\fox\kong1' size 10m;
sql>create table kong.test11(id int) tablespace kong1;
创建表会自动分配到自己的初始分区(Create)。如:
sql>create table kong.test12(id int) tablespace kong1 storage(initial 100k next 100k); //创建后自动分配到最初始分区100k
当初始分区用完以后需要申请空间扩展时,可以进行手工进行分配空间(Extend),也可以进行强制给段进行空间分配(Alter),但指定空间来源一定是原来段所在表空间的数据文件底下。例如:
【注意】段可以跨数据文件但是不能跨表空间。
sql>alter table kong.test12
sql>alter table kong.test12
(2)段的Extend Allocation 分区释放:
sql>drop table kong.test12;
sql>truncate table kong.test11; //清空表,空间被释放
sql>drop table kong.test11;
sql>alter table kong.authors deallocate unused; //释放没有用掉的分区
sql>input keep 0
3、Database Block 块
块Block:I/O读写的最小单位。内存也是以块大小为单位。
sql> create tablespace kong2
sql>show parameter db
【注意】Oracle支持多块大小的使用,在此之前必须设定相应的内存区域,即指定对应块大小的高速缓存区域,它在Database Blocksize 在创建表空间时创建。DB_BLOCK_SIZE指定了默认块的大小。DB_CACHE_SIZE是为DB_BLOCK_SIZE服务的。
sql>alter system set db_8k_cache_size=10m ; //没有足够的内存来增加高速缓存的大小
sql>alter system set db_cache_size=10m ;//
sql>alter system set db_8k_cache_size=10m;
Database Block Content 块内容:相当于将一个长方体从上到下切成三份: Header 头(Top)、Free space 自由空间(middle)、Data 数据(Bottom)
原理:Top Down 从头顶部往下 ,Bottom up:从数据底部往上 进行压缩。压缩在中间剩余部分即是自由空间。
4、Block控制表空间的使用:
(1)BLOCK管理参数: INITRANS\MAXTRANS、PCTFREE\PCTUSED
INITRANS\MAXTRANS 初始值(1)\最大值(255)事务处理数量,用于控制块中预留的Transaction空间。
PCTFREE 用来预留多少空间来满足将来的数据改变,实现行移植(Row migration),成倍的增加了I/O量,对系统是有性能影响的。PCTUSED 块使用率控制,控制块使用最小的百分比(如在数据删除过程中,删除到还剩多少空间时可以通告Oracle该块可以继续使用)
(2)Data Block 管理2种方式:自动段空间管理、手工配置Block管理
自动段空间管理:段中自动管理自由空间free space;通过使用位图段来跟踪当前段中自由的(free)和已用的(used)的block空间(相反,手工管理是使用free lists 空闲列表来管理)
好处:易于管理、更好的空间利用率,更好的性能,
CREATE TABLESPACE data02
DATAFILE '/u01/oradata/data02.dbf' SIZE 5M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 64K
SEGMENT SPACE MANAGEMENT AUTO;
sql>create tablespace kong3
注意:表空间建立后,所有建立在上面的数据段(表或索引)会自动继承这些特性。
sql>create table kong.test11(id int) tablespace kong3; //此时test11表的空闲列表没有指定,它是本地管理的。
手工配置Block管理:
5、获取存储结构的相关信息(数据字典视图)
多对一关系:
sql>conn sys/admin1@fox as sysdba
sql>select * from dba_tablespaces;
sql>select * from dba_segments; //包括回滚段、临时段等
sql>select * from dba_extents;
sql>desc dba_extents;
sql>select sum(bytes) from dba_extents where owner='KONG' and segment_name='AUTHORS'; //查出表空间为"KONG",段为"AUTHORS"的数据对象所占用的总大小,显示为65536(64k)
sql>select * from dba_free_space; //查出自由空间。
联系客服