一、 我們為什么現在要用expdp/impdp命令,而不是使用exp/imp命令來備份/還原數據庫?
- expdp/impdp命令,我們也通常稱之為“數據泵(DataPump)”,它具有以下優點:
l 在性能上,具有並行處理能力,因此可以獲得性能上的優勢,加快導入導出速度。
l 在功能上,
——為數據及數據對象提供更細微級別的選擇性
——可以設定數據庫版本號(主要是用於兼容老版本的數據庫系統)
——預估導出作業所需要的磁盤空間
——支持導入時重新映射功能(即將對象導入到新的目標數據文件,架構,表空間等)
——支持元數據壓縮及數據采樣
- 限制條件:
數據泵是服務端的實用程序,只能在數據庫服務器上執行,不能在客戶端執行。
- 如需詳細了解,可參考網上文章:
http://www.oracledatabase12g.com ... A8%A1%E5%BC%8F.html
二、 准備過程(以下步驟在源數據庫和目標數據庫上均需要執行,第一次執行即可,以后不需要重復執行,如不確認是否已做相關設置,可直接執行第3步查看)
創建數據庫物理存放路徑,例如d:\dbbak
(以下3步操作都是)創建邏輯目錄,指向上面所建物理路徑。dpdata1為我們定義的邏輯目錄名。
SQL>create directory dpdata1 as 'd:\dbbak';
驗證上述步驟操作是否成功(注意:此處只是驗證是否成功創建邏輯路徑,並不會檢查對應的物理路徑是否真實有效)
SQL>select * from dba_directories;
以管理員身份賦予sbnetdba用戶賦予在指定目錄的操作權限,如果有多個用戶,請對用戶授權。
SQL>grant read,write on directory dpdata1 to sbnetdba;
三、 導出數據(注意下面命令不是在SQL下執行,而是直接在CMD命令行中執行)
l 按用戶導數據,如果有多個用戶,按每個用戶分別執行備份。
expdp sbnetdba/passwd@netdb schemas=sbnetdba dumpfile=expdp.dmp DIRECTORY=dpdata1
——schemas:需要進行導出的用戶身份
——dumpfile:導出的文件名
——導出完成后,會生產export.log日志文件,記錄導出信息,如有疑問可用來分析。
四、 還原數據
l 先將備份數據拷貝至目標數據庫對應路徑下
l 指定用戶導入。如果有多個用戶,按每個用戶分別執行導入。
——如果目標庫為新建的空庫,還沒有數據表的時候,可采用下面語句直接導入 (注意紅字部分的格式,只有一個實例時,不要寫成sbnetdba/passwd@netdb):
impdp sbnetdba/passwd DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=sbnetdba
——如果目標數據庫中已有表存在,我們只想覆蓋原有數據,則需加入table_exists_action= REPLACE參數,否則數據不會被覆蓋。具體命令如下:
impdp sbnetdba/passwd directory=dpdata1 dumpfile=EXPDP.DMP table_exists_action= REPLACE schemas=sbnetdba
——導出完成后,會生產import.log日志文件,記錄導出信息,如有疑問可用來分析。
——使用remap_schema=mamdba:sbnetdba參數,前面是源SCHEMA 后面是導入目標schema,即把數據以mamdba schema導出,