需將表 TEST.T1 遷移至 TEST1 Schema 下,Oracle 無直接 ALTER TABLE ... OWNER TO ... 指令,需採用間接手段。
-- 原 Schema 操作
CREATE USER test1 IDENTIFIED BY test1;
GRANT RESOURCE, CONNECT TO test1;
GRANT ALL ON t1 TO test1;
-- 目標 Schema 操作
CONN test1/test1
CREATE TABLE t1 AS SELECT * FROM test.t1;
-- 再補建索引、約束、授權...
缺點:大表耗時、需手動同步索引約束、產生雙倍暫存空間。
核心原理:建立單分區暫存表,利用 ALTER TABLE ... EXCHANGE PARTITION 瞬間交換 Segment 指標,不移動實際資料區塊,秒級完成遷移。
-- 1. 目標 Schema 建立分區暫存表
CONN test1/test1
CREATE TABLE temp (id NUMBER, name VARCHAR2(20))
PARTITION BY RANGE (id)
(PARTITION part0 VALUES LESS THAN (-1),
PARTITION part1 VALUES LESS THAN (MAXVALUE));
-- 2. 建立一個空的非分區表 (結構同源表)
CREATE TABLE t1 (id NUMBER, name VARCHAR2(20));
-- 3. 核心交換指令 (需含 INDEXES 以同步索引)
ALTER TABLE temp EXCHANGE PARTITION part1 WITH TABLE test.t1
INCLUDING INDEXES WITHOUT VALIDATION;
-- 4. 清理暫存表
DROP TABLE temp;
INCLUDING INDEXES:同步交換索引 Segment,否則索引失效成為 UNUSABLE。WITHOUT VALIDATION:跳過資料檢查 (分區鍵範圍驗證),極大加速。前提是確信資料符合分區定義。id) 並設 MAXVALUE 涵蓋所有資料。ALTER TABLE 權限與 DROP ANY TABLE (或擁有者)。EXCHANGE PARTITION ... WITH TABLE schema.table 語法 (10g+ 支援)。此法為大表跨 Schema 遷移的黃金標準,廣泛用於 EBS 升級、多租戶架構調整、資料歸檔分層。