问题描述
嗨,团队,
请在下面的问题上提出建议。
我面临ORA-01653: 无法在表空间Z中通过Y扩展表X (此处X为MLOG $ view),同时更新其中一个表中的多行。下面是详细的场景。
1.有一个表空间下面使用和可用空间
已使用的mb FREEMB TotalMB
TablespaceA 6200 5800 12000
2.这个表空间有4个数据文件,低于freespace
文件id MB
1 8
2 40
3 1700.9375
4 2983
3.我们有尺寸为5788mb的表X
现在,当我更新与mlog $ view相关联的表X时,该视图也正在更新。我正在更新表中的每一行,表中大约有15Cr行。更新此时,我面临ORA-01653: 无法扩展表X。
但是如果我们看到,表空间上有5800的自由空间。如果我们假设整个表正在更新,则mlog $将等于或小于5788 MB的表大小。我不明白为什么会出现此错误。
请在下面的问题上提出建议。
我面临ORA-01653: 无法在表空间Z中通过Y扩展表X (此处X为MLOG $ view),同时更新其中一个表中的多行。下面是详细的场景。
1.有一个表空间下面使用和可用空间
已使用的mb FREEMB TotalMB
TablespaceA 6200 5800 12000
2.这个表空间有4个数据文件,低于freespace
文件id MB
1 8
2 40
3 1700.9375
4 2983
3.我们有尺寸为5788mb的表X
现在,当我更新与mlog $ view相关联的表X时,该视图也正在更新。我正在更新表中的每一行,表中大约有15Cr行。更新此时,我面临ORA-01653: 无法扩展表X。
但是如果我们看到,表空间上有5800的自由空间。如果我们假设整个表正在更新,则mlog $将等于或小于5788 MB的表大小。我不明白为什么会出现此错误。
专家解答
当您在带有MV日志的表中插入/更新/删除行时,Oracle数据库将更改写入日志。但这不仅仅是列值。还有一大堆其他元数据捕获:
如果你有5788Mb的空闲,那就是 (5788*1024) 6,069,157,888字节。我假设15Cr是指150,000,000。如果是这样,这意味着MV日志中每一行的最大大小可以是:
存储以上所有内容并不多。您将仅使用rowid,XID,sequence和snaptime就可以接近这一点,更不用说表格列了!所以你得到这个错误对我来说并不奇怪...
如果要更新表中的所有行,则必须在之后有效地完全刷新MV。那么您真的需要进行此操作的MV日志吗?你可以放下它,然后重新创建吗?
或为您的表空间分配更多空间?;)
create table plch_invoices ( invoice_id int not null primary key, customer_id int not null, invoice_datetime date not null ); -- create materialized view log on plch_invoices with rowid, sequence (customer_id, invoice_datetime); create materialized view plch_invoice_mv enable query rewrite as select count(*) from plch_invoices i; insert into plch_invoices select rownum, rownum, sysdate+(rownum/100) from dual connect by level <= 10; commit; select * from mlog$_plch_invoices; CUSTOMER_ID INVOICE_DATETIME M_ROW$$ SEQUENCE$$ SNAPTIME$$ DMLTYPE$$ OLD_NEW$$ CHANGE_VECTOR$$ XID$$ 1 06-MAR-2017 05:41:55 AAAfmdAAdAAAARXAAA 11,001 01-JAN-4000 00:00:00 I N FE 281,474,976,718,223 2 06-MAR-2017 05:56:19 AAAfmdAAdAAAARXAAB 11,002 01-JAN-4000 00:00:00 I N FE 281,474,976,718,223 3 06-MAR-2017 06:10:43 AAAfmdAAdAAAARXAAC 11,003 01-JAN-4000 00:00:00 I N FE 281,474,976,718,223 4 06-MAR-2017 06:25:07 AAAfmdAAdAAAARXAAD 11,004 01-JAN-4000 00:00:00 I N FE 281,474,976,718,223 5 06-MAR-2017 06:39:31 AAAfmdAAdAAAARXAAE 11,005 01-JAN-4000 00:00:00 I N FE 281,474,976,718,223 6 06-MAR-2017 06:53:55 AAAfmdAAdAAAARXAAF 11,006 01-JAN-4000 00:00:00 I N FE 281,474,976,718,223 7 06-MAR-2017 07:08:19 AAAfmdAAdAAAARXAAG 11,007 01-JAN-4000 00:00:00 I N FE 281,474,976,718,223 8 06-MAR-2017 07:22:43 AAAfmdAAdAAAARXAAH 11,008 01-JAN-4000 00:00:00 I N FE 281,474,976,718,223 9 06-MAR-2017 07:37:07 AAAfmdAAdAAAARXAAI 11,009 01-JAN-4000 00:00:00 I N FE 281,474,976,718,223 10 06-MAR-2017 07:51:31 AAAfmdAAdAAAARXAAJ 11,010 01-JAN-4000 00:00:00 I N FE 281,474,976,718,223复制
如果你有5788Mb的空闲,那就是 (5788*1024) 6,069,157,888字节。我假设15Cr是指150,000,000。如果是这样,这意味着MV日志中每一行的最大大小可以是:
6,069,157,888 / 150,000,000 ~ 40 bytes复制
存储以上所有内容并不多。您将仅使用rowid,XID,sequence和snaptime就可以接近这一点,更不用说表格列了!所以你得到这个错误对我来说并不奇怪...
如果要更新表中的所有行,则必须在之后有效地完全刷新MV。那么您真的需要进行此操作的MV日志吗?你可以放下它,然后重新创建吗?
或为您的表空间分配更多空间?;)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle DataGuard高可用性解决方案详解
孙莹
428次阅读
2025-03-26 23:27:33
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
400次阅读
2025-04-15 17:24:06
墨天轮个人数说知识点合集
JiekeXu
368次阅读
2025-04-01 15:56:03
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
358次阅读
2025-04-08 09:12:48
Oracle SQL 执行计划分析与优化指南
Digital Observer
332次阅读
2025-04-01 11:08:44
Oracle 19c RAC更换IP实战,运维必看!
szrsu
300次阅读
2025-04-08 23:57:08
风口浪尖!诚通证券扩容采购Oracle 793万...
Roger的数据库专栏
293次阅读
2025-03-24 09:42:53
切换Oracle归档路径后,不能正常删除原归档路径上的归档文件
dbaking
288次阅读
2025-03-19 14:41:51
oracle定时任务常用攻略
virvle
286次阅读
2025-03-25 16:05:19
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
283次阅读
2025-04-15 14:48:05