在线设计网站源码,云南新闻最新消息今天,网站栏目建设调研,爱情动做网站推荐Oracle逻辑存储结构,主要描述oracle 数据库内部数据的组织和管理方式#xff0c;即在数据库管理系统的层面中如何组织和管理数据#xff0c;与操作系统没有关系。逻辑存储结构时候物理存储机构的抽象体现#xff0c;是不可见的#xff0c;可以通过查询数据库数据字典了解逻… Oracle逻辑存储结构,主要描述oracle 数据库内部数据的组织和管理方式即在数据库管理系统的层面中如何组织和管理数据与操作系统没有关系。逻辑存储结构时候物理存储机构的抽象体现是不可见的可以通过查询数据库数据字典了解逻辑结构信息。 Oracle数据库的存储逻辑结构主要由表空间(Tasblespace)、段(Segment)、区(Extent)、数据块(Data Block)4个部分组成。其中块是最基本的存储单元块组成区、区组成段、段组成表空间最终由段组成数据库。 Oracle数据库逻辑结构图如下 1 表空间 一个数据库被分成一个个的逻辑单元那么这些逻辑单元就叫做表空间。表空间有一个或多个数据文件组成一个数据库从逻辑上又由一个或多个表空间组成它用于存放数据库对象如表、索引等。而表空间的大小则等于组成这个表空间的所有数据文件大小之和。 每个数据库都对应的默认表空间包括一个系统表空间(SYSTEM)、辅助表空间(SYSAUX)、一个用户表空间(USERS)以及用于应用程序、索引和另外的数据结构的其他空间组成。 SYSTEM Tablespace用于存储Oracle内部数据字典 SYSAUX Tablespace用于存储辅助内部对象 USERS Tablespace用于存储用户对象
2 段 数据库中的表在表空间中都由一块单独的磁盘空间区域称之为段。每一段依次在表空间中有一块初始的磁盘空间区域成为初始盘区。当段使用完对应的空间时磁盘空间的另一个单独区域——下一盘区将被启用。如果这一块区域也被使用完那么还有另一盘区被启用。这个过程会跟随每一个表持续执行直到整个表空间填充满为止。 数据库中的表由一个或多个的段组成而普通表由一个段组成分区表则由多个段组成 一个段有一系列的区组成段是存放数据的逻辑存储单元段的分类包括数据段、索引段、临时段和回滚段
#查询Oracle数据库段类型
SQL select distinct segment_type from dba_segments;SEGMENT_TYPE
------------------
LOBINDEX
INDEX PARTITION
NESTED TABLE
TABLE PARTITION
ROLLBACK
LOB PARTITION
LOBSEGMENT
TABLE
INDEX
CLUSTER
TYPE2 UNDO 2.1 数据段
Data Segment。 数据段用于存放数据。可以存储普通表、聚簇表、分区表。 普通表(Table)这是最常见的段类型普通表没有分区则每个表有一个类型为Table的段 聚簇表(Cluster Table)每个Cluster有一个Cluster段一个Cluster中可以存储一个或多个表 分区表(Patition Table)分区表中的一个分区
2.2 索引段
Index Segment 这是除了Table Segment之外最常见的段类型表的普通索引没有分区则每个索引有一个类型为Index的段用户可以使用Create Index语句为索引或索引的分区创建索引段。
非分区索引nonpartitioned index使用一个索引段index segment来容纳其数据分区索引partitioned index每个分区使用一个索引段来容纳其数据。
2.3 临时段
Temporary Segment临时段用于存放临时数据。在进行数据查询时会使用到临时段。临时段由Oracle数据库自动创建和维护。例如Oracle在进行数据排序时就需要使用临时段当排序操作可以在内存中执行或Oracle设法利用索引就执行时就不必创建临时段。如果Oracle使用到数据库临时段时则表示数据库性能在降低的征兆数据库管理员则应想法时相关的数据操作尽量在内存中进行。需要使用临时段的操作
Create Iindex Select ... Order by Select Distinct ... Select ... group by Select . . . union Select ... InsersectSelect ... Minus
2.4 回滚段
RollBack Segment回滚段用于保存回滚条目用户可以撤销对数据的修改ROLLBACK (Oracle 8i及以前的回滚段 )和TYPE2 UNDO(9i及以后的“撤销段”)
3 区 区是数据库的一个逻辑存储单元它由连续的数据块组成区是一个连续的存储空间当段中的空间耗尽时数据库将分配一个新的区个这个段。块组成区区组成段。
3.1区的分配 当数据库创建一个表时Oracle会自动给该表的数据段分配一个初始区即使该表中没有存储数据也会分配。随着数据的插入分配的初始区空间被填满时Oracle会再分配一个区给这个数据段后续新分配的区(非初始化区)叫做递增区若一个递增区用完Oracle再次进行分配新的。
3.2区的分配机制 Oracle利用表空间级的存储参数来进行空间的分配关于存储参数的相关概念见下集分解。
3.3区的空间释放 通常分配给一个段的区所占用的空间不会被释放除非将这些段相关的的对象给删除。也可以通过以下方式回收分配的区空间
Truncate Drop Storage该命令会回收分配给一个段的区Alter Table ..... Deallocate UnUsed 该命令会回收已分配给一个段但还未使用的区
3.4区的管理方式
字典管理Dictionary Managed Tablespace 通过数据字典管理区本地管理Locally Managed Tablespace 通过位图管理区。(推荐使用的区的管理方式)
4 数据块 块是Oracle的最小存储单位数据存放到块中一个块占用相应的存储空间。 Oracle在每次请求数据时都是以块为单位所以块是Oracle读写数据的最小单位或者最基本的单位。Oracle每一次数据请求都是块的整数倍若请求数据量不足一块时也会读取整个块。块的标准大小是由初始化参数DB_BLOCK_SIZE设置。 4.1 数据块的特征
数据块 block 是 Oracle 最小的存储单元也是 最小的 I/O 单元有五种大小2KB、4KB、8KB默认、16KB、32KB 必须是倍数增加不可更改除非重新创建数据库 4.2 数据块的常用命令
数据块大小show parameter db_block_size 8192 8 * 1024缓存大小 show parameter db_cache_size一次从物理文件中读取数据块的数量 show parameter db_file_multiblock_read_count; 找到转储的文件命令行show parameter dump;
SQL show parameter db_block_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 8192
SQL show parameter db_cache_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_cache_size big integer 0SQL show parameter db_file_multiblock_read_count;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_multiblock_read_count integer 128SQL show parameter dump;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
background_core_dump string partial
background_dump_dest string f:\app\diag\rdbms\lsxddb\lsxddb\trace
core_dump_dest string f:\app\diag\rdbms\lsxddb\lsxddb\cdump
max_dump_file_size string unlimited
shadow_core_dump string none
user_dump_dest string f:\app\diag\rdbms\lsxddb\lsxddb\traceSQL 4.3 数据块的格式 块中存放的数据和索引无论是那种类型的数据块的格式都是相同的块的组成包括块头、表目录、行目录、空余空间和行数据五部分组成如下图 头部信息区(Overhead)通常块头、表目录、行目录这三部分合称为头部信息区它不存放数据存放的是整个块的信息。头部信息区的大小是可变的一般来说其大小介于84字节到107字节之间。块头(Header)存放块的基本信息如块的物理地址、块所属的段的类型(属于数据段还是索引段)表目录(Table Directoy)存放表的信息若一些表是数据被存放在这个块中那边该表的相关信息将被存放在表目录中行目录(Row Directory)若块中有行数据存在则这些行的信息被记录在行目录中包括行的地址等行数据(Row Data)真正存放表数据和索引数据的地方这部分空间是已被数据行占用的空间空余空间(Free Space)也称为自由空间是一个块中为使用的区域这些区域用于新行的插入和已经存在的行的更新 4.4 自由空间的使用 当往数据中Insert数据时块中的自由空间会减少当对块中已经存在的行进行update进行数据修改(数据长度增加)时块的自由空间也会减少。 当使用delete语句删除块中的记录或者使用update语句把列的现有值更改成一个更小值的时候Oracle会释放出一部分自由空间但释放的自由空间不一定是连续的。由于合并数据块中不连续的自由空间会影响数据库的性能所以在通常情况下Oracle不会对不连续的自由空间进行合并。只有当insert或update取找不到连续的自由空间的时候Oracle才会自动合并数据块中不联系的自由空间。 4.5 行衔接和行迁移 当insert或update值超出了自由空间的大小则会发生行迁移或者行衔接。
行衔接(Row Chaining)若在往数据库中插入一行数据数据很大(或行太长)以至于一个数据块无法存下整行数据Oracle就会把一行数据分作几段存在几个数据块中这个过程就叫做行衔接。在这种情况下oracle会先把自由空间使用与该块链接的一块或多块数据块来容纳该行的数据。行衔接经常在插入比较大的行时才会发生如包含long, long row, lob等类型的数据。在这些情况下行链接是不可避免的。导致了在一次读取过程中要读取多个数据块引起I/O性能下降。 行迁移(Row Migrating)当update后的行长度大于修改前的行长度并且该数据块中的自由空间已经比较小而不能完全容纳该行的数据时就会发生行迁移。在这种情况下Oracle会将整行的数据迁移到一个新的数据块上而将该行原先的空间只放一个指针指向该行的新的位置注意即使发生了行迁移发生了行迁移的行的rowid 还是不会变化这也是行迁移会引起数据库I/O性能降低的原因。 4.6 自由空间的自动管理 使用位图来管理和跟踪数据块这种块的空间管理方式称之为自动管理其好处有
易于使用可以更好地利于空间可以对空间进行实时调整 4.7 自由空间的手动管理 数据库用户可以通过Pctfree、Pctused来调整块中空间的使用这种管理方式称之为手动管理手动管理的缺点不容易掌握、容易造成块中空间的浪费
Pctfree参数用于指定块中必须保留的最小空闲空间百分例。之所以要预留这样的空间是因为update时需要这些空间。如果update时没有空余空间Oracle就会分配一个新的块这会产生行迁移Row Migrating。Select table_name,pct_free fromuser_tablesPctused也是用于设置一个百分比当块中已使用的空间的比例小于这个百分比的时候这个块才被标识为有效状态。只有有效的块才被允许插入数据。