暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 阻塞分区上的截断

ASKTOM 2021-06-03
522

问题描述

我们有一个场景,我们正在考虑在控制表上使用分区。控制表将受到来自事务表上触发器的常规CRUD操作的打击,因此我们希望通过运行常规TRUNCATE table sql来解决碎片问题。我的问题是-

(1) 处理高使用率表中碎片的好策略是什么?

(2) 是否可以锁定表中的分区并在该分区上执行截断。

谢谢
Deepankar


专家解答

1.我不明白您认为正在发生什么碎片,为什么这很糟糕,以及截断分区将如何解决它。

请提供更多背景资料why你想这么做。什么是business你想解决的问题?

2.您可以用以下方式锁定分区:
lock table t 
  partition ( p0 ) 
  in exclusive mode;


这将阻止其他会话中该分区上的DML & DDL操作。然后,您可以使用以下方法截断分区:

alter table t
  truncate partition p0;


但是要小心!Oracle数据库在运行DDL之前发出提交。因此,截断分区将释放其上的锁定。

如果存在任何未提交DML的阻止事务,则将继续进行。这会导致截断失败并ORA-00054。这是因为未提交的DML停止截断在分区上获取所需的锁。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论