Oracle使用exp和imp進行數據庫導入導出

一、導出數據庫
exp 用戶名/密碼@數據庫實例地址:端口/實例名 file=導出dmp文件路徑  rows=y owner=(導出用戶列表) 
例如:
exp system/admin@ZSKYDZXYY file=f:\dbfile\db.dmp  rows=y owner=(user1,user2,user3) 

ps:@ZSKYDZXYY 爲Oracle Net Manager中配置的數據庫地址,等同於 ip:端口/實例名
二、導入數據庫
imp 用戶名/密碼@數據庫實例地址:端口/實例名 file=dmp文件存放路徑 full=y
例如:
imp system/admin@ORCLYDYY file=F:\dbfile\db.dmp full = y

PS:

  • 爲待導入的數據庫實例建立表空間、對應的用戶
  • 使用imp語句導入dmp文件
    導入後,可以使用select count(*)from user_tables;檢查導入的表數量(含空表)。
三、導入/導出,注意事項

查看當前實例下,表空間相關信息。(可選)
ps:可以使用system直接登錄,避免各種權限等問題。

desc dba_tablespaces;
select t.tablespace_name from dba_tablespaces t;

查看用戶信息(可選)

desc dba_users;
select username,account_status from dba_users;
四、空表導出問題

oracle 11g中,默認對空表不分配segment,因此會導致直接導出空表時報錯

  • 解決方案1(不推薦,表太多時不方便)
    向表中插入一條記錄,然後rollback,就會產生segment,就可繼續導出
  • 解決方案2(使用空表腳本)

腳本如下:

//顯示segment參數
show parameter deferred_segment_creation

//修改參數爲false,即在空表狀態下也創建segment
alter system set deferred_segment_creation=false

//查看當前用戶下空表數量
select table_name from user_tables where NUM_ROWS=0;

//形成alter語句
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0; 

手動執行以上語句,便可使用exp語句導出空表
  • 執行exp腳本
五、exp/imp參數

imp help=y 即可查看,網上也有其他人詳細做了介紹,本文不再贅述。
在這裏插入圖片描述

六、自動導出(備份)腳本

以Windows服務器爲例,可以使用以下腳本,結合Windows的計劃任務完成數據庫定時備份工作。(排除了使用oracle的自動備份策略,可以通過腳本,完成特定表、特定表空間、等的細粒度備份)

@echo off   
echo ================================================   
echo  Oracle DB
echo ================================================ 
::以“YYYYMMDD”格式取出當前時間。  
::設置導出的路徑
set bakDirectory=D:\dpdump\bak
del %bakDirectory%\*.dmp
set BACKUP_DIR=D:\dpdump
copy %BACKUP_DIR%\*.dmp %bakDirectory%\
del %BACKUP_DIR%\*.dmp

set BACK_NAME=%date:~0,4%%date:~5,2%%date:~8,2%

set BACK_FULL_NAME=%BACKUP_DIR%\kyeedb%BACK_NAME%
exp system/admin@ZSKYDZXYY file=%BACK_FULL_NAME%.dmp grants=n rows=y owner=(user1,user2,user3) 

exit

腳本含義: 定時從數據庫服務器備份,備份至 D:\dpdump\bak目錄。其中,bak子文件夾爲上上一次的備份。每次將bak子文件夾中的備份刪掉,如2019.12.21日舊備份文件,再將外部父目錄2019.12.22日的備份拷貝至其中,再刪除外部的備份,最後將2019.12.23日的新備份文件寫入。形成間隔一天的冗餘備份。
在這裏插入圖片描述

exp、imp命令的詳細參數網上有詳細介紹,本文不再贅述。如非特殊exp腳本,可使用full=y,rows=y等基本參數即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章