首页 > Linux操作系统 > Linux操作系统 > 11.管理对象空间(笔记)
11.管理对象空间
数据块(oracle块)是oracle在数据文件上执行I/O操作的最小单位.
区是oracle进行空间分配的逻辑单位,它是由相邻数据块组成的.
段则用于存储特定逻辑对象的所有数据.它是由一个或多个区组成的!
段
当建立表,索引和簇等对象时,oracle会为这些对象分配存储空间,以存放他们的数据信息,为这些对象所分配的存储空间被称为段.在一个表空间上可以包含一个或多个段,一个段只能存放在一个表空间上.
1,表段(Table)
表段用于存储表的所有数据,其名称与表名相同.建立表时,oracle会为该表建立相应的表段,并且表段只能存放在一个表空间中.
2,表分区段(Table Partition)
表分区段用于存储分区表某个分区的数据.每个分区对应于一个表分区段.通过使用分区选项.可以将一张大表的数据部署到多个不同的分区段中,从而降低I/O次数,提供I/O性能.
3,簇段(Cluster)
簇段用于存储簇表的数据,其名称与簇名相同.簇用于逻辑组织相关表的数据,使用簇的目的时为了降低I/O次数,提高I/O性能.例如.如果经常执行主从表直接的连接查询,可以将这两张表的数据组织到簇中,一个簇可以包含一个或多个表,当将表组织到簇中时,其数据存放在簇段中,而不会为表分配专门的表段.假定在USERS表空间上建立簇ORD_ITEM_CLU,并且将表ORD和ITEM组织到簇中,此时只会分配簇段ORD_ITEM_CLU,而不会分配表段ORD和ITEM.
4,索引段(Index)
索引段用于存储索引的数据,其名称与索引名完全相同.当建立索引时,oracle会为索引建立相应的索引段,并且一个索引只能存放在一个表空间中.
5,索引分区段(Index Partition)
索引分区段用于存储分区索引某个分区的数据,每个分区对应一个索引分区段..索引分区只能建立在分区表上,而不能建立在普通表上.
6,索引组织表段(Index_organized Table)
索引组织表时以B*-树结构来组织表数据的.如果表数据经常需要引用主键列来检索,可以考虑建立索引组织表,以加快访问速度.一般情况下,表与索引数据分别存放在表段和索引段中.但是,如果建立索引组织表,表和其主键索引的数据会存放在索引段中,需要注意,当建立索引组织表时,必须定义主键列.
7,UNDO段.
UNDO段用于存放事务所修改数据的旧值.
8,临时段(Temporary Segment)
临时段用于存放排序操作所产生的临时数据.
9,LOB段,
LOB段用于存储LOB列的数据,如文献,图像,音频,视频等数据,建立表时,可以定义CLOB,BLOB或NCLOB类型的列,并且ORACLE会自动为这些列建立相应的LOB段,对于LOB列来说,如果数据长度低于4000字节,该列和其他列的数据会以前存放在表段中,如果数据长度超过4000字节,数据将会被存放到LOB段中.
10.LOB索引段
LOB索引段用于存放LOB索引的数据,定义LOB类型时,oracle不仅会为LOB列建立LOB段,还会建立LOB索引段,以加快LOB数据的检索速度.
11.嵌套表段(Nested Table)
嵌套表段用于存储嵌套表类型列的数据.嵌套表类型类似于高级语言中的对象数据类型.
该类型可以作为表列的数据类型使用.定义嵌套表列时,oracle会自动为改列分配嵌套表段,以存放该列的数据.
12,根引导段(Cache)
根引导段用于初始化数据字典高速缓存,因此也被称为Cache段,它时在建立数据库时使用sql.bsq脚本自动建立的,该段的维护由oralce自动完成.不需要DBA进行任何干预.
显示段信息
1,显示段类型
SELECT distinct segment_type FROM dba_segments;
2,显示段详细信息.
Col tablespace_name format a15
SELECT tablespace_name,extents,bytes
FROM dba_segment
WHERE owner=’scott’ AND segment_name=’EMP’;
其中,tablespace_name用于标识段所在表空间,extents用于标识段所包含的区个数,bytes用于标识段的尺寸,owner用于标识段的所有者,segment_name用于标识段名.
管理存储参数
存储参数
建立或修改数据对象时,通过指定存储参数,可以设置区尺寸和区个数,对于字典管理表空间来说,区尺寸由存储参数确定.对于本地管理表空间来说,如果在建立局部表空间时指定了UNIFORM选项,那么所有区尺寸完全相同,如果在建立局部表空间时指定了AUTOALLOCATE选项,那么区尺寸将由ORACLE SERVER自动分配.存储参数既可以在段级定义,也可以在表空间级定义.其中段级具有最高的优先级,表空间其次.如果在段级和表空间级都没有指定存储参数,那么oracle会使用默认存储参数.
1,INITIAL
对于字典管理表空间来说,INITIAL 用于指定为段所分配的第一个区的尺寸.对于本地管理表空间来说,如果MINEXTENTS等于1,数据库会使用INITIAL和区尺寸确定段的初始尺寸.INITIAL只能在建立对象(CREATE TABLE,CREATE INDEX和CREATE CLUSTER)时设置.不能使用ALTER 语句进行修改.
2,NEXT
对于本地管理表空间来说,因为数据库可以自动管理区,所以该参数没有太大意义,对于字典管理表空间来说,NEXT用于指定为段所分配的第二个区的尺寸.
3,PCTINCREASE
对于字典管理表空间来说,PCTINCREASE用于指定从第三个区开始,每个区比前一个区所增长的百分比,取值为0~100.
4,MINEXTENTS
对于字典管理表空间来说,MINEXTENTS用于指定为段所分配的初始区的个数.
5,MAXEXTENTS
对于字典管理表空间来说,MAXEXTENTS用于指定段可以包含的最大区个数.
6.FREELIST GROUPS
FREELIST GROUPS用于指定对象的空闲列表组个数,每个空闲列表组都会占用一个数据块,oracle建议为Oracle Real Application Cluster的每个例程指定一个空闲列表.需要注意,FREELIST GROUPS只能在段级指定.
7,FREELISTS
FREELISTS用于指定每个空闲列表组上的空闲列表个数,空闲列表用于维护可插入数据的数据块,注意,FREELISTS只能在段级指定.
在本地管理表空间上使用INITIAL参数.
当在本地管理表空间上建立数据对象时,通过使用INITIAL参数和区尺寸可以确定段的初始尺寸.假定在建立本地管理表空user01时指定UNIFORM选项,并且区尺寸为128k,以建立t1为例,说明确定段初始尺寸的方法.
CREATE TABLES t1(cola INT) TABLESPACE user01
STORAGE(INITIAL 500K);
TABLESPACE选项用于指定段所在表空间,STORAGE用于指定段的存储参数,INITIAL用于指定段的初始尺寸,因为区尺寸为500k,而该值不能整除128k,因此段的初始尺寸实际为512k.
在字典管理表空间上使用存储参数.
假定建立字典管理表空间user02时,指定默认存储参数INITIAL和NEXT均为10k,PCTINCREASE为50,以建立表t2为例,说明在字典表管理空间上这些存储参数的作用.
CREATE TABLE t2 (cola INT) TABLESPACE user02
STORAGE(NEXT 20K MINEXTENTS 4);
执行以上语句后,oracle会建立表T1,并且为其分配尺寸为110k的表段T1,因为MINEXTENTS为4,索引段T1包含4个区,因为建表时为指定INITIAL ,所以第一个区会使用表空间默认存储参数(尺寸:10k),因为建表时指定NEXT为20K,索引第二个区尺寸为20K,第三和第四分别为30K和50K.
1,显示已分配区
SELECT extent_id, file_id, block_id,bytes
FROM dba_extents
WHERE owner=’sys’ AND segment_name=’T1’;
其中,extent_id用于标识区编号(0:标识第一个区),file_id用于标识区所在的文件号,block_id用于标识区的起始块号,bytes用于标识区的尺寸.
2,显示空闲区
显示USER01表空间的剩余表空间
SELECT sum(bytes) FROM dba_fres_space
WHERE tablespace_name=’USER01’;
管理数据块空间
块空间参数
1,PCTFREE
该参数用于指定在数据块内为UPDATE操作所预留空间的百分比,默认值为10.
设置PCTFREE的原则
使用小的PCTFREE可以节省空间,如果对象的UPDATE操作非常少,应该使用较少的PCTFREE.
使用打的PCTFREE可以提供UPDATE性能,如果对象的UPDATE非常频繁.应该使用较大的PCTFREE.
2.PCTUSED
该参数用于指定将数据块标记为可重用块的已用空间最低百分比,默认值为40.
设置较小的PCTUSED可以降低UPDATE和DELETE的处理开销,但会增加数据库的未用空间;设置较大的PCTUSED可以提高空间利用,但会增加INSERT和UPDATE的处理开销.
3,INITRANS
INITRANS用于指定初始事务入口个数,设置了该参数后,oracle会在数据库的块头上为每个事务入口预留相应的空间.需要注意,INITRANS设置的越大,数据块的剩余空间越少,当INITRANS预留的空间被永尽后,oracle会从剩余空间中分配更多的空间,并且这些空间会变为块头空间的永久部分.在10g之前,使用参数MAXTRANS可以指定数据库的最大事务入口个数,从10g开始,该参数已经被弃用,并且oracle所允许的最大事务入口个数为255.
使用块空间参数.
1,建立对象时指定块空间参数.
建立表和簇时,可以使用所有块空间参数;建立索引时,只能设置参数PCTREEE和INITRANS.
CREATE CLUSTER dept_emp_clu(deptno NUMBER(3))
PCTFREE 20 PCTUSED 40 INITRANS 4;
CREATE TABLE department (deptno NUMBER(2),dname VARCHAR2(10))
PCTFREE 20 PCTUSED 40 INITRANS 4;
CREATE INDEX pk_deptno ON department(depot)
PCTFREE 20 INITRANS 4;
2,改变对象的块空间参数.
建立数据对象后,如果块空间参数不合适,可以使用ALTER命令修改块空间参数.但需要注意,索引的PCTFREE参数不能修改.
ALTER CLUSTER dept_emp_clu PCTFREE 30 PCTUSED 40 INITRANS 4;
ALTER TABLE department PCTFREE 30 PCTUSED 40 INITRANS 4;
ALTER INDEX pk_deptno INITRANS 4;
显示块空间参数
1,显示簇的块空间参数
SELECT pct_free, pct_used, ini_trans, max_trans
FROM dba_clusters
WHERE owner=’SYSTEM’ AND cluster_name=’DEPT_EMP_CLU’;
2,显示表的块空间参数.
SELECT pct_free, pct_used, ini_trans,max_trans
FROM dba_tables
WHERE owner=’SYSTEM’ AND table_name=’department’;
3,显示索引的块空间参数
SELECT pct_free, ini_trans, max_trans
FROM dba_indexes
WHERE owner=’SYSTEM’ AND index_name=’PK_DEPTNO’;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/312079/viewspace-245225/ ,如需转载,请注明出处,否则将追究法律责任。