sql - 如何在具有功能索引的表上删除行后清理未使用的空间?
问题描述
如何正确清理表空间?
例如,我们有一个包含数百万行和功能索引的表。我们要删除表格的大部分。
为此,我们称之为:从 some_table 中删除 ....
接下来的步骤是什么?
这个顺序正确吗?1. 删除功能指标。2. 改变 some_table 收缩空间。3. 再次创建功能索引。
解决方案
您可能已经意识到(或者您不会特别询问基于函数的索引),您不能简单地:
alter table mytable enable row movement;
alter table mytable shrink space;
alter table mytable disable row movement;
尝试这样做会导致:
ORA-10631: 不应为此对象指定 SHRINK 子句
(注意:此限制也适用于位图连接索引。)
显然,你可以先放弃 FBI...
drop index my_fbi_index;
alter table mytable enable row movement;
alter table mytable shrink space;
alter table mytable disable row movement;
create index my_fbi_index... online;
不过,这不是在线操作。您的应用程序将在短时间内受到缺少的基于函数的索引的影响。
如果您需要在线操作并且您使用的是 Oracle 12.2 或更高版本,您可以尝试以下操作:
alter table mytable move online;
( ( alter table...move
(no "online") 在 12.2 之前可用,但它不是在线操作,它会删除您的索引段,使索引标记为“不可用”并要求您重新构建它们。所以,这不是一个很好的选择 pre- 12.2.)
推荐阅读
- python - 数据框按几列分组
- sql - 从 SQL 表中删除重复的对
- architecture - 如何对银行遗留的 IT 系统进行现代化改造?
- php - 日期时间格式显示错误的日期
- ansible - 如何在目标上找到 python 模块,是否可以使用 virtualenv 安装模块依赖项?
- c# - 当用户的角色授权未完成时调用控制器操作时,IExceptionHandlerPathFeature 返回 null
- apache-kafka - 带有kafka的春云流
- javascript - webpack中使用的javascript导入/导出问题
- python - 按升序对目录中的文件名进行两级排序
- botframework - 如何将滚动条添加到自适应卡片