空间管理
- 概览
- Oracle Managed Files (OMF)
- 用位图进行的空闲空间管理(“本地管理”)和数据文件自动扩展
- 预先空间管理(默认阈值和服务器生成的预警)
- 空间回收(收缩段、联机重新定义表)
- 容量计划(增长报表)
- 空闲空间管理
- 概览
- 自动
- 利用本地管理的表空间启用
- 由段中的位图跟踪
- 优点
- 空间使用更加灵活
- 运行时调整
- 多进程搜索 BMB
- 位图块 (BMB),用于描述该段中数据块的空间使用情况,以树形层次结构组织
- 段的类型
- 数据段:每个非集群表都有一个数据段。所有表数据都存储在数据段的区中。对于分区表每个分区都有一个数据段。每个集群也都有一个数据段。集群中每个表的数据都存储在集群的数据段中。
- 索引段:每个索引都有一个索引段,存储其所有数据。对于分区索引,每个分区都有一个索引段。
- 临时段:如果 SQL 语句需要临时数据库区域来完成执行过程,Oracle 数据库将创建一个临时段。语句完成执行后,临时段中的区将返回到系统,以备将来使用。
- 回退段:回退段用来在您不使用自动还原管理模式时支持事务处理回退和读一致性。
- 分配区
- 先在表空间中确定候选数据文件,然后搜索数据文件的位图,以便获取所需数目的相邻空闲块。如果该数据文件没有足够的相邻空闲空间,则 Oracle 数据库将在另一数据文件中查找
- 存储子句调整区的大小
-
- 通过使用 UNIFORM子句,数据库能够为表空间中创建的所有对象按您指定的统一大小(或默认大小)来创建所有区。
- 通过使用 AUTOALLOCATE 子句,数据库能够为表空间确定区大小调整策略
- 区映射:管理 > 表空间 > 查看表空间 > 显示表空间内容
- 块空间管理
- 行链接和移植
- 更新时:行的长度增加,超过了块中的可用空闲空间。
- 需要将数据存储在新块中。
- 将保留行的原始物理标识符 (ROWID)
- Oracle 数据库需要读取两个块以检索数据
预先监视
- 预先表空间监视
- 表空间的可用磁盘空间变低,以及特定段空间不足时,系统会通过数据库预警通知您。然后您就可以为表空间提供更多磁盘空间,以避免空间不足的情况发生
- 收集的信息被存储在自动工作量资料档案库 (AWR) 中,用于执行增长趋势分析以及计划数据库的容量
- 阈值和解决空间问题
- 解决空间问题
- 添加数据文件或调整数据文件大小
- 设置 AUTOEXTEND ON
- 收缩对象
- 减少 UNDO_RETENTION
- 检查临时表空间中是否存在长时间运行的查询
- 监视表空间的空间使用量
- 只读表空间和脱机表空间:不要设置预警
- 临时表空间:阈值对应于会话当前使用的空间
- 还原表空间:阈值对应于活动区和未到期区所使用的空间
- 可自动扩展的文件:阈值基于最大文件大小
段指导和段收缩
- 收缩段
- 执行压缩:在压缩期间进行 DML 操作和查询
-
ALTER TABLE employees SHRINK SPACE COMPACT; --COMPACT 收缩操作的进度将保存在相应
段的位图块中,下次在同一个段上执行收缩操作时,无需
COMPACT 子句即可完成第二阶段 - 调整高水位标记 (HWM),并释放未使用的空间
- 收缩操作的结果
- 改善性能和空间使用情况
- 维护索引
- 不执行触发器
- 可以减少移植行数
- 建议在 IOT 上重建二级索引
- 使用 ASSM 回收空间
- 联机原地操作
- 只适用于位于 ASSM 表空间中的段
- 必须为按堆组织的段启用 ROW MOVEMENT
- 候选段类型包括
- 按堆组织的表和索引表
- 索引
- 分区和子分区
- 实体化视图和实体化视图日志
- 段指导
- 指导中心-->段指导
- 数据库控制和段收缩
- 管理-->表-->收缩段
- 使用 SQL 收缩段
-
ALTER TABLE employees ENABLE ROW MOVEMENT; --启动行移动
ALTER TABLE employees SHRINK SPACE CASCADE; --使用SHRINK SPACE 子句可以收缩段中的空间。如果指定了CASCADE,则收缩行为将级联到所有支持收缩操作的从属段
ALTER TABLE employees MODIFY LOB(resume) (SHRINK SPACE) --收缩 LOB 段,并假设RESUME 列为 CLOB
ALTER TABLE employees OVERFLOW SHRINK SPACE; --收缩 IOT 溢出段,此段属于EMPLOYEES 表
可恢复的分配
- 管理可恢复的空间分配
- 使用可恢复的语句,可以挂起大型操作,而不是收到错误
- 使用可恢复的语句,可以在挂起操作时解决问题,然后继续进行,无须重新开始
- 在下列条件下,将挂起可恢复的语句
-
- 空间不足
- 达到了最大区数
- 超出了空间限额
- 使用可恢复的空间分配
- 发出 ALTER SESSION ENABLE RESUMABLE 命令。
- 用ALTER SESSION 或 ALTER SYSTEM语句将RESUMABLE_TIMEOUT 初始化参数设置为非零值。
- 恢复挂起的语句
- 示例:
- INSERT语句遇到错误,声称表已满
- 挂起 INSERT语句,并且不向客户机传递任何错误
- 或者,执行一个 AFTER SUSPEND 触发器
- 或者,激活 SQLERRROR 异常错误以中止语句
- 如果语句未中止,并将空闲空间成功添加到表中,则 INSERT 语句将恢复执行
可移动表空间
- 移动表空间:可跨平台移动的表空间
- 最低兼容级别
- 源数据库和目标数据库都必须将 COMPATIBLE设置为 10.0.0 或更高。
- 数据文件头可以识别平台
- 在移动前,请确保所有只读文件和脱机文件可以识别平台
- 可移动表空间过程
-
SELECT tp.endian_format
FROM v$transportable_platform tp,
v$database d
WHERE tp.platform_name = d.platform_name;
可移动数据库
- 移动数据库:可以轻松地从数据仓库环境向数据集市(数据集市通常在较小的平台上运行)分发数据
- 数据库移动过程
-
- 源系统转换
- 目标系统转换
- 注意事项
- 在目标平台上创建口令文件。
- 移动在源数据库中使用的 BFILE。
- 生成的 pfile 和移动脚本使用 OMF。
- 使用 DBNEWID 来更改 DBID。