oracle 12.2 alter table move online
阿新 • • 發佈:2020-09-21
我們使用主鍵和輔助索引建立和填充測試表。這將用於示例移動操作。
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 thekeyword. 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 和直接路徑插入。