Oracle逻辑结构

上一篇 / 下一篇  2012-07-30 13:08:27 / 个人分类:数据库

51Testing软件测试网+AF~2sIV]9h

  Oracle的逻辑结构是一种层次结构。主要由:表空间、段、区和数据块等概念组成。逻辑结构是面向用户的,用户使用Oracle开发应用程序使用的就是逻辑结构。数据库存储层次结构及其构成关系,结构对象也从数据块到表空间形成了不同层次的粒度关系,如图2-3和图2-4所示。51Testing软件测试网:r9`(N7n,m"j'Hq A

51Testing软件测试网3i^P3@I ~'~

图2-3  Oracle 10g数据库层次结构图

B0u$E1vb4D5\h#F0

51Testing软件测试网3M(^ lc2F0k j`q PV@

图2-4 段、区和数据块之间的关系51Testing软件测试网8e V%Wv_ ^(n;p

  1、数据块

9_2l W;T-t4ERP0

  Oracle数据块(Data Block)是一组连续的操作系统块。 分配数据库块大小是在Oracle数据库创建时设置的,数据块是Oracle读写的基本单位。数据块的大小一般是操作系统块大小的整数倍,这样可以避免不 必要的系统I/O操作。从Oracle9i开始,在同一数据库中不同表空间的数据块大小可以不同。数据块是Oracle最基本的存储单位,而表空间、段、 区间则是逻辑组织的构成成员。在数据库缓冲区中的每一个块都是一个数据块,一个数据块不能跨越多个文件。

Y;~ S'|b2Ov0

  数据块的结构主要包括:51Testing软件测试网0F o:u+nZ.Smt!R

  标题:包括一般的块信息,如块地址,段类型等。51Testing软件测试网f0N%PcVVVp cQ'e

  表目录:包括有关表在该数据块中的行信息。51Testing软件测试网9Os!e3C;Ln2y9t"\ h

  行目录:包括有关在该数据块中行地址等信息。51Testing软件测试网X:ug0j d(^\/e$P

  行数据:包括表或索引数据。一行可跨越多个数据块。51Testing软件测试网u6j-b,O*qh6U4{

  空闲空间:分配空闲空间是用于插入新的行和需要额外空间的行更新。通过空间管理参数pctfree可控制空闲空间的使用。空闲空间的管理既可以是自动的也可以是手动的。

7g7G$Rk9]r4|#w0

   在数据操作中,有两种语句可以增加数据库块的空闲空间:一个是Delete删除语句,另一个是Update更新现有行。释放的空闲空间可用于 insert语句,如果insert语句是与产生空闲空间的语句在同一个事务之中,并在其后执行,则insert语句可直接使用生成的空闲空间。如果 insert语句是在一个与产生空闲空间的语句相分离的事务中,则insert语句可在其他事务提交后,并在其需要空间时,使用之前产生的空闲空间。

1R6Egw/a0

   数据块中释放的空间可能是连续的,也可能不连续。Oracle只有在出现下列情况时,才会合并数据块的空闲空间:当insert或update语句要使 用一个数据块,该数据块的空闲空间足以存储新的一行,而且空闲空间均是碎片,数据块中连续空间无法插入一行的时候。除此而外,Oracle在系统性能下降 时也需要压缩数据块的空间。51Testing软件测试网n8}0D Gf*@a%z t M

51Testing软件测试网Q;a#nM4S.|E

  能够对空闲空间产生影响的参数有两个:pctfree和pctused。对于手工管理的表空间,在特定段中的所有数据块,可使用两个空间管理参 数pctfree和pctused来控制insert和update对空闲空间的使用。当创建或修改表时可指定这两个参数。创建或修改一个拥有自己的索引 段的索引时可指定pctfree参数。

7@x P8W5]U051Testing软件测试网7k[]!V-lQ

  pctfree参数为块中行的更新预留了空闲空间的最小百分比,默认值为10。例如,假定在Create table语句中指定了pctfree为20,则说明在该表的数据段内每个数据块的20%被作为可利用的空闲空间,用于更新已在数据块内存在的数据行。其 余80%是用于插入新的数据行,直到达到80%为止。显然,pctfree值越小,则为现存行更新所预留的空间越少。因此,如果pctfree设置得太 高,则在全表扫描期间增加I/O,浪费磁盘空间;如果pctfree设置得太低,则会导致行迁移。

$ow7v0P5Cm!V0B051Testing软件测试网 Ow*aTx;Y_

  pctused参数设置了数据块是否是空闲的界限。当数据块的使用空间低于pctused的值时,此数据块标志为空闲,该空闲空间仅用于插入新 的行。如果数据块已经达到了由pctfree所确定的上边界时,Oracle就认为此数据块已经无法再插入新的行。例如,假定在Create table语句中指定pctused为40,则当小于或等于39时,该数据块才是可用的。所以,可将数据块填得更满,这样可节省空间,但却增加了处理开 销,因为数据块的空闲空间总是要被更新的行占据,所以对数据块需要频繁地进行重新组织。比较低的pctused增加了数据库的空闲空间,但减少了更新操作 的处理开销。所以,如果pctused设置过高,则会降低磁盘的利用率导致行迁移;若pctused设置过低,则浪费磁盘空间,增加全表扫描时的I/O输 出。pctused是与pctfree相对的参数。51Testing软件测试网!lj&y a%sj*O r8r J

51Testing软件测试网MBM!_7R KNL

  那么,如何选择pctfree和pctused的值呢?有个公式可供参考。显然,pctfree和pctused的之和不能超过100。若两者 之和低于100,则空间的利用与系统的I/O之间的最佳平衡点是:pctfree与pctused之和等于100%减去一行的大小占块空间大小的百分比。 例如,如果块大小为2048字节,则它需要100个字节的开销,而行大小是390字节(为可用块的20%)。为了充分利用空间,pctfree与 pctused之和最好为80%。

Pqf ~#s#? qQ~d5K051Testing软件测试网 A"G#x2fR!F

  那么,怎样确定数据块大小呢?有两个因素需要考虑:

0`Z,e5Y!y-i%R2p0

%b {[&wGZ\*F$w6n&p]0  一是数据库环境类型。例如,是DSS环境还是OLTP环境?在数据仓库环境(OLAP或DSS)下,用户需要进行许多运行时间很长的查询,所以应当使用大的数据块。在OLTP系统中,用户处理大量的小型事务,采用较小数据块能够获得更好的效果。

QgJ/C"DU/a"o)L0

/h(Q%u2yW\0  二是SGA的大小。数据库缓冲区的大小由数据块大小和初始化文件的db_block_buffers参数决定。最好设为操作系统I/O的整数倍。51Testing软件测试网 [?$]]1eke/Yh

"jc]9mXQ [#Z0  2、区51Testing软件测试网gh.Duxp Th1N+T

51Testing软件测试网a2nv[ W;H

  区(Extent)也称为数据区,是一组连续的数据块。当一个表、回滚段或临时段创建或需要附加空间时,系统总是为之分配一个新的数据区。一个 数据区不能跨越多个文件,因为它包含连续的数据块。使用区的目的是用来保存特定数据类型的数据,也是表中数据增长的基本单位。在Oracle数据库中,分 配空间就是以数据区为单位的。一个Oracle对象包含至少一个数据区。设置一个表或索引的存储参数包含设置它的数据区大小。

+_!{ A Oa Yp0

-_$^+yI0r0  3、段51Testing软件测试网3YoI)s)zuI

51Testing软件测试网+p3HR vv.y(}4Bz

  段(Segment)是由多个数据区构成的,它是为特定的数据库对象(如表段、索引段、回滚段、临时段)分配的一系列数据区。段内包含的数据区可以不连续,并且可以跨越多个文件。使用段的目的是用来保存特定对象。51Testing软件测试网7\]8];SW;V+v

51Testing软件测试网+q8oXbL v

  一个Oracle数据库有4种类型的段:

A7i7} M2D~zc051Testing软件测试网*|3G bQ? @ ['p

  数据段:数据段也称为表段,它包含数据并且与表和簇相关。当创建一个表时,系统自动创建一个以该表的名字命名的数据段。51Testing软件测试网`Hza0Sd0Ylu C

51Testing软件测试网T.j5C7Ka2G H+_0P

  索引段:包含了用于提高系统性能的索引。一旦建立索引,系统自动创建一个以该索引的名字命名的索引段。

(p.}6D i@6p0

5P hHx8G/u]s0  回滚段:包含了回滚信息,并在数据库恢复期间使用,以便为数据库提供读入一致性和回滚未提交的事务,即用来回滚事务的数据空间。当一个事务开始处理时,系统为之分配回滚段,回滚段可以动态创建和撤销。系统有个默认的回滚段,其管理方式既可以是自动的,也可以是手工的。51Testing软件测试网;b,Lm2uu @%K3lV YSo

p%Dj7|@Z0  临时段:它是Oracle在运行过程中自行创建的段。当一个SQL语句需要临时工作区时,由Oracle建立临时段。一旦语句执行完毕,临时段的区间便退回给系统。

1a+qA@4D??i-Q0

D[*ap3c0  4、表空间

4r'T)ey'mr$c+R051Testing软件测试网TOZ X3Z9H7t+q

  Oracle数据库(tablespace)是由若干个表空间构成的。任何数据库对象在存储时都必须存储在某个表空间中。表空间对应于若干个磁 盘文件,即表空间是由一个或多个磁盘文件构成的。表空间相当于操作系统中的文件夹,也是数据库逻辑结构与物理文件之间的一个映射。每个数据库至少有一个表 空间,表空间的大小等于所有从属于它的数据文件大小的总和。51Testing软件测试网'k~+Bi/K6^6P]

bu/EzD8fP:J!r0  在Oracle 10g中有以下几种比较特殊的表空间:

s?ewq(z j0

} [?+hfA*L,o0  (1)系统表空间

9Q"ke$d,`,N0

Js c2y#Z%K-g0  系统表空间(system tablespace)是每个Oracle数据库都必须具备的。其功能是在系统表空间中存放诸如表空间名称、表空间所含数据文件等数据库管理所需的信息。 系统表空间的名称是不可更改的。系统表空间必须在任何时候都可以用,也是数据库运行的必要条件。因此,系统表空间是不能脱机的。

9?/F0hG'WN0

&T]}2?LW0  系统表空间包括数据字典、存储过程、触发器和系统回滚段。为避免系统表空间产生存储碎片以及争用系统资源的问题,应创建一个独立的表空间用来单独存储用户数据。

;j [%g g6^wjZ"r0

(n.lNfh-E3@yP b0  (2)SYSAUX表空间

8d/N%vMg`4_5gPq0

&eg!{%}%C/U0  SYSAUX表空间是随着数据库的创建而创建的,它充当SYSTEM的辅助表空间,主要存储除数据字典以外的其他对象。SYSAUX也是许多Oracle 数据库的默认表空间,它减少了由数据库和DBA管理的表空间数量,降低了SYSTEM表空间的负荷。

$P&E*?Q3G0}}a_051Testing软件测试网K3U)}A-e+U$K,}@

  (3)临时表空间51Testing软件测试网Ai&Dr(a

&R S1t(dh(yS b0  相对于其他表空间而言,临时表空间(temp tablespace)主要用于存储Oracle数据库运行期间所产生的临时数据。数据库可以建立多个临时表空间。当数据库关闭后,临时表空间中所有数据将全部被清除。除临时表空间外,其他表空间都属于永久性表空间。51Testing软件测试网[5X8K N"h0EB

51Testing软件测试网5r&QJ&T O3~SR2b

  (4)撤销表空间

X&T$}1\5nM0

'} yRxa'E1D0  用于保存Oracle数据库撤销信息,即保存用户回滚段的表空间称之为回滚表空间(或简称为RBS撤销表空间(undo tablespace))。在Oracle8i中是rollback tablespace,从Oracle9i开始改为undo tablespace。在Oracle 10g中初始创建的只有6个表空间sysaux、system、temp、undotbs1、example和users。其中temp是临时表空 间,undotbs1是undo撤销表空间。图2-5是表空间与数据库及数据文件之间的对应关系。51Testing软件测试网x)yek/g^h

pn,i{)}'@$@4m0

图2-5 表空间与数据库及数据文件之间的对应关系

I3n b-u4t c b.D0

TAG:

 

评分:0

我来说两句

Open Toolbar