lob的retetion有独立的设置,在修改undo_rentention后,如果没有修改lob retention,还是会遇到ORA-01555等报错。根据 (1507116.1)方式修改:
select max(maxquerylen) from v$undostat; SQL>ALTER SYSTEM SET UNDO_RETENTION = 16500 scope=both sid='*'; SQL> alter table <SCHEMA_NAME>.<TABLE_NAME> modify lob(<LOB_COLUMN_NAME>) (pctversion 5); SQL> alter table <SCHEMA_NAME>.<TABLE_NAME> modify lob(<LOB_COLUMN_NAME>) (retention); select retention from dba_lobs where owner='<SCHEMA_NAME>' and table_name='<TABLE_NAME>'; ##注意 1、versions =< 10.2.0.5的版本,可能需要重启才会生效。 2、文档中没有提示,但必须ASSM管理方式才支持修改retention。MSSM只能使用pctversion方式管理lob undo。 3、pctverseion 与 lob retention是互斥的,只能选择一个。pctversion是预留lob所在表空间的百分比保留UNDO。比如pctversion 5,表空间100g,那么会预留5G(100*0.05)数据保留UNDO。这部分预留空间在没有使用完前不会被覆盖。
复制
普通表按照上述方式是没有问题(测试版本10.2.0.4、11.2.0.4)
查看T11表lob retention是16500,现在按照上述方案改为900 SQL> select pctversion,retention from dba_lobs where owner='T1' and table_name='T11'; PCTVERSION RETENTION ---------- ---------- 16500 ALTER SYSTEM SET UNDO_RETENTION = 900 scope=both; alter table t1.t11 modify lob(c2)(pctversion 5); select pctversion,retention from dba_lobs where owner='T1' and table_name='T11'; PCTVERSION RETENTION ---------- ---------- 5 alter table t1.t11 modify lob(c2)(retention); select pctversion,retention from dba_lobs where owner='T1' and table_name='T11'; PCTVERSION RETENTION ---------- ---------- 900
复制
分区表(不支持10G)
建立分区表: CREATE TABLE t1.list( dname VARCHAR2(10), DATA blob )PARTITION BY LIST(dname) ( PARTITION part01 VALUES('XXXX'), PARTITION part02 VALUES('YYYY') ); 默认使用pctversion: SQL> select pctversion,retention from dba_lobs where owner='T1' and table_name='LIST_T'; PCTVERSION RETENTION ---------- ---------- 5 SQL> show parameter undo_retention NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_retention integer 16500 SQL> ALTER SYSTEM SET UNDO_RETENTION = 900 scope=both sid='*'; System altered. SQL> show parameter undo_retention NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_retention integer 900 SQL> alter table t1.list_t modify lob(data)(retention); Table altered. SQL> select pctversion,retention from dba_lobs where owner='T1' and table_name='LIST_T'; PCTVERSION RETENTION ---------- ---------- 5 修改之后好像没有生效,retention为null。11g开始新增字段DEF_RETENTION辅助确认如下(仅支持11g): SQL> select DEF_RETENTION from dba_part_lobs where table_name='LIST_T'; DEF_RET ------- YES 再次修改为pctversion,确认DEF_RETENTION 禁用 SQL> alter table t1.list_t modify lob(data)(pctversion 5); Table altered. SQL> select DEF_RETENTION from dba_part_lobs where table_name='LIST_T'; DEF_RET ------- NO 分区表的修改灵活是确实很差。普通表可以在修改为lob retention后,再将系统undo_retention参数改小,避免空间浪费。但在分区表中,无法单独设置lob 的retention,只能与系统undo_retention参数保持,所能控制的只有一个开关。
复制
最后修改时间:2021-08-16 11:00:22
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
云和恩墨交付战队牛
8月前

评论
相关阅读
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
Lucifer三思而后行
939次阅读
2025-03-17 11:33:53
Oracle DataGuard高可用性解决方案详解
孙莹
399次阅读
2025-03-26 23:27:33
墨天轮个人数说知识点合集
JiekeXu
342次阅读
2025-04-01 15:56:03
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
333次阅读
2025-04-08 09:12:48
Oracle SQL 执行计划分析与优化指南
Digital Observer
303次阅读
2025-04-01 11:08:44
风口浪尖!诚通证券扩容采购Oracle 793万...
Roger的数据库专栏
282次阅读
2025-03-24 09:42:53
Oracle 19c RAC更换IP实战,运维必看!
szrsu
279次阅读
2025-04-08 23:57:08
切换Oracle归档路径后,不能正常删除原归档路径上的归档文件
dbaking
278次阅读
2025-03-19 14:41:51
oracle定时任务常用攻略
virvle
272次阅读
2025-03-25 16:05:19
Oracle NetSuite 客户说|健合(H&H)集团部署 Oracle NetSuite,全面提升全球运营效率
甲骨文中国
254次阅读
2025-03-28 15:00:30