ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 11.管理对象空间(笔记)

11.管理对象空间(笔记)

原创 Linux操作系统 作者:tonykorn97 时间:2006-04-15 00:00:00 0 删除 编辑

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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-12-05

  • 博文量
    1854
  • 访问量
    2088354