问题描述
我们有一个场景,我们正在考虑在控制表上使用分区。控制表将受到来自事务表上触发器的常规CRUD操作的打击,因此我们希望通过运行常规TRUNCATE table sql来解决碎片问题。我的问题是-
(1) 处理高使用率表中碎片的好策略是什么?
(2) 是否可以锁定表中的分区并在该分区上执行截断。
谢谢
Deepankar
(1) 处理高使用率表中碎片的好策略是什么?
(2) 是否可以锁定表中的分区并在该分区上执行截断。
谢谢
Deepankar
专家解答
1.我不明白您认为正在发生什么碎片,为什么这很糟糕,以及截断分区将如何解决它。
请提供更多背景资料why你想这么做。什么是business你想解决的问题?
2.您可以用以下方式锁定分区:
这将阻止其他会话中该分区上的DML & DDL操作。然后,您可以使用以下方法截断分区:
但是要小心!Oracle数据库在运行DDL之前发出提交。因此,截断分区将释放其上的锁定。
如果存在任何未提交DML的阻止事务,则将继续进行。这会导致截断失败并ORA-00054。这是因为未提交的DML停止截断在分区上获取所需的锁。
请提供更多背景资料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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




