740 likes | 950 Views
第九讲 数据库逻辑结构. 本章学习目标 Oracle 对逻辑存储结构和物理存储结构的管理是分别进行的, Oracle 的逻辑存储结构能够适用于不同的操作系统平台和硬件平台。本章介绍 Oracle 数据库的逻辑结构,即表空间、扩展区、段和数据块的概念及管理方法。. 学习内容. 9.1 数据库逻辑结构概述 9.2 数据块 9.3 扩展区 9.4 段 9.5 表空间及其管理. 9.1 数据库逻辑结构概述. 9.1.1 逻辑结构 9.1.2 逻辑结构与物理结构的对应关系. 表空间. 段. 数据块. 扩展区. 数据文件. 数据库.
E N D
第九讲 数据库逻辑结构 本章学习目标 Oracle对逻辑存储结构和物理存储结构的管理是分别进行的,Oracle的逻辑存储结构能够适用于不同的操作系统平台和硬件平台。本章介绍Oracle数据库的逻辑结构,即表空间、扩展区、段和数据块的概念及管理方法。
学习内容 • 9.1 数据库逻辑结构概述 • 9.2 数据块 • 9.3 扩展区 • 9.4 段 • 9.5 表空间及其管理
9.1 数据库逻辑结构概述 • 9.1.1 逻辑结构 • 9.1.2 逻辑结构与物理结构的对应关系
表空间 段 数据块 扩展区 数据文件 数据库
数据存储单位 • 数据块 最小的逻辑存储单位,由多个操作系统块组成 • 扩展区 一组连续的数据块 • 段 有共同结构的一个或几个扩展区,数据对象(Table, Index, 等)以 段的形式存在
表空间 逻辑上用来保存各种段,物理上由多个操作系统文件组成。 • 文件 属于某个表空间的物理文件
逻辑结构与物理结构的对应关系 数据库 表空间 数据文件 段 扩展区 操作系统块 数据块
从物理上看,一个数据库是由一到多个数据文件(data file)组成;一个数据文件是由一到多个操作系统块(os block)组成。 • 从逻辑和物理存储结构的联系来看,一个表空间是由多个数据文件组成,一个数据文件是由多个扩展区组成,一个数据库块是由多个操作系统块组成。 • 一个数据库块是Oracle最小的逻辑存储单位,一个操作系统块是进行I/O的最小单位。
9.2 数据块 • 9.2.1 数据块的概念与结构 • 9.2.2 块空间的使用及存储参数 • 9.2.3 行链接和行迁移
数据块 (BLOCK) 9.2.1 数据块的概念与结构 块管理数据 空闲空间 行数据
块管理数据的结构 包含一般的块信息,如块的地址,所属段的类型等 块头 包含块中存储数据所属表的信息 表目录 包含数据区每行数据的地址 行目录
数据块概念小结 • 数据块为Oracle分配、读或写的最小的存储单元,又称逻辑块或ORACLE块。 • 一个数据块对应一个或多个从现有数据文件中分配的操作系统块,每个Oracle数据库的数据块大小由初始化参数db_block_size在创建数据库时指定。 • 数据块的大小应该是操作系统块的整数倍,数据块大小的最大值取决于操作系统
空闲空间 空闲空间 行数据 块管理数据 PCTFREE = 20% PCTUSED = 40%
PCTFREE=20 PCTUSED=40 Inserts Inserts 80% 1 2 80% Inserts Inserts 40% 3 4 块空间的使用
PCTFREE PCTFREE参数给出保留空间的最小百分比,用于行的UPDATE操作。在遭遇到PCTFREE后,这块被填满且不能进行INSERT操作。
PCTFREE的影响 1、可把块填 得较满 2、易引起行迁移 低 PCTFREE 1、剩下多的空间给以后修改用 2、需更多的块存数据 3、减少行链和重组数据的代价 高
PCTUSED 当块中数据加上头和目录数据的百分比小于PCTUSED时,可以插入数据。
数据块(Block)的存储参数 默认值:Pctfree 10 Pctfree, Pctused互相消涨, 其和不超过100Pctused 40 Inittrans 1或 2 单一块中最初活动的事务数Maxtrans 255 单一块中最大事务数 常见的几种分配方案: 大量Update操作 Pcrfree 20 Pctused 40 大量Insert, Select, 少量Update Pctfree 5 Pctused 60 体积大的表, Select较多 Pctfree 5 Pctused 90 仅仅用于查询的 Pctfree 0
9.2.3 行链接和行迁移 • 行链接发生于插入时 行太长,数据块放不下,该行数据存放在该段的多个数据块中 • 行迁移发生于修改时 修改后行变长,空闲空间不够,该行数据被整个迁移到另一个数据块中。
行迁移 After update Before update
9. 3 扩展区 • 9.3.1 扩展区的概念 • 9.3.2 扩展区的分配和释放 • 9.3.3 扩展区的参数设置
9.3.1 扩展区的概念 • 一个区是一组连续的Oracle块。 • Oracle按区向段分配空间,当段创建后,它至少由一个区组成。区是Oracle存储分配的最小单位。 • 一个区不能跨越数据文件,一个区只能惟一地属于一个数据文件。
9.3.2 扩展区的分配和释放 • 下述情况下向段分配扩展区 • 段创建时 • 扩展时 • 下述情况下从段释放扩展区 + 删除对象时 (Drop) + 清空数据时(Truncated) + 自动改变大小时 (仅对回滚段)
9.3.3 扩展区的参数设置 initial 最初分配的空间 next 下一步分配的空间数 maxextents 段生成时最大分配extent数 Minextents 段生成时最小分配extent数 pctincrease 增长率 optimal 尽量设小 (缺省为空,仅用 回滚段) 决定extent的参数
表空间、表、索引、分区、快照、快照日志 的存储参数 默认值 最小值Initial 5个数据块 2个数据块Next 5个数据块 1个数据块Minextents 1 1Maxextents 根据数据块大小而定 1Pctincrease 50 0 推荐使用:大小一致的, 增长率较低存储分配 initial = next表空间的 pctincrease 1其它数据对象 pctincrease 0
存储参数的设定规则 • 对象级的存储参数设置值覆盖表空间级的设置 • 未在对象级设置存储参数,由表空间级的设置决定 • 未在表空间级设置存储参数,由Oracle数据库级参数设置决定 • 存储参数改变后,新的选项只针对未分配的extents有效。
9. 4 段 • 9.4.1 段的概念 • 9.4.2 段的分类 • 9.4.3 查询段信息
9.4.1 段的概念 • 段是为表空间内特定逻辑存储结构分配的空间。例如分配给表的所有存储空间是一个段。 • 段无法跨越表空间,但是段可以跨越属于一个表空间的多个数据文件。 • 每个段由一个或多个区组成。 • DBA_SEGMENTS中保存段的有关信息
9.4.2 段的分类 • 数据段 一个数据段可存放一个未经分区的表或聚簇,也可以存放表的一个分区。 • 索引段 保存索引中的索引条目 • 临时段 存放排序操作中生成的临时表的数据 • 回滚段 存放事务所修改数据的旧值,当进行回退操作或实例失败时使用。
9.4.3 查询段信息 • DBA_SEGMENTS • 一般信息 • OWNERSEGMENT_NAME • SEGMENT_TYPE • TABLESPACE_NAME • 大小 • EXTENTS • BLOCKS • 存储参数 • INITIAL_EXTENT • NEXT_EXTENT • MIN_EXTENTS • MAX_EXTENTS • PCT_INCREASE
获得已用子段的信息 • DBA_EXTENTS • 标识信息 • OWNER • SEGMENT_NAME • EXTENT_ID • 位置和大小 • TABLESPACE_NAME • FILE_ID • BLOCK_ID(该区的第一个块的块号) • BLOCKS
检查空闲子段的信息 • DBA_FREE_SPACE • 位置和大小 • TABLESPACE_NAME • FILE_ID • BLOCK_ID(该文件自由段的第一个块号) • BLOCKS (该自由段占用的块数)
9. 5 表空间及其管理 • 9.5.1 表空间的概念 • 9.5.2 表空间分类 • 9.5.3 表空间的存储管理方式 • 9.5.4 表空间管理
9.5.1 表空间的概念 • 从逻辑上看,数据库中的数据存储在表空间中,而从物理上看,则是存储在与表空间对应的数据文件中。 • 在一个表空间中可以有多个同它有关联的数据文件,但一个数据文件只能属于一个表空间,表空间的大小是它所对应的数据文件大小的总和。
9.5.2 表空间分类 • 系统表空间 在创建数据库时,Oracle将会创建SYSTEM表空间。所有数据词典对象都存储在这一表空间中。一般不放用户的数据,但是用户脚本,如过程,函数,包等却是保存在数据字典中的。
非系统表空间 (1) 临时表空间:存放用户的排序等临时 数据,临时段占有的空间会在下次系统启动的时候全部被释放 (2) 回滚段表空间:临时存放修改前的数据 (3) 用户表空间:一般是由用户建立,来存取用户数据(包括索引)的表空间。
多个表空间的优势 • 将数据字典与用户数据分离开来,避免由于字典对象和用户对象保存在同一个数据文件中而产生的I/O冲突。 • 将回退数据与用户数据分离开来,避免由于硬盘损坏而导致永久性的数据丢失。 • 将表空间的数据文件分散保存到不同的硬盘上,平均分布物理I/O操作。
能够将某个表空间设置为脱机状态或联机状态,以便对数据库的一部分进行备份和恢复。能够将某个表空间设置为脱机状态或联机状态,以便对数据库的一部分进行备份和恢复。 • 能够将某个表空间设置为只读状态,从而将数据库的一部分设置为只读状态。 • 能够为某种特殊用途专门设置一个表空间,比如临时表空间等,以优化表空间的使用效率。 • 能够更加灵活地为用户设置表空间限额
9.5.3 表空间的存储管理方式 • 字典管理方式 表空间的扩展区管理信息保存在system表空间的数据字典中,称为“字典管理方式”。 • 本地管理方式 在本地管理的表空间中,每个数据文件内都维护一个位图,以了解该数据文件内块的空闲或使用状态,被称为“本地管理方式”。
9.5.4 表空间管理 • 9.5.4.1 创建表空间 • 9.5.4.2 修改表空间 • 9.5.4.3 删除表空间 • 9.5.4.4 表空间及数据文件信息查询 • 9.5.4.5 注意问题
9.5.4.1 创建表空间 • 创建字典管理表空间 • 创建本地管理表空间 • 创建临时表空间
创建字典管理表空间 CREATE TABLESPACE testspace DATAFILE ‘f:\orcl\testspace1.dbf' SIZE 100M , ‘f:\orcl\testspace2.dbf' SIZE 100M DEFAULT STORAGE (INITIAL 128K NEXT 128K MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0) EXTENT MANAGEMENT DICTIONARY;
创建本地管理表空间 • 不能指定create tablespace的default storage和minimum extent子句。 • 所有段的初始区和后续区可以具有统一的大小(UNIFORM),也可以由Oracle来自动决定后续区的大小和增加方式(AUTOALLOCATE)。 CREATE TABLESPACE user_data DATAFILE ‘f:\orcl\user_data_01.dbf' SIZE 500M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 10M;
创建临时表空间 如果没有为数据库用户指定一个专门的临时表空间,这些临时数据在默认情况下将存储在system表空间中,这样做的结果是会占用system表空间的存储空间,并且频繁地分配和释放临时段会在system表空间中产生大量的存储碎片,从而影响整个数据库的性能。为了避免在system表空间内存储临时数据,DBA应当在数据库中创建一个专门用来存储临时数据的临时表空间,
创建字典管理的临时表空间 create tablespace temp datafile ‘f:\orcl\temp01.dbf’ size 300M default storage (initial 2M next 2M pctincrease 0 maxextents unlimited) extent management dictionary temporary;
创建本地管理的临时表空间 create temporary tablespace temp tempfile ‘f:\orcl\temp_01.dbf’ size 500M extent management local uniform size 10M;
9.5.4.2 修改表空间 • 改变表空间存储设置 • 改变表空间状态 • 改变表空间尺寸 • 重定位数据文件
改变表空间存储设置 • 使用命令alter tablespace命令来改变表空间的缺省存储定义 Alter TABLESPACE tablespace { minimum extent integer [k|m] | default storage_clause} 例1:将表空间中区的最小尺寸定义为2M alter tablespace app_data minimum extent 2m;
例2:将表空间的缺省存储参数定义为第一个区大小2M,第二个区大小2M,每个段最多分配999个区例2:将表空间的缺省存储参数定义为第一个区大小2M,第二个区大小2M,每个段最多分配999个区 alter tablespace app_data default storage{ initial 2m next 2m maxextents 999);