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

Oracle SQL*Plus COPY 指令跨資料庫複製資料完整教學

     編輯:Oracle 資料庫基礎

SQL*Plus COPY 指令可透過 SQL*Net 在同一或不同伺服器的 Schema/資料庫間複製資料,是 DBA 遷移、同步、備份資料的輕量級工具。本文詳細說明語法、四種模式、跨 Schema 寫法、效能優化參數與常見錯誤處理。

COPY 指令語法結構


COPY {FROM db | TO db | FROM db TO db}
     {APPEND | CREATE | INSERT | REPLACE}
     dest_table [(col1, col2, ...)]
     USING query

關鍵子句解析

子句說明適用情境
FROM db來源資料庫 user/pwd@sidPull 模式:從遠端拉資料
TO db目標資料庫 user/pwd@sidPush 模式:推送到遠端
FROM db TO db雙向指定(跨 Schema 必須)來源/目標不同使用者或不同 DB
APPEND目標表存在則追加,不存在則建立增量同步、合併資料
CREATE建立目標表並寫入,表存在則報錯初次遷移、建立測試資料
INSERT目標表必須存在,僅插入資料定期匯入、不想自動建表
REPLACEDrop 目標表重建並寫入全量覆蓋、結構同步

實戰範例

1. 同一資料庫不同 Schema 複製(同機器)


-- 以 system 登入 SQL*Plus
COPY FROM scott/tiger@orcl TO hr/hr@orcl
CREATE emp_copy USING SELECT * FROM emp WHERE deptno = 10;

2. 跨伺服器全量同步(REPLACE 模式)


COPY FROM src_user/src_pwd@src_db TO tgt_user/tgt_pwd@tgt_db
REPLACE sales_fact
USING SELECT * FROM sales_fact WHERE sale_date >= TRUNC(SYSDATE) - 30;

3. 指定欄位順序與別名


COPY FROM a/b@db1 TO c/d@db2
INSERT target_tbl (id, name, amt, dt)
USING SELECT seq.NEXTVAL, cust_name, total_amt, SYSDATE FROM staging_tbl;

效能優化關鍵參數

  • SET ARRAYSIZE 5000:每次網路往返傳輸列數(預設 15,調大可大幅降低 Round-trip)。
  • SET COPYCOMMIT 100:每 100 批次 Commit 一次(預設 0 不中途 Commit),平衡 Undo 產生與失敗回滾成本。
  • SET LONG 2000000000:支援 CLOB/LONG 欄位複製。
  • 來源查詢加 /*+ PARALLEL(4) */ 並行掃描(Enterprise Edition)。

常見錯誤與解決

錯誤原因解決
CPY-0002: Invalid username/password連線字串錯誤、TNS 未設定確認 tnsnames.ora、測試 tnsping
CPY-0007: Table or view does not exist來源查詢表名錯誤或權限不足授予 SELECT ANY TABLE 或完整指定 Schema
ORA-01555: Snapshot too old長時間複製遭遇 Undo 覆寫加大 UNDO_RETENTION、分批次複製、避開高峰期
資料型態不符隱含轉換失敗(如字串塞數值)USING 查詢中顯式 TO_NUMBER/TO_DATE、指定欄位清單

COPY vs 其他方案快速比較

方案優點缺點建議場景
SQL*Plus COPY無需額外工具、跨版本/平台、指令簡單無並行寫入、大量資料較慢、無錯誤重試機制中小量資料(< 100萬列)、臨時遷移、跨版本
Data Pump (expdp/impdp)並行、壓縮、過濾、元資料完整需目錄物件、版本相容性限制大量資料、整個 Schema/表空間遷移
DB Link + INSERTSQL 原生、可加 Hint、交易控制跨 DB 需建立 DB Link、分散式交易風險頻繁同步、ETL 流程
GoldenGate / XStream即時 CDC、零停機、異構支援架構複雜、授權成本高核心業務即時同步、異地災備

善用 COPY 指令配合 ARRAYSIZE/COPYCOMMIT,能以最低成本完成跨環境資料複製任務。

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