天天看點

Oracle資料庫導出、導入dmp檔案

目标

實作Oracle資料庫備份,導出、導入dmp檔案。這裡Oracle資料庫源和目标庫都是相同的版本。

exp/imp方式

這種方式可以在用戶端或服務端機器上執行,受網速影響,速度相對較慢。

  • 導出

    export NLS_LANG=’AMERICAN_AMERICA.AL32UTF8’ #當存在exp-00091報錯時,需要此指令設定本地字元集與資料庫字元集一緻。

    exp olduser/[email protected]/orcl owner=olduser rows=y indexes=n compress=y file=exp.dmp log=exp.log

  • 導入

    imp newuser/[email protected]/orcl file=exp.dmp log=imp.log fromuser=olduser touser=newuser ignore=y

以上,為“指定使用者”模式,exp/imp還支援全庫模式(full=y)、指定表模式(tables=(table1, table2),可通過query=\” where filed1 like ‘00%’\”指定表中的記錄範圍)。

當導出時,compress=y對dmp檔案進行壓縮,以減小檔案大小;若采用全庫模式,則不需要指定owner、tables等參數,且必須為dba權限才行。

當導入時,若目标庫已經存在表,則可能會報錯,導緻導入中斷,此時可通過ignore=y來忽略錯誤資訊,并繼續。

expdp/impdp資料泵方式

這種方式是完全在服務端進行的操作,因為無網絡開銷,是以運作速度是最快的。導出完畢後,将dmp檔案從服務端下載下傳下來即可。

  • 導出

    expdp olduser/[email protected]/orcl directory=DATA_PUMP_DIR dumpfile=expdb.dmp logfile=expdb.log SCHEMAS=olduser

    其中,directory=DATA_PUMP_DIR,表示導出到10.0.1.1/orcl資料庫的DATA_PUMP_DIR目錄下;SCHEMAS=olduser,指定了導出的是olduser使用者下的資料對象。

  • 導入

    impdp newuser/[email protected]/orcl directory=DATA_PUMP_DIR dumpfile=expdb.dmp EXCLUDE=USER

    其中,directory=DATA_PUMP_DIR,表示從10.0.1.2/orcl 資料庫的DATA_PUMP_DIR 目錄下,讀取檔案名為expdb.dmp的dmp檔案。

    在導入前,需要将expdb.dmp檔案從10.0.1.1複制到 10.0.1.2的指定目錄下。

DATA_PUMP_DIR目錄,是通過如下ddl語句建立的:

相關内容

  • 關于scp指令

    若希望在伺服器之間複制檔案,可通過scp指令。

    例如:

scp -P22 oracle@10..:/oracle/admin/olduser/dpdump/expdb.dmp  /home/oracle/dbbackup/
           
  • 關于exp-00091錯誤

    出現EXP-00091之後,我們采用的解決方案如下:

    首先,檢視資料庫中的NLS_CHARACTERSET的值;

    然後,根據第一步查出來的NLS_CHARACTERSET(即ZHS16GBK)來設定

    windows環境:cmd > set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

    linux環境:Shell > export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

--通過如下SQL可查詢資料庫字元集:
select userenv('language') from dual;
--如:SIMPLIFIED CHINESE_CHINA.AL32UTF8

select * from v$nls_parameters where parameter='NLS_CHARACTERSET';
PARAMETER          VALUE 
-----------------  ----------
NLS_CHARACTERSET   ZHS16GBK