♣
题目部分
在Oracle中,逻辑结构由哪几个部分组成?
♣
答案部分
Oracle中逻辑结构包括表空间(TABLESPACE)、段(SEGMENT)、区(EXTENT)和块(BLOCK)。数据库由表空间构成,而表空间又是由段构成,而段又是由区构成,而区又是由Oracle块构成,即块→区→段→表空间→数据库。
逻辑结构图简单如下图所示:
图 3-4 Oracle逻辑结构图
Oracle数据库在逻辑上将数据存储在表空间中,在物理上将数据存储在数据文件中。
① 数据库(Database):一个数据库是由多个表空间组成,也可以说多个不同类型的表空间组成了一个数据库。
② 表空间(Tablespace):数据库中的基本逻辑结构,一系列数据文件的集合。一个表空间可以包括多个数据文件,这多个数据文件可以分布在不同的磁盘上,这样可以提高表空间的I/O请求。数据库的数据作为一个整体存储在构成数据库每一个表空间的数据文件中。一个Oracle数据库必须至少有两个表空间(必需的SYSTEM和SYSAUX表空间),每个表空间包含一个或多个数据文件。临时文件是一个属于临时表空间的文件,它是使用TEMPFILE选项创建的。临时表空间不能包含永久数据库对象(例如表),并且通常用于排序。表空间可以分为大文件表空间和小文件表空间,参考【真题154、什么是大文件表空间(BIGFILE TABLESPACE)?】。
③ 段(Segment):对象在数据库中占用的空间。当在数据库中创建表或索引时,系统就会创建对应的段。段是由多个可以不连续的区组成,所以段是可以跨数据文件的。当段空间不足时,系统将以区为单位为段分配空间。段按照类型可以分为数据段、索引段、Undo段、临时段等,其中:
l 数据段:每个非集群的、不按索引组织的表都有一个数据段,但外部表、全局临时表和分区表除外,这些表中的每个表都有一个或多个段。表中的所有数据都存储在相应数据段的区中。对于分区表,每个分区都有一个数据段。每个集群也都有一个数据段。集群中每个表的数据都存储在集群的数据段中。
l 索引段:每个索引都有一个索引段,存储其所有数据。对于分区索引,每个分区都有一个索引段。
l Undo段:Oracle为每个数据库实例创建一个Undo表空间,该表空间包含大量用于临时存储还原信息的Undo段。Undo段中的信息用于生成读一致性数据库信息,并且在数据库恢复过程中,用于为用户回滚未提交的事务处理。
l 临时段:临时段是在需要临时工作区来执行SQL语句时,由Oracle数据库创建的。在语句执行完成后,临时段的区将返回到实例以备将来使用。Oracle会为每个用户指定一个默认临时表空间,或指定一个在数据库范围内使用的默认临时表空间。
④ 区(Extent):为数据一次性预留的一个较大的存储空间。区是一个空间分配单位,当数据库对象空间不足时,通常会以区为单位进行分配空间。区是由多个连续的数据块组成,由此可知区是不能跨数据文件的。
⑤ 块(Block):Oracle最基本的存储单位,在建立数据库的时候指定DB_BLOCK_SIZE值,该参数表示数据库标准数据块的大小,默认大小为8K,它是数据库一次标准I/O的大小,一个标准的Oracle数据块是由连续的操作系统数据块组成的。1个8K的数据块理论上最多可存储700多行,所以,块越大,在相同情况下存储的行就越多,而Oracle是以块为单位进行访问的,那么产生的逻辑读就越小。需要注意的是,块越大,不同的会话访问不同的数据落在同一个块的几率就增加了,这就容易产生热点块竞争,所以,在OLAP中,可以适当将块调大。
真题1、Note the following structures in your database server:
1、Extents
2、OS Blocks
3、Tablespace
4、Segments
5、Oracle Data Block
Which option has the correct arrangement of these structures FROM the smallest to the largest?()
A、2,5,1,4,3
B、1,2,3,4,5
C、5,2,1,3,4
D、2,1,5,4,3
答案:A。
Oracle中逻辑结构包括表空间、段、区和块。说明一下:数据库由表空间构成,而表空间又是由段构成,而段又是由区构成,而区又是由Oracle 块构成的这样的一种结构,可以提高数据库的效率,块 → 区 → 段 → 表空间 → 数据库。题目问的是从小到大的排序哪个是正确的。
本题中,对于选项A,OS BLOCKS->ORACLE DATA BLOCK->EXTENTS->SEGMENTS->TABLESPACE,排序正确。所以,选项A正确。
对于选项B,Extents不是最小的,排除掉。所以,选项B错误。
对于选项C,Oracle数据块也不是最小的,排除掉。所以,选项C错误。
对于选项D,块组成区,而不是区组成块。所以,选项D错误。
所以,本题的答案为A。
真题2、下面有关TABLESPACE和DATAFILE之间的关系的描述中,说法错误的是()
A、一个TABLESPACE可以有一个或多个DATAFILE
B、每个DATAFILE只能在一个TABLESPACE内
C、TABLE中的数据,通过HASH算法分布在TABLESPACE中的各个DATAFILE中
D、DATAFILE是逻辑上的概念,TABLESPACE则在物理上储存了数据库的种种对象
答案:D。
关于数据库的逻辑结构和物理结构,表空间(TABLESPACE)是逻辑上的概念,数据文件(DATAFILE)是物理上的概念。一个表空间可以由一个或多个数据文件组成,一个数据文件不能跨越多个表空间。TABLE中的数据,通过HASH算法分布在表空间中的各个数据文件中。表空间是Oracle数据库中最大的逻辑单位与存储空间单位,数据库系统通过表空间为数据库对象分配空间。
本题中,对于选项A,一个TABLESPACE可以有一个或多个DATAFILE,说法是正确的。所以,选项A错误。
对于选项B,每个DATAFILE只能在一个TABLESPACE内,说法正确。所以,选项B错误。
对于选项C,TABLE中的数据,通过HASH算法分布在TABLESPACE中的各个DATAFILE中,说法正确。所以,选项C错误。
对于选项D,TABLESPACE是逻辑上的概念,DATAFILE是物理上的概念,选项中正好说反了。所以,选项D正确。
所以,本题的答案为D。
真题3、DATA BLOCK,EXTENT和SEGMENT的区别是什么?
答案:DATA BLOCK是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的DATA BLOCK就组成了EXTENT。一个数据库对象拥有的所有EXTENT被称为该对象的SEGMENT。
真题4、在Oracle中,数据块、Redo日志块及控制文件数据块的大小分别是多少?如何查询?
答案:这3种数据块分别介绍如下:
① 数据块(Data Block),是读写数据文件的最小单位,默认是8KB,可以通过SQL语句“SELECT FILE#,NAME,BLOCK_SIZE FROM V$DATAFILE;”查询,单位为BYTE。
② Redo日志数据块(Redo Log Block),大小一般等于操作系统的系统块的大小,一般为512或4096,可以通过SQL语句“SELECT BLOCKSIZE FROM V$LOG;”或“SELECT LEBSZ FROM X$KCCLE;”查询,单位为BYTE。
③ 控制文件数据块(Control File Block),默认为16KB,可以通过SQL语句“SELECT BLOCK_SIZE FROM V$CONTROLFILE;”查询,单位为BYTE。
SQL> col name
for
a50
SQL> select
file#,name,block_size from
v$datafile;
FILE# NAME
BLOCK_SIZE
---------- -------------------------------------------------- ----------
1 /u02/app/oracle/oradata/oratest/system01.dbf 8192
2 /u02/app/oracle/oradata/oratest/sysaux01.dbf 8192
3 /u02/app/oracle/oradata/oratest/undotbs01.dbf 8192
4 /u02/app/oracle/oradata/oratest/users01.dbf 8192
5 /u02/app/oracle/oradata/oratest/example01.dbf 8192
6 /u02/app/oracle/oradata/oratest/users02.dbf 8192
7 /u02/app/oracle/oradata/oratest/ts_ogg01.dbf 8192
8 /u02/app/oracle/oradata/oratest/users03.dbf 8192
8 rows
selected.
SQL> select
lebsz from
x$kccle;
LEBSZ
----------
512
512
512
SQL> select
block_size from
v$controlfile;
BLOCK_SIZE
----------
16384
16384
& 说明:
有关OS数据块的查询更多内容可以参考:http://blog.itpub.net/26736162/viewspace-2136094/、http://blog.itpub.net/26736162/viewspace-2136095/。
本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。