0

0

如何压缩分区表中的历史分区_ALTER TABLE COMPRESS与只读表空间结合

P粉602998670

P粉602998670

发布时间:2026-03-12 18:12:32

|

213人浏览过

|

来源于php中文网

原创

ALTER TABLE ... COMPRESS PARTITION 在只读表空间必然失败,因压缩需更新段元数据、数据字典及生成undo,而只读表空间禁止任何写入,触发ORA-00372或ORA-01647;正确做法是通过EXCHANGE PARTITION临时移出分区至读写表空间压缩后再换回。

不能直接对只读表空间里的分区执行 alter table ... compress —— oracle 会报 ora-00372ora-01647,因为压缩操作需要写入数据字典和段头,而只读表空间禁止任何写入。

为什么 ALTER TABLE ... COMPRESS PARTITION 在只读表空间上必然失败

压缩分区本质是重建该分区的物理存储(HCC 或 BASIC 压缩),涉及:segment 元数据更新、data dictionary 修改、以及可能的 undo 记录生成。只读表空间连 INSERT 都不允许,更别说这些后台写操作。

常见错误现象:

  • ORA-00372: file 5 cannot be modified at this time(文件属于只读表空间)
  • ORA-01647: tablespace 'HIST_RO' is read-only, cannot allocate space in it
  • ORA-14402: updating partition key column would cause a partition change(误以为是分区键问题,其实是底层权限/状态冲突)

正确路径:先切出分区 → 压缩 → 换回(不碰只读表空间)

核心思路是绕过“在只读空间里压缩”,改为把分区临时移到可写的表空间中操作。适用于已归档但尚需保留在线查询的历史分区。

实操步骤:

  • ALTER TABLE ... EXCHANGE PARTITION 把目标分区和一个空的、位于读写表空间的 STAGING 表交换(注意:STAGING 表结构、约束、统计信息需严格一致)
  • STAGING 表执行 ALTER TABLE ... COMPRESS FOR OLTP(或 QUERY LOW/HIGH
  • 再用 EXCHANGE PARTITION 换回去 —— 此时被换回的已是压缩后的数据段
  • 最后确认 USER_TAB_PARTITIONS.COMPRESSIONSEGMENT_NAME 对应的 BYTES 是否下降

注意:EXCHANGE 不移动数据,只交换数据字典指针,所以很快;但要求两个段的 TABLESPACE 必须同为读写,或都为只读 —— 所以 STAGING 表必须建在读写表空间。

Sora
Sora

Sora是OpenAI发布的一种文生视频AI大模型,可以根据文本指令创建现实和富有想象力的场景。

下载

COMPRESS 参数选错会导致白忙活

历史分区通常只读、极少更新,但不同压缩类型对后续查询性能影响差异很大,且不可逆(除非解压重做)。

  • COMPRESS FOR QUERY LOW:适合即席分析类查询,CPU 开销低,压缩率一般(~2x),SELECT 性能损失小
  • COMPRESS FOR QUERY HIGH:压缩率高(~4–5x),但解压 CPU 成本明显上升,OLAP 场景可接受,报表类查询慎用
  • COMPRESS FOR ARCHIVE LOW/HIGH:仅限 Oracle 12c+,专为冷数据设计,但要求表空间启用 INMEMORY 或使用 HEAT MAP,且 ARCHIVE 类型在只读场景下实际很少启用(兼容性差、工具链支持弱)

别用 COMPRESS FOR OLTP —— 它依赖 ITL 和行迁移优化,对只读分区无意义,反而增加块头开销。

容易被忽略的检查点:统计信息与全局索引

交换分区后,Oracle 不自动更新统计信息,也不刷新全局索引状态 —— 这会导致执行计划劣化或查询报错。

  • 交换前后都跑一次 DBMS_STATS.GATHER_TABLE_STATS,特别指定 GRANULARITY => 'PARTITION'
  • 如果表有全局索引,EXCHANGE 会使其失效(STATUS = UNUSABLE),必须手动 ALTER INDEX ... REBUILD PARTITION 或整个重建
  • 检查 USER_IND_PARTITIONS 中对应索引分区的 COMPRESSION 列 —— 它不会随表分区自动继承,需单独设置

最常漏掉的是索引状态,一上线就发现查询变慢或报 ORA-01502,回头查才发现索引没 rebuild。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

77

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

40

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

67

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

47

2025.11.27

oracle清空表数据
oracle清空表数据

当表中的数据不需要时,则应该删除该数据并释放所占用的空间。本专题为大家提供oracle清空表数据的相关文章,帮助大家解决该问题。

271

2023.08.16

Oracle中declare的使用
Oracle中declare的使用

Oracle DECLARE语句是PL/SQL编程语言中用于声明变量、常量、游标或异常的关键字。它的主要作用是在程序中定义这些对象,以便在后续的代码中使用。DECLARE语句的语法简单明了,可以根据需要声明多个对象。通过使用这些声明的对象,可以进行各种操作,如计算、查询数据库、处理异常等 。

221

2023.09.15

oracle怎么分页
oracle怎么分页

实现分页的步骤:1、使用ROWNUM进行分页查询;2、在执行查询之前进行设置分页参数;3、使用"COUNT(*)"函数来获取总行数,并使用"CEIL"函数来向上取整计算总页数;4、在外部查询中使用"WHERE"子句来筛选出特定的行号范围,以实现分页查询。想了解更多oracle怎么分页的文章,可以来阅读本专题先的文章。

245

2023.09.18

Oracle查看表操作历史记录
Oracle查看表操作历史记录

查看操作历史记录的方法:1、使用Oracle内置的审计功能,可以记录数据库中发生的各种操作,包括登录、DDL语句、DML语句等;2、使用Oracle日志文件,其中包含了数据库中发生的各种操作,可以通过查看日志文件来获取操作历史记录;3、使用Oracle的Flashback功能,可以查看数据库在某个时间点的操作历史记录;4、使用第三方工具等。本专题还提供其他查看表操作的文章,大家可以免费阅读。

464

2023.09.19

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号