首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 資料庫核心用戶與修改表 Owner 實作:Partition Exchange 法

     編輯:Oracle 資料庫基礎

Oracle 資料庫啟動後至少擁有 SYS、SYSTEM、INTERNAL 三大核心帳號。本文說明其權限差異,並示範如何利用 Partition Exchange 在不匯出匯入的前提下,將表從一個 Schema 移動到另一個 Schema(實現修改 Table Owner)。

核心用戶權限速查

用戶角色權限用途
SYSDBA最高,擁有 SYSDBA資料庫建立、啟動/關閉、核心維護
SYSTEMDBA次高,無 SYSDBA日常管理、建立使用者、監控
INTERNALSYS 別名等同 SYS舊版相容,連線字串 internal/oracle

修改 Table Owner:Partition Exchange 法

Oracle 無直指 ALTER TABLE ... OWNER TO ...,傳統做法是 EXP/IMP 或 CTAS,但大表耗時久、需鎖表。Partition Exchange 可在**秒級、無資料移動**下完成 Owner 變更(需 Enterprise Edition + Partitioning Option)。

步驟示範

-- 1. 建立目標使用者
CREATE USER test1 IDENTIFIED BY test1;
GRANT RESOURCE, CONNECT TO test1;

-- 2. 來源使用者建表並塞資料
CONN test/test
CREATE TABLE t1 (id NUMBER, name VARCHAR2(20));
INSERT INTO t1 VALUES (1, 'xx');
COMMIT;
GRANT ALL ON t1 TO test1;

-- 3. 目標使用者建立分區表(單一分區涵蓋所有值)
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)
);

-- 4. Exchange Partition:將 test.t1 瞬間變成 temp 的 part1
ALTER TABLE temp EXCHANGE PARTITION part1 WITH TABLE test.t1
  INCLUDING INDEXES WITHOUT VALIDATION;

-- 5. 清理:drop temp 表,test1 即擁有原 t1 資料與結構
--    原 test.t1 變成空表(part0),可 drop
DROP TABLE temp;

關鍵點解析

  • PARTITION BY RANGE 建立兩個分區,part0 為空殼,part1 承接實際資料。
  • INCLUDING INDEXES 同步交換索引,WITHOUT VALIDATION 跳過資料檢查(需確保資料符合分區範圍)。
  • 操作屬於 DDL,會隱性 COMMIT,執行極快(只更新 Data Dictionary 指標)。
  • 索引、約束、權限隨表一起移動,應用端無需修改同義詞。

適用條件與限制

必備
Enterprise Edition + Partitioning Option。
表大小
適合大表(>100MB),小表用 CTAS 更簡單。
資料分布
交換前需確認資料符合目標分區範圍,否則 WITHOUT VALIDATION 會導致查詢錯誤。
外鍵
若有 FK 參考此表,需先停用 FK,交換後再啟用。

替代方案快速比較

方法速度鎖表時間適用版本備註
Partition Exchange秒級極短EE + Partitioning首選大表
CTAS + RENAME依資料量全程所有版本需重建索引/權限
EXPDP/IMPDP REMAP_SCHEMA依資料量匯入期間10g+跨資料庫/備份同步
DBMS_REDEFINITION依資料量短(線上)9i+線上重組,可同步修改結構

掌握 Partition Exchange 技巧,即可在維護窗口極短的生產環境中,安全、快速地完成 Table Owner 變更。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved