EXP_FULL_DATABASE
(導出)或IMP_FULL_DATABASE
(導入)權限。sqlplus
、expdp
(數據泵導出)、impdp
(數據泵導入)命令可用。tnsnames.ora
文件(位于$ORACLE_HOME/network/admin
),添加源/目標數據庫的連接別名(如SOURCE_DB = (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=source_host)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=source_svc)))
),便于sqlplus
通過別名連接。USER_TABLES
、ALL_CONSTRAINTS
、ALL_INDEXES
等視圖,明確源數據庫中需遷移的表、索引、約束、觸發器等對象信息,避免遺漏關鍵數據。INSERT
沖突)。若需將數據導出為CSV、TXT等平面文件(適用于跨數據庫遷移或后續處理),可通過SQL*Plus
的SPOOL
命令實現:
export_emp.sql
):SET PAGESIZE 0 -- 不顯示分頁頁眉頁腳
SET FEEDBACK OFF -- 不顯示查詢結果的反饋信息(如"X rows selected")
SET HEADING OFF -- 不顯示列標題
SET MARKUP HTML OFF -- 不生成HTML格式
SET ECHO OFF -- 不顯示執行的SQL語句
SET VERIFY OFF -- 不顯示變量替換后的語句
SET TERMOUT OFF -- 不顯示命令輸出到屏幕
SET TRIMSPOOL ON -- 去除輸出內容的尾部空格
SPOOL /path/to/output_emp.csv -- 指定輸出文件路徑(Linux/Unix用絕對路徑)
SELECT emp_id || ',' || emp_name || ',' || salary FROM emp; -- 使用分隔符拼接字段(CSV格式)
SPOOL OFF -- 結束輸出,關閉文件
sqlplus
后,運行@/path/to/export_emp.sql
,即可將emp
表的數據導出為CSV文件。數據泵(Data Pump)是Oracle推薦的快速數據遷移工具,支持增量遷移、并行處理、壓縮等功能,效率遠高于傳統EXP/IMP
。需通過操作系統命令行執行(而非sqlplus
內部),但sqlplus
可用于創建數據泵所需的目錄對象。
sqlplus
(需具備CREATE ANY DIRECTORY
權限),執行以下命令創建目錄對象(關聯操作系統路徑):CREATE DIRECTORY export_dir AS '/u01/app/oracle/dumpfiles';
CREATE DIRECTORY import_dir AS '/u01/app/oracle/dumpfiles';
執行SELECT * FROM dba_directories;
驗證目錄是否創建成功。oracle
用戶,因普通用戶無權限執行數據泵命令)運行:expdp 'scott/tiger@source_db' schemas=scott directory=export_dir dumpfile=scott_data.dmp logfile=expdp_scott.log
參數說明:
schemas=scott
:指定導出的用戶方案(僅導出scott
用戶的對象);directory=export_dir
:指定導出文件的存儲目錄(需與sqlplus
中創建的目錄對象一致);dumpfile=scott_data.dmp
:導出文件名;logfile=expdp_scott.log
:導出日志文件名。.dmp
文件從源服務器傳輸至目標服務器(使用scp
、FTP
等工具),例如:scp /u01/app/oracle/dumpfiles/scott_data.dmp target_user@target_host:/u01/app/oracle/dumpfiles/
impdp 'system/manager@target_db' schemas=scott directory=import_dir dumpfile=scott_data.dmp logfile=impdp_scott.log
若需將數據導入至目標數據庫的其他用戶(如target_user
),需添加touser
參數:impdp 'system/manager@target_db' schemas=scott directory=import_dir dumpfile=scott_data.dmp logfile=impdp_scott.log touser=target_user
參數說明:
touser=target_user
:指定目標用戶(需具備IMP_FULL_DATABASE
權限);EXPDP
一致。若源/目標數據庫均在同一網絡且已配置tnsnames.ora
,可通過SQL*Plus
的COPY
命令直接遷移數據(無需中間文件),適用于小批量數據遷移:
-- 從源數據庫復制數據至目標數據庫(創建目標表并插入數據)
COPY FROM scott/tiger@source_db TO scott/tiger@target_db
CREATE emp_target
USING SELECT * FROM emp_source;
-- 向目標數據庫現有表插入數據(目標表需提前存在)
COPY FROM scott/tiger@source_db TO scott/tiger@target_db
INSERT emp_target
USING SELECT * FROM emp_source;
-- 替換目標表(刪除目標表并重新創建,再插入數據)
COPY FROM scott/tiger@source_db TO scott/tiger@target_db
REPLACE emp_target
USING SELECT * FROM emp_source;
參數說明:
FROM/TO
:指定源/目標數據庫的連接信息(username/password@tns_alias
);CREATE
:目標表不存在時創建表(結構與源表一致);INSERT
:向目標表插入數據(目標表需存在);REPLACE
:刪除目標表并重新創建(適用于表結構變更場景);USING
:指定源數據的查詢語句。SELECT COUNT(*) FROM emp;
),確保數據量一致;SELECT emp_id, emp_name FROM emp WHERE emp_id = 100;
),確認數據準確性;SELECT * FROM user_constraints WHERE table_name = 'EMP';
)。/path/to/output_emp.csv
);scott_data.dmp
);sqlplus
日志文件(如export_emp.log
),釋放存儲空間。AL32UTF8
),否則可能導致中文亂碼(EXPDP/IMPDP
時會自動檢查字符集,不一致時報錯)。EXPDP/IMPDP
需在oracle
用戶下執行,普通用戶無法調用;COPY
命令需源/目標數據庫的SELECT
(源)和INSERT
(目標)權限。BLOB
、CLOB
等大對象,建議使用EXPDP/IMPDP
(支持大對象高效遷移),而非COPY
或平面文件。ORA-39002: invalid operation
、ORA-12154: TNS:could not resolve
),需檢查日志文件(如expdp_scott.log
)定位問題(如權限不足、目錄不存在、TNS配置錯誤)。