oracle 12.2 alter table move online
我们使用主键和辅助索引创建和填充测试表。这将用于示例移动操作。
DROP TABLE t1 PURGE; -- Create table. CREATE TABLE t1 AS SELECT level AS id, 'Description for ' || level AS description, SYSDATE AS created_date FROM dual CONNECT BY level <= 1000; COMMIT; ALTER TABLE t1 ADD CONSTRAINT t1_pk PRIMARY KEY (id); CREATE INDEX t1_created_date_idx ON t1(created_date);
移动(离线)
在以前的版本中,移动表是脱机操作,默认情况下,标记索引为不可用。
-- Offline: Basic move. ALTER TABLE t1 MOVE TABLESPACE users; -- Check indexes. SELECT index_name, status FROM user_indexes ORDER BY 1; INDEX_NAME STATUS ------------------------------ -------- T1_CREATED_DATE_IDX UNUSABLE T1_PK UNUSABLE 2 rows selected. SQL>
我们可以手动重新生成索引。
-- Manually rebuild indexes. ALTER INDEX t1_pk REBUILD ONLINE; ALTER INDEX t1_created_date_idx REBUILD ONLINE; -- Check indexes. SELECT index_name, status FROM user_indexes ORDER BY 1; INDEX_NAME STATUS ------------------------------ -------- T1_CREATED_DATE_IDX VALID T1_PK VALID 2 rows selected. SQL>
或者,我们可以包括子句来管理我们的索引。UPDATE INDEXES
-- Offline: Include UPDATE INDEXES to manage the indexes. ALTER TABLE t1 MOVE TABLESPACE users UPDATE INDEXES; -- Check indexes. SELECT index_name, status FROM user_indexes ORDER BY 1; INDEX_NAME STATUS ------------------------------ -------- T1_CREATED_DATE_IDX VALID T1_PK VALID 2 rows selected. SQL>
MOVE ONLINE
From Oracle 12.2 onward we can move the table as an online operation using the keyword. In addition to moving the table, the online move automatically maintains the indexes.ONLINE
-- Online: Basic move. ALTER TABLE t1 MOVE ONLINE TABLESPACE users; -- Check indexes. SELECT index_name, status FROM user_indexes ORDER BY 1; INDEX_NAME STATUS ------------------------------ -------- T1_CREATED_DATE_IDX VALID T1_PK VALID 2 rows selected. SQL>
我们还可以使用此功能在联机操作中更改表压缩和存储参数。
-- Online: Change table compression. ALTER TABLE t1 MOVE ONLINE TABLESPACE users COMPRESS; ALTER TABLE t1 MOVE ONLINE TABLESPACE users NOCOMPRESS; -- Online: Change storage parameters. ALTER TABLE t1 MOVE ONLINE STORAGE (PCTINCREASE 0);
限制
- 不能与任何其他子句结合使用。
- 它不能用于分区索引组织的表或索引组织的表,这些表的列定义为 LOB、VARRAY、Oracle 提供的类型或用户定义的对象类型。
- 如果表上存在域索引,则不能使用它。
- 不支持对具有持续联机移动的对象进行并行 DML 和直接路径插入。
流年笑掷 未来可期
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)