利用 `impdp` 搭配 `NETWORK_LINK` 參數,直接從來源資料庫透過資料庫連結 (DB Link) 將 Schema 物件與資料遷移至目標庫,無需中間 DMP 檔案落地。本文提供完整環境準備、權限配置、參數檔範本、實戰日誌解析、常見錯誤 (ORA-39149) 解決方案與進階應用場景。
| 參數 | 用途 |
|---|---|
| NETWORK_LINK | 目標端建立的 DB Link 名稱,指向來源資料庫 |
| SCHEMAS | 要遷移的來源 Schema 清單 |
| REMAP_SCHEMA | 來源:目標 Schema 映射 (如 `src:tgt`) |
| REMAP_TABLESPACE | 來源表空間:目標表空間 映射 (含臨時表空間) |
| PARFILE | 參數檔路徑,避免命令列過長與特殊字元轉義 |
NETWORK_LINK=src_dblink
SCHEMAS=source_schema
REMAP_SCHEMA=source_schema:target_schema
REMAP_TABLESPACE=source_tbs:target_tbs,source_temp:target_temp
執行:`impdp user/pwd parfile=parfile.log`
CREATE USER link_user IDENTIFIED BY "pwd";
GRANT CREATE SESSION TO link_user;
ALTER USER link_user QUOTA UNLIMITED ON USERS;
-- 關鍵:必須授予 EXP_FULL_DATABASE 角色
GRANT EXP_FULL_DATABASE TO link_user;
CREATE PUBLIC DATABASE LINK src_dblink
CONNECT TO link_user IDENTIFIED BY "pwd"
USING 'source_tns_alias';
$ impdp system/pwd parfile=parfile.log
Import: Release 10.2.0.3.0
Connected to: Oracle Database 10g Enterprise Edition 10.2.0.3.0
Flashback automatically enabled to preserve database integrity.
Starting "SYS"."SYS_IMPORT_SCHEMA_01": ... network_link=src_dblink schemas=link remap_schema=link:link2
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
. . imported "LINK2"."DOC_TYPE" 8 rows
Job "SYS"."SYS_IMPORT_SCHEMA_01" successfully completed at 17:40:14
關鍵驗證:`SELECT * FROM ALL_USERS ORDER BY 3;` 確認 `LINK2` 建立時間為剛才匯入時間。
| 錯誤代碼 | 原因 | 解決 |
|---|---|---|
| ORA-31631: privileges are required | 連結用戶缺乏 EXP_FULL_DATABASE | 來源端 `GRANT EXP_FULL_DATABASE TO link_user;` |
| ORA-39149: cannot link privileged user to non-privileged user | 來源連結用戶為 SYS 等高權限,目標映射用戶權限不足 | 使用普通用戶作連結用戶,或確保目標用戶具備相應權限 |
| ORA-39001: invalid argument value | REMAP_TABLESPACE 來源表空間不存在於目標 | 先建立目標表空間,或調整映射 |