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

Oracle 匯出用戶所有表實戰:動態產生 EXP 批次腳本,跨平台遷移零遺漏

     編輯:Oracle 資料庫基礎

需將特定 Schema 下所有表匯出為獨立 DMP 檔,供跨平台(Windows → Linux)匯入?手工寫 exp 命令既繁瑣易漏,維護更是噩夢。本文提供一套 SQL*Plus 動態生成批次腳本 方案:查詢 USER_TABLES,拼接每張表的 exp 命令,輸出 .bat/.sh,一鍵執行全搞定。

核心思路

  1. SQL*Plus 設定輸出格式:關閉回饋、標題、分頁、驗證,設寬行、去尾空格。
  2. SPOOL 導向腳本檔(如 c:\export_tables.bat)。
  3. SELECT 拼接 exp userid=... tables=表名 file=表名.dmp triggers=n。
  4. SPOOL OFF,恢復 SQL*Plus 設定,EXIT。
  5. 編輯產出腳本:刪除首尾雜訊行,保留純命令行。
  6. 執行腳本,逐表匯出完畢。

完整 SQL*Plus 腳本

SET FEEDBACK OFF
SET PAGESIZE 0
SET HEADING OFF
SET VERIFY OFF
SET LINESIZE 200
SET TRIMSPOOL ON

SPOOL c:\export_tables.bat

SELECT 'exp username/password@yourdb TABLES=' || table_name || ' FILE=' || table_name || '.dmp TRIGGERS=N'
FROM user_tables;

SPOOL OFF

SET FEEDBACK ON
SET PAGESIZE 9999
SET HEADING ON
SET VERIFY ON
EXIT

關鍵參數說明

  • TABLES=table_name:單表模式,每表一個 DMP,便於選擇性匯入、並行處理、故障隔離。
  • TRIGGERS=N:不匯出觸發器,避免匯入端觸發器衝突(可視需求改 Y)。
  • FILE=table_name.dmp:以表名命名,直觀好管。

跨平台匯入建議

Linux 端對應改寫 .sh,使用 imp 參數 FROMUSER=src_schema TOUSER=tgt_schema 實現 Schema 重映射。預先建立目標 Tablespace、User、Quota,再執行匯入。

進階擴展

  • 加入 INDEXES=N、CONSTRAINTS=N、GRANTS=N 分離結構與資料,匯入後再建索引加速。
  • 大表啟用 DIRECT=Y(直接路徑匯出)提速。
  • 配合 PARALLEL (Data Pump expdp/impdp) 實現真正並行,10g+ 環境強烈建議改用 Data Pump。

避坑指南

  • 腳本首尾會混入 SQL*Plus 標題/提示行,務必手工或 sed 刪除再執行。
  • 密碼明文寫在腳本有風險,生產環境建議用 / as sysdba 或外部密碼存儲(Oracle Wallet)。
  • 表名含特殊字元或保留字需雙引號,動態 SQL 中處理轉義。

結語

「動態生成腳本」是 DBA 自動化運維的基礎技能。掌握 SPOOL + SELECT ... || ... 模式,不只匯出表,匯出統計資訊、產生 DDL、批量 Grant、巡檢腳本皆可一體適用。工欲善其事,必先利其器。

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