上一篇
"王工!生产库突然报错,批量导入直接中断了!" 凌晨2点的告警电话里,新人运维小张的声音都在发抖,监控大屏上刺眼的ORA-19921就像午夜凶铃——这个月第三次了!
作为DBA的老司机都懂,当看到这个报错时,意味着:
ORA-19921: 超出表空间最大行数限制 原因:表/分区已达到MAXROWS参数设置的上限
这个报错其实像高速公路的限高杆 🚧,Oracle用MAXROWS参数给表/分区设置了"最多能装多少行数据"的硬性天花板,常见于:
-- 远程连接后立即执行(建议开两个会话) SELECT owner, table_name, partition_name, max_rows FROM dba_tab_partitions WHERE max_rows > 0 AND num_rows >= max_rows;
-- 示例:给SALES_DATA分区紧急扩容(建议先确认业务影响) ALTER TABLE sales MODIFY PARTITION p_2025_08 MAXROWS 20000000; -- 根据实际情况调整
# 如果是批量任务中断,先转移剩余数据到临时表 expdp system/password tables=orders partition=p_2025_08:1000001-2000000
-- 方案A:启用自动分区扩展(Oracle 21c+) ALTER TABLE sales SET STORAGE (AUTOEXTEND ON NEXT 1G); -- 方案B:添加新分区(传统方案) ALTER TABLE sales ADD PARTITION p_2025_09 VALUES LESS THAN (TO_DATE('2025-10-01','YYYY-MM-DD'));
-- 创建监控脚本(建议保存为daily_check.sql) SELECT table_name, ROUND(num_rows/max_rows*100,2) as usage_rate FROM dba_tables WHERE max_rows > 0 AND num_rows/max_rows > 0.7;
SELECT FOR UPDATE
锁定分区,避免并发修改本文基于Oracle 19c/21c环境验证(2025-08测试数据),12c及以下版本部分语法可能需要调整,遇到复杂分区情况时,DBMS_REDEFINITION
在线重定义才是终极武器。
💼 真实案例:某电商大促期间,订单表MAXROWS设置过小导致支付失败,通过临时扩容+异步迁移组合拳,15分钟恢复业务,后续改用LIST自动分区彻底解决问题。
下次遇到ORA-19921时,记得先深呼吸 😮💨,这套组合拳足够帮你从手忙脚乱升级到从容应对!
本文由 镇丰雅 于2025-08-09发表在【云服务器提供商】,文中图片由(镇丰雅)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://up.7tqx.com/wenda/574258.html
发表评论