1. 程式人生 > 實用技巧 >oracle 12.2 alter table move online

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 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 和直接路徑插入。