问题描述
团队,
您能否确认我是否可以对应用程序的关键事务表执行截断分区操作。表被应用程序和执行DML操作大量使用。
我们要截断旧分区,在进行导出备份后,我们可以在应用程序启动并运行时执行此操作吗?或者我们需要停机申请。
Oracle数据库版本11.2.0.4
问候,
阿希什
您能否确认我是否可以对应用程序的关键事务表执行截断分区操作。表被应用程序和执行DML操作大量使用。
我们要截断旧分区,在进行导出备份后,我们可以在应用程序启动并运行时执行此操作吗?或者我们需要停机申请。
Oracle数据库版本11.2.0.4
问候,
阿希什
专家解答
是的,有一个但是。
截断分区是一个阻塞DDL操作。这意味着您要截断的分区不能有未提交的事务。
我猜你只是在截断旧分区,不受数据更改的影响。在这种情况下,您可以继续进行-您可以继续对所有其他分区进行更改。
请注意,默认情况下,truncate partition将所有全局索引保持在不可用状态:
这可能也会让你的应用程序处于不可用的状态!
要避免这种情况,请添加update全局索引子句:
截断分区是一个阻塞DDL操作。这意味着您要截断的分区不能有未提交的事务。
我猜你只是在截断旧分区,不受数据更改的影响。在这种情况下,您可以继续进行-您可以继续对所有其他分区进行更改。
请注意,默认情况下,truncate partition将所有全局索引保持在不可用状态:
create table t (
c1 int, c2 int
) partition by range ( c1 )
interval ( 10 ) (
partition p0 values less than ( 11 )
);
create index i on t ( c2 );
insert into t
with rws as (
select level x from dual
connect by level <= 100
)
select x, x from rws;
commit;
alter table t
truncate partition p0;
select index_name, status
from user_indexes;
INDEX_NAME STATUS
I UNUSABLE 这可能也会让你的应用程序处于不可用的状态!
要避免这种情况,请添加update全局索引子句:
alter index i rebuild; alter table t truncate partition p0 update global indexes; select index_name, status from user_indexes; INDEX_NAME STATUS I VALID
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




