逻辑存储结构-段区块

逻辑存储结构-段区块
逻辑存储结构-段区块

数据库逻辑存储结构

数据库的物理存储结构对应一系列的物理文件,这部分主要描述的是数据存储的实际位置,不过数据如果存储,是以什么结构存储到数据文件中,则取决于数据库的逻辑存储结构.

Oracle数据库在执行操作时,并不是以数据文件为单位,而是从逻辑上定义出一组结构,操作的数据可以一步步细分不同的存储单元,oracle 操作数据的过程,实际上就是对这些不同级别的存储单元进行维护和管理的过程.

--数据库的存储结构分为:段(segment).区(extent)和数据块(block)

段(segment):段是数据库内占用空间的对象.它们使用数据库中数据文件内的空间.一个tablespace对应多个segment,一个segment只能对

应一个tablespace,但可以跨越对应tablespace下的datafiles

--段类型:

●表(table):是数据库中最重要的段,也是数据库内存储数据的最常用方法.表段用于存储非集簇且未分区的表中的数据.表段中的所有

数据都必需存储在一个表空间内.

●表分区(table partition):当一个表的规模很大,且并发操作非常频繁时,可以把这样表划分成若干个分区(partition).而每个分区

驻留在不同的表空间.每个分区的存储参数都可以单独定义.可以通过把每个分区放在不同磁盘上以提高并行操作的能力,从而达到改进系统效率的目的.对于分区表,当一个分区损坏了并不影响其他分区的操作.

提示:要使用分区表,必需使用oracle的企业版分区表的选项(partitioning),oracle提供了大批专门命令来管理和操作分区表.

●簇(cluster):簇与表一样,是一种数据段类型.簇内的行是基于键列值存储的.一个簇可以包含一个或多个表.一个簇的表属于同一个

段并且共享相同的存储特性.可以通过索引或者三列算法来访问集簇表内的行.

提示:簇少用,这样可以减少管理和维护的负担,也可以使跨IT平台的移植变的更加容易.

●索引(index):索引段的目的是加快基于某一特殊(索引关键字)的查询速度,这样查询可以很快查找到某一个表中所需数据的准确位置.

一个特定索引的所有索引记录都记录在一个索引段中.如在吗

果一个表有三个索引,那么就会有三个对应的索引段,

SQL> conn erm/erm

Connected.

SQL> select * from tab;

no rows selected

SQL> select segment_name,segment_type from user_segments; <==使用user_segments视图查看段类型(segment_type) no rows selected

SQL> create table t (id int primary key,name char(10)); <== 此表里有一个主键,建立主键自动创建索引.

Table created.

SQL> select segment_name,segment_type from user_segments;

SEGMENT_NAME SEGMENT_TYPE

------------------------------ ---------------

SYS_C005144 INDEX <==t表主键的索引段

T TABLE

●索引分区(index partition):当在一个大型或超大型表上创建索引时,那这个索引也可能很大,所以也可以像分区表一样,将该索引划

分为若干个分区,每个索引分区为一单独的段.这样一个索引可以分布在不同的表空间上.但每个索引分区(段)只能存放在一个表空间中.

●索引表(index-organized table):如果用户的查询主要是基于索引关键字,那么在索引树的叶子节点中的数据行的地址部分可以存放

真正的数据,这种存储结构称为索引表.

索引表优点:可以大大的加快基于索引关键字的查询

索引表缺点:索引表这种存储结构不适合DML(数据操纵语句)操作非常频分的表

DML语言不隐含commit语句的,因此需要用户手动提交对数据库的修改.

●临时段(temporary segment):当在SQL语句中使用了诸如ORDER BY,GROUP BY或DISTINCT等语句或关键字时,oracle就要试着在内存中

进行排序,如果内存中排不下就把中间的结果写到磁盘上,该磁盘区就是临时段.

●还原段(undo segment):还原段9i之前称为回滚段(rollback segment),用来存放事务(transaction)对数据库所做的改变.oracle涉及

到一致性读操作.也就是当一个用户对一个表进行修改,而这时另一个用户对表做DML操作时,对任何数据块或索引块改变之前,所有的原始值都将存放到还原段中.这样做不但允许用户可以还原所做的变化,而且还可以在另一个用户对数据进行DML操作的同时,允许对该行数据进行读操作(读的是存放到还原段的原来的数据)

●大对象段(LOB segment):大对象(LOB)数据类型是从8i开始引入的,用户存储例如大的正文文档,图像或音像信息的.在一个表中可以有

一列或多列LOB数据类型.如果LOB类型的列很大.oracle就会将该列的值单独存放在另一个段中,该段就称为大对象段,在表中只包含一个指向相应大对象数据的指针(地址)

●嵌套表(nested table):嵌套表是一种特殊表,该表中某一列又由一个用户定义的表组成,即表中套表,被称为嵌套表的内表呗存放在另

外一个段中嵌套表少用

●自举段(bootstrap segment):是在数据库被创建时由sql.bsq脚本创建,也被称作为高速缓存段.自举段DBA无法查询或修改,并且不需

要dba维护.

--存储子句优先级:

●段级别定义了存储参数,将大于表空间定义的存储参数,但表空间一级的参数MINIMUM EXTENT或UNIFORM SIZ除外.

●当段没有显示的定义存储参数,将默认为表空间一级做定义的参数

●当表空间一级没有显示的定义存储参数,则使用oracle系统默认的存储参数

注意事项:

●如果指定了表空间的最小区(minimum extent)大小,则该大小适用于将来分配给该表空间内段的所有区.某些参数不能在表空间一级

定义,而只能在段级别定义

●如果对存储参数进行了修改,新的存储参数只适用于还没有分配的区

--区的管理

区是表空间内某个段使用的一块空间,它是由连续的oracle数据块组成.

引入区的目的:为了提高系统的效率,利用区来进行磁盘空间分配可以大大的减少磁盘分配的次数.oralce的磁盘分配算法是一个递归算法.而递归算法效率本身就比较低,减少磁盘分配的次数,也就等于减少了该递归发`算法使用的次数.

当段处于以下情况时分配区

●当一个段被创建时(created)时

●当一个段被扩展(extended)时

●当一个段被改变时(altered)时

当段处于以下情况时回收区

●当一个段被删除(dropped)时

●当一个段被改变时

●当一个段被截断(truncated)时<==删除表数据,并且释放数据块空间

创建表空间时,在该表空间中的数据文件就包含了一个文件头,这个头就是该数据文件的第一个或前几个数据块.

段所使用的的连续磁盘空间被称作使用区(used extent)未使用的称作空闲区(free extent),当一些段释放了磁盘空间时,这些释放的区段就被添加到所在表空间中可以使用的空闲区中.

--数据库块:

oracle最小的存储单位就是数据库块,也称作oracle数据库块.oracle数据块是由一个或多个操作系统块组成,其大小在表空间创建时,设置DB_BLOCK_SZIE为默认oracle数据块的大小.可以使用命令在操作系统级别查看数据库参数文件里默认的db_block_size值或是从数据库里使用dba_tablespaces视图来查看当前数据块大小

[oracle@fs11 ~]$ strings $ORACLE_HOME/dbs/spfilemfs.ora |grep -i db_block <==grep –i -i参数表示不区分大小写*.db_block_size=8192 或

SQL> show parameter db_block_size <==在数据库里查看参数

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------ 或

db_block_size integer 8192

SQL> select TABLESPACE_NAME,BLOCK_SIZE from dba_tablespaces; 在数据库里使用dba_tablespaces视图

--数据块大小

在8i前的版本中,oracle只能有一种数据块,其大小由DB_BLOCK_SIZE设定,9i版本开始,支持多种数据块大小,9i开始oracle数据库可使用一个标准数据块和4个非标准数据块.

--标准数据块

标准数据块的大小被用于系统表空间和临时表空间.数据库中标准数据块的大小是在数据库创建时,由初始化参数DB_BLOCK_SIZE设置,如果要修改标准块大小,只能重建数据库

提示:除非有特别的说明,一般将最常用的数据块大小选为标准数据块大小,而且标准块大小还用作表空间默认块大小.如果没有说明,默认数据块的大小是是与操作系统相关的,在一般情况下这个默认值最合适.

非标准数据块的大小为2的次方,其值在2-32kb之间,即2,4,8,16,32

提示:虽然非标准块为2,4,8,16,32 共五种,但一般32位的windows或linux操作系统上oracle数据块使用的是8,所以在32位系统中,非标准

DB_CACHE_SIZE参数用来执行标准块大小缓冲区的高速缓冲区大小,它的最小值为一个granule(颗粒)(4MB or 16MB) 默认值为48MB.该高速缓存的数据块大小为标准块大小,由DB_BLOCK_SIZE所定义.8i之前版本中的DB_BLOCK_BUFFERS初始化参数已被DB_CHCHE_SIZE初始化参数所取代.

提示:granule是一个连续虚拟内存分配单位,granule的大小取决于估算的SGA的总大小,这个总大小是根据SGA_MAX_SIZE的参数值计算的,如果估算的SGA的大小<128MB,则为4MB;否则为16MB.

--非标准块大小

使用以下动态参数配置附加高速缓存

◆DB_2K_CACHE_SIZE 用于 2 KB blocks

◆DB_4K_CACHE_SIZE 用于 4 KB blocks

◆DB_8K_CACHE_SIZE 用于 8 KB blocks

◆DB_16K_CACHE_SIZE 用于 16 KB blocks

◆DB_32K_CACHE_SIZE 用于 32 KB blocks

提示:数据块大小还受到IT平台的一些限制,如果使用的IT平台上最小块为2KB,那么就不能设置DB_2K_CACHE_SIZE;以此类推,IT平台设置了2,4,8,16,32,其中任意一个,那DB_nK_CACHE_SIZE就不能设置相同的值. DB_nK_CACHE_SIZ默认值为0

--多种数据块大小的规则

●一个分区对象的所有分区(partition)必需存在相同块大小的表空间中

●所有临时表空间,包括被用作默认临时表空间的的永久表空间都必需是标准块大小

●索引表的overflow(溢出)和外部LOB段可以存储在块大小与基表不同的表空间中.

--创建非标准块大小的表空间

通过在CRTATE TABLESPACE语句中使用BLOCKSIZE nK或BLOCKSIZE n子句来创建非标准块大小的表空间,n为整数,单位为字节,如果使用后缀为K,单位为KB.

为了使用这一语句,必须首先设置DB_CACHE_SIZE和至少一个DB_nK_CACHE_SIZE参数,而且该子句中的正整数也必须与所对应的

DB_nK_CACHE_SIZE参数中的正整数n相同.如果没有设置或不匹配会在创建非标准块表空间时报错

SQL> show parameter db_block_size

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

db_block_size integer 8192

SQL> show parameter db_16

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

db_16k_cache_size big integer 0

SQL> create tablespace tbs

2 datafile

3 '/u01/app/oracle/oradata/mfs/tbs_01.dbf'

4 size 10m blocksize 16k;

create tablespace tbs

*

ERROR at line 1: 第 1 行出现错误:

ORA-29339: tablespace block size 16384 does not match configured block sizes

ORA-29339: 表空间块大小 16384 与配置的块大小不匹配

提示:能不创建非标准块就不创建,因为使用非标准块大小的表空间会增加内存的开销.

--创建非标准块步骤:

SQL> show parameter db_block_size

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

db_block_size integer 8192

SQL> show parameter db_16 <==查看db_nk_cache_size其中一个值

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

db_16k_cache_size big integer 0

SQL> alter system set db_16k_cache_size=4M; <==设置

SQL> create tablespace tbs datafile '/u01/app/oracle/oradata/mfs/tbs_01.dbf' size 10m blocksize 16k;

SQL> select tablespace_name,block_size,contents from dba_tablespaces;

TABLESPACE_NAME BLOCK_SIZE CONTENTS

------------------------------ ---------- ---------

SYSTEM 8192 PERMANENT

UNDOTBS1 8192 UNDO

……

USERS 8192 PERMANENT

TBS 16384 PERMANENT <==创建的非标准块表空间的块大小

--数据块结构

●数据块头:包含块的一些属性信息,如块的物理位置,块所属的段的类型(如数据段,索引段,回滚段等)和事务槽.事务槽是在事务修改

数据块中的数据行时使用的,头部从上往下增长

●表目录:块中存储的数据为表数据,表目录中保存关于这个表的相关信息

●行目录:块中存储的数据为表数据,表目录中保存数据行的相关信息

提示:一个块中可能包含多条表记录,也可能只保存某条记录的一部分,这要视记录的长度及该块的空间分配情况而定.

数据块头,表目录和行目录组成了块的头部信息,这部分并不存储数据库中的实际数据,而是用来记录该块的逻辑结构,而且这部分占用的空间并不是固定的,平均大概占用84-107个字节的空间.是从上往下增加

●行记录(数据空间/已用空间):数据块中已被写入数据的区域,当数据被删除时,这部分空间会被转换成空闲空间.

提示:行记录/行数据是从下往上插入到块中

●空闲空间:当前块的可用空间,是块中尚未使用的存储空间.当对现有数据进行update或insert新数据到块中时,就是从这部分空间分

配容量用来写入数据.如果执行update操作时,块中的空间已经不足以存储修改的数据,那么记录就将被保存到另外一个拥有足够空间的块中,而只在原块保留一条指向新块的rowid,这种现象就是行迁移(row migration)

提示:数据块存储的数据不影响块的内部机构.不管块中存储的是什么数据类型,块的内部结构都是相同的.

提示:最初,块内的空闲空间是连续的,但是,删除和更新会使块内的空闲空间产生碎片.oracle服务器可以在需要时合并块内的空闲空间.

--数据块的空间管理

●手动管理

●自动管理(ASSM automatic segment space management)

为了更有效的管理和控制oracle数据块的各个部分,oracle引入了4个参数

这个四个参数可以用来控制数据块段的空间使用,也可以控制索引段中的空间.它们又被分为控制并行操作的参数和控制数据空间使用的参数两类

控制并行操作的参数:INITRANS和MAXTRANS

在了解这两个参数前,先了解下数据块中与事务有关的数据行和块头的结构

在数据块中每一数据行的头部有一个锁位,该锁位只记录了该行在事务中所使用的事务槽号,而事务槽是在数据块头中,有关事务的控制信息都放在了事务槽中.oracle是通过每一行的锁位中事务槽号在数据块头中找到所对应的事务槽,并利用该槽中的信息来完成该数据行的事务控制.事务槽是用来存储与当前改变数据块的事务有关的信息.每一个事务只使用一个事务槽,即使这个事务正在修改行数据或多行索引记录.

●INITRANS;定了创建数据块或索引块时事务槽的初始值.此参数用来保证最低水平的并行操作.对数据段默认值为1,对索引段默认值为

2.如果该参数被设置被设置为8,那么oracle服务器就能在任何时候都保证在一个数据块中可以有最多8个并行的事务.

●MAXTRANS;定义了创建数据块或索引块时事务槽的最大值.如果并行的事务很多,所需要的事务槽个数可能超过INITRANS所设定的初始

值,oracle会在块头中分配更多的事务槽,其数量的上线就是MAXTRANS所定的值,默认值为255

提示:并行操作与数据块哦你关键利用率是相互矛盾的,如果将INITRANS和MAXTRANS设置的过大,这样不仅并行操作改进了,而且系统的效率也有所提高,但是由于数据块头的加大而使在数据块中所存储的数据减小.意见:没必要就不要改变它们的默认值

控制数据空间使用的参数:PCTFREE和PCTUSED,这两个参数来管理数据块

--手工数据块的管理

Oracle允许通过使用如下参数来手工配置数据块以便更有效的管理和控制数据块中的磁盘空间的使用(在这里的数据块既可以包括数据段的块,也包括索引段中的块)

●PCTFREE:该参数定义在每个数据块中预留空间的百分比.这部分空间只是在数据块中的数据行进行修改操作(update)而造成的增长时

使用.默认值为10%

●PCTUSED:该参数用来定义每个数据块中已经使用的空间百分比.只有当一个数据块中所使用的空间低于这一参数所设定值时,oracle

才将这一数据块放入空闲队列.默认值40%

●FREELISTS:该参数用来在一个段中定义空闲队列(free list)的个数.空闲队列是一个数据块的列表,这些数据块将被用作插入操作的

候选数据块.在默认情况下,创建一个段时只有一个空闲队列.根据需要可以通过设置FREELISTS参数在一个段中创建多个空闲队列

使用这些参数目的是为了提高系统的效率

参数使用说明

当PCTFREE小于或等于20%时不能插入,而当PCTUSED=40%时可以插入数据

--行迁移与行连接

行迁移(row migration):举例说明,某个数据块中已经存放如了n行记录,其中某条记录需要进行更新操作,被更新的值较多,在写入到数据块时,发现该数据块中的空闲空间已经不足以存储更新后的行记录,在这种情况下oracle不得不把这行记录从原数据块中移出来,存储到另外一个具有足够空间的数据块中.不过oracle并不是简单的将记录移走,因为有些对象如索引仍然保存着该条记录对应的位置,而从块中移动记录并不会触发索引的自动维护,为了确保该记录的实际存储位置发生迁移后,通过索引还能找到该条记录,oracle在移走该记录的是同时,还会在原块保留地址的一个指向.也就是留一个指针.

行迁移造成的影响.当通过索引访问那条记录时,原来根据索引中记录的rowid即可通过一次I/O找到目标,不过现在只能找到目标数据的一个地址指针,因此不得不通过再一次I/O找到记录所在的新的位置,相当于查询时I/O负载提高了1倍

行迁移的记录在数据库中比较高,那么系统的性能就会被明显拖累,因此降低数据库中的行迁移现象,是数据库调优的一项重要操作,通过适当设置块的PCTFREE参数值,可以在一定程度上降低产生迁移的机率,但并不可能完全杜绝.

行连接(row chaining):当表中记录的长度超出了块大小时,就必然会产生行连接的情况.如当前块大小设置为8KB,如果某个表包含2个VARCHAR2(4000)的列并写满数据,对于这种记录,一个块无论如何也是放不下的,记录必然会被存储到多个块中.这种情况下,oracle就要在块中标记出该行记录连接的另一个块的位置.对于表中的列较多,或者含有大类型字段都极有可能出现这种情况,可以视为正常存储现象

--自动管理块大小/自动管理段空间

自动的段空间管理是一种在数据库段内部管理空闲空间的方法.该方法使用位图而不是使用空闲队列来追踪段内的空闲和使用空间.

特点:

●管理上的便利,因为PCTUSED,PCTFREE和FREELISTS等参数都是自动管理的

●较好的空间利用,这种方法中所有对象,特别是行的尺寸变化很大的对象的空间利用率会更有效

●并行插入(insert)操作性能有较大改进,改进了对并发访问变化的运行时调整

限制:不能用于包含LOB的表空间

1.自动的段空间管理,是使用位图(一个字节有8位,每个位两种状态0和1)来管理磁盘空间

2.在一个自动管理的表空间中所有的位图管理段包含了一个位图,

3.该位图描述了段中每一块与可获得可用空间相关的状态.

4.这个位图存放在一组单独的数据块中,这组数据块被称为位图块(BMBs)

5.插入新的一行时,服务器检索位图以找到一个具有足够空间的块

6.当块中的可用空间数量发生变化时,位图中就会反映出它的新状态.

--创建自动管理段空间

*注意*自动的段空间管理,只能在表空间一级,而且是本地管理的表空间才能开启自动的段空间管理.

在创建表空间时,在创建本地管理表空间命令中加入SEGMENT SPACE MANAGEMENTAUTO子句就可以完成自动段空间爱你管理配置

SQL> create tablespace tbs2 datafile '/u01/app/oracle/oradata/mfs/tbs2_01.dbf' size 10M

2 extent management local uniform size 1m segment space management auto;

SQL> select tablespace_name,block_size,extent_management,segment_space_management

2 from dba_tablespaces where lower(TABLESPACE_NAME)='tbs2';

TABLESPACE_NAME BLOCK_SIZE EXTENT_MAN SEGMEN

------------------------------ ---------- ---------- ------

TBS2 8192 LOCAL AUTO

SQL> select tablespace_name,block_size,extent_management,segment_space_management from dba_tablespaces;

TABLESPACE_NAME BLOCK_SIZE EXTENT_MAN SEGMEN

------------------------------ ---------- ---------- ------

SYSTEM 8192 LOCAL MANUAL

UNDOTBS1 8192 LOCAL MANUAL

……

TBS 16384 LOCAL AUTO

TBS2 8192 LOCAL AUTO

因为数据字典dba_tablespaces的segment_space_management一列值为AUTO说明此表空间是一个自动管理的表空间

--高水位线(High-warter mark, HWM)

在Oracle数据的存储中,可以把存储空间想象为一个水库,数据想象为水库中的水。水库中的水的位置有一条线叫做水位线,在Oracle中,

这条线被称为高水位线(High-warter mark, HWM)。在数据库表刚建立的时候,由于没有任何数据,所以这个时候水位线是空的,也就是说HWM为最低值。当插入了数据以后,高水位线就会上涨,但是这里也有一个特性,就是如果你采用delete语句删除数据的话,数据虽然被删除了,但是高水位线却没有降低,还是你刚才删除数据以前那么高的水位。也就是说,这条高水位线在日常的增删操作中只会上涨,不会下跌。

下面我们来谈一下Oracle中Select语句的特性。Select语句会对表中的数据进行一次扫描,但是究竟扫描多少数据存储块呢,这个并不是说数据库中有多少数据,Oracle就扫描这么大的数据块,而是Oracle会扫描高水位线以下的数据块。现在来想象一下,如果刚才是一张刚刚建立的空表,你进行了一次Select操作,那么由于高水位线HWM在最低的0位置上,所以没有数据块需要被扫描,扫描时间会极短。而如果这个时候你首先插入了一千万条数据,然后再用delete语句删除这一千万条数据。由于插入了一千万条数据,所以这个时候的高水位线就在一千万条数据这里。后来删除这一千万条数据的时候,由于delete语句不影响高水位线,所以高水位线依然在一千万条数据这里。这个时候再一次用select语句进行扫描,虽然这个时候表中没有数据,但是由于扫描是按照高水位线来的,所以需要把一千万条数据的存储空间都要扫描一次,也就是说这次扫描所需要的时间和扫描一千万条数据所需要的时间是一样多的。所以有时候有人总是经常说,怎么我的表中没有几条数据,但是还是这么慢呢,这个时候其实奥秘就是这里的高水位线了。

那有没有办法让高水位线下降呢,其实有一种比较简单的方法,那就是采用TRUNCATE语句进行删除数据。采用TRUNCATE语句删除一个表的数据的时候,类似于重新建立了表,不仅把数据都删除了,还把HWM给清空恢复为0。所以如果需要把表清空,在有可能利用TRUNCATE语句来删除数据的时候就利用TRUNCATE语句来删除表,特别是那种数据量有可能很大的临时存储表。

在手动段空间管理(Manual Segment Space Management)中,段中只有一个HWM,但是在Oracle9iRelease1才添加的自动段空间管理(Automatic Segment Space Management)中,又有了一个低HWM的概念出来。为什么有了HWM还又有一个低HWM呢,这个是因为自动段空间管理的特性造成的。在手段段空间管理中,当数据插入以后,如果是插入到新的数据块中,数据块就会被自动格式化等待数据访问。而在自动段空间管理中,数据插入到新的数据块以后,数据块并没有被格式化,而是在第一次在第一次访问这个数据块的时候才格式化这个块。所以我们又需要一条水位线,用来标示已经被格式化的块。这条水位线就叫做低 HWM。一般来说,低HWM肯定是低于等于HWM的。

-- 创建test3表演示高水位线列子

SQL> create table test3 as select * from dba_objects where 1 = 2;

-- 查看表中分配块,区大小

SQL> SELECT segment_name, segment_type, blocks -- 分配数据块数, extents -- 分配区块数

2 FROM dba_segments

3 WHERE segment_name = 'TEST3'

4 ;

SEGMENT_NAME SEGMENT_TYPE BLOCKS EXTENTS

------------------------------ ------------------ ---------- ----------

TEST3 TABLE 8 1

TEST3 TABLE 8 1

SQL> ANALYZE TABLE TEST3 ESTIMATE STATISTICS; -- 分析表TEST3表

-- 查询TEST3表高水位线

SQL> SELECT blocks -- 高水位线(占用TEST3表数据块数), empty_blocks -- TEST3表空闲块数, num_rows

2 FROM user_tables WHERE table_name = 'TEST3';

BLOCKS EMPTY_BLOCKS NUM_ROWS

---------- ------------ ----------

0 7 0

-- 因为未向TEST3表中插入任何数据,因此此表的高水位线为0,现向TEST3表中插入数据再观察

SQL> insert into test3 select * from dba_objects;

50361 rows inserted

SQL> commit;

Commit complete

SQL> ANALYZE TABLE TEST3 ESTIMATE STATISTICS; -- 重新分析表

-- 再次查看表中分配块,区大小

SQL> SELECT segment_name, segment_type, blocks, extents FROM dba_segments WHERE segment_name = 'TEST3';

SEGMENT_NAME SEGMENT_TYPE BLOCKS EXTENTS

---------------------------------------- ------------------ ---------- ----------

TEST3 TABLE 8 1

TEST3 TABLE 768 21

此时看到BLOCKS数已增长到768, 也就是Oracle分配给TEST3表768个数据块,21个区

-- 再次查看TEST3表高水位线

SQL> SELECT blocks, empty_blocks, num_rows FROM user_tables WHERE table_name = 'TEST3';

BLOCKS EMPTY_BLOCKS NUM_ROWS

---------- ------------ ----------

689 78 50361

已增长到689个块,还有78个空闲块,689 + 78 = 767, 比分配的少1个数据块,是因为这一个数据块是用作segment header

-- 现将TEST3表delete,在查看高水位线

SQL> delete from test3;

50361 rows deleted

SQL> commit;

Commit complete

SQL> ANALYZE TABLE TEST3 ESTIMATE STATISTICS;

Table analyzed

SQL> SELECT blocks, empty_blocks, num_rows FROM user_tables WHERE table_name = 'TEST3';

BLOCKS EMPTY_BLOCKS NUM_ROWS

---------- ------------ ----------

689 78 0

发现此表高水位线并未减少,证明delete只是删除表中数据块的记录,但并不会使表中的高水位线下降,在进行全表扫描时会Oracle会扫描表中高水位线下的所有数据块,

因此数据虽然被删除了,但查询时有可能还是很慢。所以在进行大表删除时应使用truncate语句,看下面实验:

SQL> truncate table test3;

Table truncated

SQL> ANALYZE TABLE TEST3 ESTIMATE STATISTICS;

Table analyzed

SQL> SELECT blocks, empty_blocks, num_rows FROM user_tables WHERE table_name = 'TEST3';

BLOCKS EMPTY_BLOCKS NUM_ROWS

---------- ------------ ----------

0 7 0

现在表中高水位下降到0了

为什么索引可以跨多个表空间

索引表缺点:索引表这种存储结构不适合DML(数据操纵语句)操作非常频分的表(为什么不适合DML操作)

如果指定了表空间的最小区(minimum extent)大小,则该大小适用于将来分配给该表空间内段的所有区.某些参数不能在表空间一级定义,而只能在段级别定义(问题:包含那些参数不能在表空间一级定义)

索引表的overflow(溢出)和外部LOB段可以存储在块大小与基表不同的表空间中. <==什么意思

问题:什么时候使用非标准块取决于,在数据迁移时或…… (在什么情况下使用非标准块)

手工数据块的管理如何设置这些参数????

在行迁移中(为什么oracle并不是简单的将记录移走,因为有些对象如索引仍然保存着该条记录对应的位置,而从块中移动记录并不会触发索引的自动维护)

在什么情况下使用手动管理或自动管理自动管理是否适合LOB的表空间?)

《数据结构》课后习题答案

第1章绪论 1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。 答案: 数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。 数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。在有些情况下,数据元素也称为元素、结点、记录等。数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。 数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。例如,学生基本信息表中的学号、姓名、性别等都是数据项。 数据对象:是性质相同的数据元素的集合,是数据的一个子集。例如:整数数据对象是集合N={0,±1,±2,…},字母字符数据对象是集合C={‘A’,‘B’,…,‘Z’,‘a’,‘b’,…,‘z’},学生基本信息表也可是一个数据对象。 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。 逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。 存储结构:数据对象在计算机中的存储表示,也称为物理结构。 抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。 2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。 答案: 例如有一张学生基本信息表,包括学生的学号、姓名、性别、籍贯、专业等。每个学生基本信息记录对应一个数据元素,学生记录按顺序号排列,形成了学生基本信息记录的线性序列。对于整个表来说,只有一个开始结点(它的前面无记录)和一个终端结点(它的后面无记录),其他的结点则各有一个也只有一个直接前趋和直接后继。学生记录之间的这种关系就确定了学生表的逻辑结构,即线性结构。 这些学生记录在计算机中的存储表示就是存储结构。如果用连续的存储单元(如用数组表示)来存放这些记录,则称为顺序存储结构;如果存储单元不连续,而是随机存放各个记录,然后用指针进行链接,则称为链式存储结构。 即相同的逻辑结构,可以对应不同的存储结构。 3.简述逻辑结构的四种基本关系并画出它们的关系图。 答案: (1)集合结构 数据元素之间除了“属于同一集合”的关系外,别无其他关系。例如,确定一名学生是否为班级成员,只需将班级看做一个集合结构。 (2)线性结构 数据元素之间存在一对一的关系。例如,将学生信息数据按照其入学报到的时间先后顺序进行排列,将组成一个线性结构。 (3)树结构

四种基本的存储结构

四种基本的存储结构 Prepared on 22 November 2020

数据的四种基本存储方法 数据的存储结构可用以下四种基本存储方法得到: (1)顺序存储方法 该方法把逻辑上相邻的结点存储在物理位置上相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。 由此得到的存储表示称为顺序存储结构(Sequential Storage Structure),通常借助程序语言的数组描述。 该方法主要应用于线性的数据结构。非线性的数据结构也可通过某种线性化的方法实现顺序存储。 (2)链接存储方法 该方法不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系由附加的指针字段表示。由此得到的存储表示称为链式存储结构(Linked Storage Structure),通常借助于程序语言的指针类型描述。 (3)索引存储方法 该方法通常在储存结点信息的同时,还建立附加的索引表。

索引表由若干索引项组成。若每个结点在索引表中都有一个索引项,则该索引表称之为稠密索引(Dense Index)。若一组结点在索引表中只对应一个索引项,则该索引表称为稀疏索引(Spare Index)。索引项的一般形式是: (关键字、地址) 关键字是能唯一标识一个结点的那些数据项。稠密索引中索引项的地址指示结点所在的存储位置;稀疏索引中索引项的地址指示一组结点的起始存储位置。 (4)散列存储方法 该方法的基本思想是:根据结点的关键字直接计算出该结点的存储地址。 四种基本存储方法,既可单独使用,也可组合起来对数据结构进行存储映像。 同一逻辑结构采用不同的存储方法,可以得到不同的存储结构。选择何种存储结构来表示相应的逻辑结构,视具体要求而定,主要考虑运算方便及算法的时空要求。 数据结构三方面的关系

四种基本的存储结构

数据的四种基本存储方法 数据的存储结构可用以下四种基本存储方法得到: (1)顺序存储方法 ???该方法把逻辑上相邻的结点存储在物理位置上相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。 ???由此得到的存储表示称为顺序存储结构(SequentialStorageStructure),通常借助程序语言的数组描述。 该方法主要应用于线性的数据结构。非线性的数据结构也可通过某种线性化的方法实现顺序存储。 (2)链接存储方法 ???该方法不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系由附加的指针字段表示。由此得到的存储表示称为链式存储结构(LinkedStorageStructure),通常借助于程序语言的指针类型描述。 (3)索引存储方法 ???该方法通常在储存结点信息的同时,还建立附加的索引表。 ???索引表由若干索引项组成。若每个结点在索引表中都有一个索引项,则该索引表称之为稠密索引(DenseIndex)。若一组结点在索引表中只对应一个索引项,则该索引表称为稀疏索引(SpareIndex)。索引项的一般形式是:

????????????????????(关键字、地址) 关键字是能唯一标识一个结点的那些数据项。稠密索引中索引项的地址指示结点所在的存储位置;稀疏索引中索引项的地址指示一组结点的起始存储位置。(4)散列存储方法 ???该方法的基本思想是:根据结点的关键字直接计算出该结点的存储地址。 四种基本存储方法,既可单独使用,也可组合起来对数据结构进行存储映像。 同一逻辑结构采用不同的存储方法,可以得到不同的存储结构。选择何种存储结构来表示相应的逻辑结构,视具体要求而定,主要考虑运算方便及算法的时空要求。 数据结构三方面的关系 数据的逻辑结构、数据的存储结构及数据的运算这三方面是一个整体。孤立地去理解一个方面,而不注意它们之间的联系是不可取的。 存储结构是数据结构不可缺少的一个方面:同一逻辑结构的不同存储结构可冠以不同的数据结构名称来标识。 【例】线性表是一种逻辑结构,若采用顺序方法的存储表示,可称其为顺序表;若采用链式存储方法,则可称其为链表;若采用散列存储方法,则可称为散列表。

数据结构的逻辑结构、存储结构及数据运算的含义及其相互关系

2007 C C C 语言的特点,简单的C 程序介绍,C 程序的上机步骤。1 、算法的概念2、简单的算法举例3、算法的特性4、算法的表示(自然语言、流程图、N-S 图表示) 1 、 C 的数据类型、常量与变星、整型数据、实型数据、字符型数据、字符串常量。2、 C 的运算符运算意义、优先级、结合方向。3、算术运算符和算术表达式,各类数值型数据间的混合运算。4、赋值运算符和赋值表达式。5、逗号运算符和逗号表达式。 1 、程序的三种基本结构。2、数据输入输出的概念及在C 语言中的实现。字符数据的输入输出,格式输入与输出。 1 、关系运算符及其优先级,关系运算和关系表达式。2、逻辑运算符及其优先级,逻辑运算符和逻辑表达式。3、if语句。if语句的三种形式,if语句的嵌套,条件运算符。4、switch 语句. 1 、while 语句。2、do/while 语句。3、for 语句。4、循环的嵌套。5、break 语句和continue 语句。1 、一维数组的定义和引用。2、二维数组的定义和引用。3、字符数组。4、字符串与字符数组。5、字符数组的输入输出。6、字符串处理函数1 、函数的定义。2、函数参数和函数的值,形式参数和实际参数。3、函数的返回值。4、函数调用的方式,函数的声明和函数原型。5、函数的嵌套调用。 6、函数的递归调用。 7、数组作为函数参数。 8、局部变量、全局变量的作用域。 9、变量的存储类别,自动变星,静态变量。1 、带参数的宏定义。2、“文件包含”处理。1 、地址和指针的概念。2、变量的指针和指向变量的指针变量。3、指针变量的定义

和引用。4、指针变量作为函数参数。5、数组的指针和指向数组的指针变量。6、指向数组元素的指针。7、通过指针引用数组元素。8、数组名作函数参数。9、二维数组与指针。 1 0、指向字符串的指针变星。字符串的指针表示形式,字符串指针作为函数参数。11 、字符指针变量和字符数组的异同。1 2、返回指针值的函数。1 3、指针数组。1 、定义结构体类型变星的方法。2、结构体变量的引用。3、结构体变量的初始化。4、结构体数组5、指向结构体类型数据的指针。6、共用体的概念,共用体变量的定义和引用,共用体类型数据的特点。typedef 1 、数据结构的逻辑结构、存储结构及数据运算的含义及其相互关系。2、数据结构的两大类逻辑结构和常用的存储表示方法。3、算法描述和算法分析的方法,对于一般算法能分析出时间复杂度。 1 、线性表的逻辑结构特征。2、线性表上定义的基本运算。3、顺序表的特点,即顺序表如何反映线性表中元素之间的逻辑关系。4、顺序表上的插入、删除操作及其平均时间性能分析。5、链表如何表示线性表中元素之间的逻辑关系。6、链表中头指针和头结点的使用。7、单链表上实现的建表、查找、插入和删除等基本算法,并分析其时间复杂度。8、顺序表和链表的主要优缺点。9、针对线性表上所需的主要操作,选择时空性能优越的存储结构。 1 、栈的逻辑结构特点.栈与线性表的异同。2、顺序栈和链栈实现的进栈、退栈等基本算法。3、栈的空和栈满的概念及其判定条件。4、队列的逻辑结构特点,队列与线性表的异同。5、顺序队列(主要是循

数据结构中常用的逻辑结构和存储结构

数据结构中常用的逻辑结构和存储结构 一、概念 数据是指由有限的符号(比如,"0"和"1",具有其自己的结构、操作、和相应的语义)组成的元素的集合。结构是元素之间的关系的集合。 数据结构是在整个计算机科学与技术领域上广泛被使用的术语。数据结构是信息的一种组织方式,其目的是为了提高算法的效率,它通常与一组算法的集合相对应,通过这组算法集合可以对数据结构中的数据进行某种操作。它用来反映一个数据的内部构成,即一个数据由那些成分数据构成,以什么方式构成,呈什么结构。 数据结构有逻辑上的数据结构和物理上的数据结构之分。逻辑上的数据结构反映成分数据之间的逻辑关系即逻辑结构,而物理上的数据结构反映成分数据在计算机内部的存储安排即存储结构。数据结构是数据存在的形式。 数据结构作为一门学科主要研究数据的各种逻辑结构和存储结构,以及对数据的各种操作。因此,主要有三个方面的内容:数据的逻辑结构;数据的物理存储结构;对数据的操作(或算法)。通常,算法的设计取决于数据的逻辑结构,算法的实现取决于数据的物理存储结构。因而研究数据结构的逻辑结构与存储结构显得十分重要。 二、结构分析 (一)逻辑结构 数据的逻辑结构是对数据之间关系的描述,有时就把逻辑结构简称为数据结构。逻辑结构形式地定义为(K,R)(或(D,S)),其中,K是数据元素的有限集,R是K上的关系的有限集。 逻辑结构元素决定输入、存储、发送、处理和信息传递的基本操作功能,常将逻辑结构元素称为逻辑模块。逻辑结构元素可以是计算机操作系统、终端模块、通信程序模块等。逻辑结构元素还可以是相关的几个逻辑模块联合起来的更复杂的实体。分析逻辑结构元素的相互作用,应考虑整个系统的操作,研究处理与信息流有关的进程(操作系统中的一个概念,表示程序的一次执行),并决定系统的逻辑资源。 逻辑结构有四种基本类型:集合结构、线性结构、树状结构和网络结构。表和树是最常用的两种高效数据结构,许多高效的算法能够用这两种数据结构来设计实现。 一、基本分类 数据的逻辑结构指数据元素之间的逻辑关系,分两种,线性结构和非线性结构。 线性结构:有且只有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前驱和一个直接后继。)线性表就是一个典型的线性结构它有四个基本特征:1.集合中必存在唯一的一个"第一个元素"; 2.集合中必存在唯一的一个"最后的元素"; 3.除最后元素之外,其它数据元素均有唯一的"后继"; 4.除第一元素之外,其它数据元素均有唯一的"前驱"。 相对应于线性结构,非线性结构的逻辑特征是一个结点元素可能对应多个直接前驱和多个直接后继。常见的非线性结构有:树(二叉树等),图(网等)。 二、常用结构

试举一个数据结构的例子、叙述其逻辑结构、存储结构、运算三个方面的内容。

数据结构复习笔记 作者: 网络转载发布日期: 无 数据就是指能够被计算机识别、存储和加工处理的信息的载体。 数据元素是数据的基本单位,有时一个数据元素可以由若干个数据项组成。数据项是具有独立含义的最小标识单位。如整数这个集合中,10这个数就可称是一个数据元素.又比如在一个数据库(关系式数据库)中,一个记录可称为一个数据元素,而这个元素中的某一字段就是一个数据项。 数据结构的定义虽然没有标准,但是它包括以下三方面内容:逻辑结构、存储结构、和对数据的操作。这一段比较重要,我用自己的语言来说明一下,大家看看是不是这样。 比如一个表(数据库),我们就称它为一个数据结构,它由很多记录(数据元素)组成,每个元素又包括很多字段(数据项)组成。那么这张表的逻辑结构是怎么样的呢? 我们分析数据结构都是从结点(其实也就是元素、记录、顶点,虽然在各种情况下所用名字不同,但说的是同一个东东)之间的关系来分析的,对于这个表中的任一个记录(结点),它只有一个直接前趋,只有一个直接后继(前趋后继就是前相邻后相邻的意思),整个表只有一个开始结点和一个终端结点,那我们知道了这些关系就能明白这个表的逻辑结构了。 而存储结构则是指用计算机语言如何表示结点之间的这种关系。如上面的表,在计算机语言中描述为连续存放在一片内存单元中,还是随机的存放在内存中再用指针把它们链接在一起,这两种表示法就成为两种不同的存储结构。(注意,在本课程里,我们只在高级语言的层次上讨论存储结构。) 第三个概念就是对数据的运算,比如一张表格,我们需要进行查找,增加,修改,删除记录等工作,而怎么样才能进行这样的操作呢? 这也就是数据的运算,它不仅仅是加减乘除这些算术运算了,在数据结构中,这些运算常常涉及算法问题。 弄清了以上三个问题,就可以弄清数据结构这个概念。 -------------------------------------------------------------------------------- 通常我们就将数据的逻辑结构简称为数据结构,数据的逻辑结构分两大类:线性结构和非线性结构(这两个很容易理解) 数据的存储方法有四种:顺序存储方法、链接存储方法、索引存储方法和散列存储方法。-------------------------------------------------------------------------------- 下一个是难点问题,就是算法的描述和分析,主要是算法复杂度的分析方法及其运用。首先了解一下几个概念。一个是时间复杂度,一个是渐近时间复杂度。前者是某个算法的时间耗费,它是该算法所求解问题规模n的函数,而后者是指当问题规模趋向无穷大时,该算法时间复杂度的数量级。 当我们评价一个算法的时间性能时,主要标准就是算法的渐近时间复杂度,因此,在算法分析时,往往对两者不予区分,经常是将渐近时间复杂度T(n)=O(f(n)简称为时间复杂度,其中的f(n)一般是算法中频度最大的语句频度。 此外,算法中语句的频度不仅与问题规模有关,还与输入实例中各元素的取值相关。但是我们总是考虑在最坏的情况下的时间复杂度。以保证算法的运行时间不会比它更长。 常见的时间复杂度,按数量级递增排列依次为:常数阶O(1)、对数阶O(log2n)、线性阶O(n)、线性对数阶O(nlog2n)、平方阶O(n^2)、立方阶O(n^3)、k次方阶O(n^k)、指数阶O(2^n)。 时间复杂度的分析计算请看书本上的例子,然后我们通过做练习加以领会和巩固。 数据结构习题一 --------------------------------------------------------------------------------

Oracle 逻辑存储结构

Oracle 逻辑存储结构 逻辑存储结构是Oracle 数据库存储结构的核心内容,对Oracle 数据库的所有操作都会涉及到其逻辑存储结构。数据库的逻辑结构是从逻辑的角度分析数据库的构成,即创建数据库后形成的逻辑概念之间的关系。在逻辑上,Oracle 将保存的数据划分为一个个小单元来进行存储和维护,高一级的存储单元由一个或多个低一级的存储单元组成。Oracle 的逻辑存储单元从小到大依次为:数据块(DA TA BLOCKS )、盘区(EXTENT )、段(SEGMENTS )和表空间(TABLE SPACES ),图2-2显示了各逻辑单位之间的关系。 数据库 ...表空间 表空间段 段盘区 数据块盘区数据块 段段数据库...表空间表空间段段盘区数据块盘区数据块段 段 图2-2 数据库的逻辑存储组成 由图2-2可知,Oracle 数据库由多个表空间组成,而表空间又由许多段组成,段由多个盘区组成,盘区又由多个数据块组成。 1 数据块 数据块是Oracle 用来管理存储空间的最小单元,也是执行数据库输入输出操作时的最小单位。相对应地,操作系统执行输入输出操作的最小单位为一个操作系统块的大小。在操作系统中,执行I/O 操作是以操作系统块为单位,而在Oracle 中,执行的I/O 操作以Oracle 数据块为单位。 Oracle 块的大小是操作系统块大小的整数倍。以Windows NT 操作系统为例,NTFS 格式的磁盘分区一般为4KB 大小,因此Oracle 块的大小为8KB 等。数据块的标准大小由初始化参数DB_BLOCK_SIZE 确定,具有标准大小的块被称为标准块。Oracle 支持在同一个数据库中使用多种大小的块,与标准块大小不同的块称为非标准块。 可以通过查询V$PARAMETER 数据字典,可以获得参数DB_BLACK_SIZE 的值,该参数值同时也是数据块的尺寸大小。例如: SQL> select name,value 2 from v$parameter where name ='db_block_size'; NAME V ALUE --------------------------- -------------------------- db_block_size 8192 在数据块中可以存储各种类型的数据,如表数据、索引数据、簇数据等。无论数据块中存放何种类型的数据,块都具有相同的结构,图2-3列出一个Oracle 块的基本结构。

EMC DMX存储的物理架构与逻辑架构

EMC DMX存储的物理架构与逻辑架构 一.DMX存储概述 DMX存储硬件的物理与逻辑架构能够实现最大限度的将一个lun 的io 最大限度分摊给硬盘,DAE盘阵的环路; 一个lun 的io 同时也平均分摊给后端的存储cpu . 从后面文档设备连接的介绍可以知晓. DMX的架构做到了最大限度的打散数据以达到性能最大化;性能最大化的硬件配置是一个控制柜加两个与控制柜存储cpu端口直连的磁盘柜; 存储卷vol 以及4个vol meta(绑定) 条带化以后就避免了热点(hot block) 读写的问题. 将任何一个lun的读写io 操作做到由最多的硬件资源来支撑. 硬件资源主要是硬盘,DAE盘阵环路,存储cpu,存储缓存. DMX存储安装配置是通过加载预先配置好的bin file 来部署的; bin file 定义了物理架构与逻辑架构的配置定义整个存储当前硬件配置如何被使用规划好,以后修改配置就得重新装载bin file 也就是重新配置整个存储. Bin file的加载以及整个存储的管理通过console服务器上的软件symmwin来操作,console服务器通过电话线moden 与EMC 支持中心连通. EMC技术人员通过电话线的拨号拨入方式可以做到完全掌控存储设备. 本文档关注存储设备架构方面,管理方面的gk盘,ecc等不做赘述. 二.E MC DMX 存储的物理架构 1.存储外观及各个模块介绍 (1)外观 DMX由一个控制柜加磁盘柜组成, 通常带2个或者5个磁盘柜 我们公司为了性能最大化,配置满配的前端后端卡,只挂2个磁盘柜.再扩展磁盘 机柜只增加空间,性能不增长.

, BAY BAY (2)物理构成模块图示: (打开机柜门前视图)

数据结构和算法习题及答案解析

第1章绪论 习题 1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。 2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。 3.简述逻辑结构的四种基本关系并画出它们的关系图。 4.存储结构由哪两种基本的存储方法实现? 5.选择题 (1)在数据结构中,从逻辑上可以把数据结构分成()。 A.动态结构和静态结构 B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.部结构和外部结构 (2)与数据元素本身的形式、容、相对位置、个数无关的是数据的()。 A.存储结构 B.存储实现 C.逻辑结构 D.运算实现 (3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()。 A.数据具有同一特点 B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致 C.每个数据元素都一样 D.数据元素所包含的数据项的个数要相等 (4)以下说确的是()。 A.数据元素是数据的最小单位 B.数据项是数据的基本单位 C.数据结构是带有结构的各数据项的集合 D.一些表面上很不相同的数据可以有相同的逻辑结构 (5)以下与数据的存储结构无关的术语是()。 A.顺序队列 B. 链表 C.有序表 D. 链栈(6)以下数据结构中,()是非线性数据结构 A.树 B.字符串 C.队 D.栈 6.试分析下面各程序段的时间复杂度。 (1)x=90; y=100; while(y>0) if(x>100) {x=x-10;y--;} else x++; (2)for (i=0; i

逻辑存储结构-段区块

数据库逻辑存储结构 数据库的物理存储结构对应一系列的物理文件,这部分主要描述的是数据存储的实际位置,不过数据如果存储,是以什么结构存储到数据文件中,则取决于数据库的逻辑存储结构. Oracle数据库在执行操作时,并不是以数据文件为单位,而是从逻辑上定义出一组结构,操作的数据可以一步步细分不同的存储单元,oracle 操作数据的过程,实际上就是对这些不同级别的存储单元进行维护和管理的过程. --数据库的存储结构分为:段(segment).区(extent)和数据块(block) 段(segment):段是数据库内占用空间的对象.它们使用数据库中数据文件内的空间.一个tablespace对应多个segment,一个segment只能对 应一个tablespace,但可以跨越对应tablespace下的datafiles --段类型: ●表(table):是数据库中最重要的段,也是数据库内存储数据的最常用方法.表段用于存储非集簇且未分区的表中的数据.表段中的所有 数据都必需存储在一个表空间内. ●表分区(table partition):当一个表的规模很大,且并发操作非常频繁时,可以把这样表划分成若干个分区(partition).而每个分区 驻留在不同的表空间.每个分区的存储参数都可以单独定义.可以通过把每个分区放在不同磁盘上以提高并行操作的能力,从而达到改进系统效率的目的.对于分区表,当一个分区损坏了并不影响其他分区的操作. 提示:要使用分区表,必需使用oracle的企业版分区表的选项(partitioning),oracle提供了大批专门命令来管理和操作分区表. ●簇(cluster):簇与表一样,是一种数据段类型.簇内的行是基于键列值存储的.一个簇可以包含一个或多个表.一个簇的表属于同一个 段并且共享相同的存储特性.可以通过索引或者三列算法来访问集簇表内的行. 提示:簇少用,这样可以减少管理和维护的负担,也可以使跨IT平台的移植变的更加容易. ●索引(index):索引段的目的是加快基于某一特殊(索引关键字)的查询速度,这样查询可以很快查找到某一个表中所需数据的准确位置. 一个特定索引的所有索引记录都记录在一个索引段中.如在吗 果一个表有三个索引,那么就会有三个对应的索引段, SQL> conn erm/erm Connected. SQL> select * from tab; no rows selected SQL> select segment_name,segment_type from user_segments; <==使用user_segments视图查看段类型(segment_type) no rows selected SQL> create table t (id int primary key,name char(10)); <== 此表里有一个主键,建立主键自动创建索引. Table created. SQL> select segment_name,segment_type from user_segments; SEGMENT_NAME SEGMENT_TYPE ------------------------------ --------------- SYS_C005144 INDEX <==t表主键的索引段 T TABLE ●索引分区(index partition):当在一个大型或超大型表上创建索引时,那这个索引也可能很大,所以也可以像分区表一样,将该索引划 分为若干个分区,每个索引分区为一单独的段.这样一个索引可以分布在不同的表空间上.但每个索引分区(段)只能存放在一个表空间中.

逻辑结构与存储结构

◆数据:指能够被计算机识别、存储和加工处理的信息载体。 ◆数据元素:就是数据的基本单位,在某些情况下,数据元素也称为元素、结点、顶点、记录。数据元素有时可以由若干数据项组成。 ◆数据类型:是一个值的集合以及在这些值上定义的一组操作的总称。 ◆数据结构:指的是数据之间的相互关系,即数据的组织形式。一般包括三个方面的内容:数据的逻辑结构、存储结构和数据的运算。 ◆逻辑结构:指各数据元素之间的逻辑关系。 ◆存储结构:就是数据的逻辑结构用计算机语言的实现。 ◆线性结构:数据逻辑结构中的一类,它的特征是若结构为非空集,则该结构有且只有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继。线性表就是一个典型的线性结构。 ◆非线性结构:数据逻辑结构中的另一大类,它的逻辑特征是一个结点可能有多个直接前趋和直接后继。 比如一个表(数据库),我们就称它为一个数据结构,它由很多记录(数据元素)组成,每个元素又包括很多字段(数据项)组成。那么这张表的逻辑结构是怎么样的呢? 我们分析数据结构都是从结点(其实也就是元素、记录、顶点,虽然在各种情况下所用名字不同,但说的是同一个东东)之间的关系来分析的,对于这个表中的任一个记录(结点),它只有一个直接前趋,只有一个直接后继(前趋后继就是前相邻后相邻的意思),整个表只有一个开始结点和一个终端结点,那我们知道了这些关系就能明白这个表的逻辑结构了。 而存储结构则是指用计算机语言如何表示结点之间的这种关系。如上面的表,在计算机语言中描述为连续存放在一片内存单元中,还是随机的存放在内存中再用指针把它们链接在一起,这两种表示法就成为两种不同的存储结构。(注意,在本课程里,我们只在高级语言的层次上讨论存储结构。) 第三个概念就是对数据的运算,比如一张表格,我们需要进行查找,增加,修改,删除记录

逻辑存储结构-表空间

表空间是数据库中最大的逻辑存储单位,同时也是直接与数据库物理结构相关联的逻辑单位,每个表空间都是有一个或多个(最多不超过1023个)数据文件组成. 数据库中创建的对象都保存在指定的表空间中,甚至一个对象可能存在于多个表空间(参考段相关内容进行理解) Oracle将数据逻辑地存放在表空间里,而物理存放在数据文件里,表空间在任何一个时刻都只能属于一个数据库,一个数据库一般有多个表空间,每个表空间都由一个或多个操作系统的数据文件组成.但是一个操作系统的数据文件只能属于一个表空间 提示:10g版本中新引入的一个BIGFILE(big文件)的表空间类型,可以在创建表空间时指定,BIGFILE表空间只能包含一个数据文件或临时文件,不过该数据文件最大能够支持4G(2的32次方)个数据块即使当前数据库的块大小为2KB,该表空间也能拥有8TB的存储空间,如果将数据库的块大小设置为32KB则该表空间最大能达到128TB(如果不考虑文件系统中单个文件最大空间的限制) 在默认情况下创建的表空间是SMALLFILE(小文件)表空间,这一类表空间最多能够拥有1022个数据文件,单个数据文件最大拥有0.4G(2的22次方)个数据块,如果将数据库的块大小设置为32KB,则对于SMALLFILE的表空间类型,最大也将接近128TB(同样如果不考虑文件系统中单个文件最大空间的限制),比BIGFILE类型略小. --创建大文件表空间 SQL> create bigfile tablespace t1

2 datafile 3 '/u01/tablespace/t1.dbf' size 100m autoextend on; Tablespace created. SQL> bigfile关键字表示创建的表空间是一个大文件表空间 datafile指定这个表空间的路径和组成这个表空间的数据文件 size指定这个大表空间的大小 autoextend on表示允许该大文件不够用时自动增长 表空间类型 为加强控制和方便维护,DBA创建表空间时,oracle识别两种类型的表空间 系统表空间(SYSTEM)与非系统表空间 SYSTEM表空间: 随数据库一起创建 所有数据库均需要system 系统表空间中存有数据字典 系统表空间还包含了系统还原(回滚)段 虽然在系统表空间中可以存放用户数据,但考虑到oracle系统的效率和管理上的方便,在系统表空间上不应该存放任何用户数据. 非系统表空间 非系统表空间(non-system)可以有数据库管理员手工创建,支持灵活的管理数据

数据结构习题-带答案-12-13-2讲解

习题一 一、选择题 1、数据结构是一门研究非数值计算的程序设计问题中的操作对象以及它们之间的(B)和运算的学科。 A.结构B.关系C.运算D.算法 2、在数据结构中,从逻辑上可以把数据结构分成(C)。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.逻辑结构和存储结构 3、线性表的逻辑顺序和存储顺序总是一致的,这种说法(B)。树形 A.正确B.不正确C.无法确定D.以上答案都不对 4、算法分析的目的是(C)。 A.找出算法的合理性B.研究算法的输人与输出关系 C.分析算法的有效性以求改进D.分析算法的易懂性 二、填空题 1、__数据___是信息的载体,是对客观事物的符号表示,它能够被计算机识别、存储、加工和处理,___数据_____是对能够有效的输人到计算机中并且能够被计算机处理的符号的总称。例如,数学中所用到的整数和实数,文本编辑所用到的字符串等。 2、数据元素是数据的__基本单位_,有些情况下也称为元素、结点、顶点、记录等。 3、__数据项__是数据不可分割的最小单元,是具有独立含义的最小标识单位。例如构成一个数据元素的字段、域、属性等都可称之为__数据项_。 4、简而言之,数据结构是数据之间的__相互关系_,即数据的_组织关系_。 5、数据的逻辑结构是指数据之间的_逻辑关系_。逻辑结构是从_逻辑关系_上描述数据,它与具体存储无关,是独立于计算机的。因此逻辑结构可以看作是从具体问题抽象出来的_数学模型_。 6、数据的__存储结构_指数据元素及其关系在计算机存储器内的表示。__存储结构_是逻辑结构在计算机里的实现,也称之为映像。 _数据的运算__是指对数据施加的操作。它定义在数据的逻辑结构之上,每种逻辑结构都有一个__数据的运算___。常用的有:查找、排序、插人、删除、更新等操作。 8、数据逻辑结构可以分为四种基本的类型,_集合_结构中的元素除了仅仅只是同属于一个___集合__,不存在什么关系。 9、数据逻辑结构的四种基本类型中,_线性结构_中的元素是一种一对一的关系,这种结构的特征是:若结构是非空集,则有且只有一个开始结点和一个终端结点,并且所有结点最多只能有一个直接前驱和一个直接后继。 10、数据逻辑结构的四种基本类型中,__树型结构_中的元素是一种一对多的关系。 11、图型结构或图状结构是一种__多对多__的关系。在这种逻辑结构中,所有结点均可以有多个前驱和多个后继。 12、有时也可将树型结构、集合和图型结构称为__非线性结构_,这样数据的逻辑结构就可以分为_线性结构_和__非线性结构__两大类。 13、__顺序存储__方式是指逻辑上相邻的结点被存储到物理上也相邻的存储单元中。这种存储结构只存储结点的数值,不存储结点之间的关系,结点之间的关系是通过存储单元的相邻关系隐含的表示出来的。 14、_链接存储_方式是种存储方法,不要求逻辑上相邻的结点在物理上也相邻,即数据元素可以存储在任意的位置上。 _稠密索引_和__稀疏索引_。若每个结点在索引表中都有

相关文档
最新文档