標籤:io os 使用 ar java strong for 檔案 資料
IMP 和EXP命令
Oracle資料匯入匯出imp/exp就相當於oracle資料還原與備份。exp命令可以把資料從遠端資料庫伺服器匯出到本地的dmp檔案,imp命令可以把dmp檔案從本地匯入到遠處的資料庫伺服器中。 利用這個功能可以構建兩個相同的資料庫,一個用來測試,一個用來正式使用。
執行環境:可以在SQLPLUS.EXE或者DOS(命令列)中執行,DOS中可以執行時由於在oracle 8i中安裝目錄\ora81\BIN被設定為全域路徑,該目錄下有EXP.EXE與IMP.EXE檔案被用來執行匯入匯出。
oracle用java編寫,SQLPLUS.EXE、EXP.EXE、IMP.EXE這兩個檔案有可能是被封裝後的類檔案。SQLPLUS.EXE調用EXP.EXE、IMP.EXE所包裹的類,完成匯入匯出功能。
下面介紹的是匯入匯出的執行個體。
資料匯出:
1 將資料庫TEST完全匯出,使用者名稱system 密碼manager 匯出到D:\daochu.dmp中
exp system/[email protected] file=d:\daochu.dmp full=y
2 將資料庫中system使用者與sys使用者的表匯出
exp system/[email protected] file=d:\daochu.dmp owner=(system,sys)
3 將資料庫中的表inner_notify、notify_staff_relat匯出
Exp system/[email protected]TEST file=d:\daochu.dmp tables=(table1,table2,table3...)
4 將資料庫中的表table1中的欄位filed1以"00"打頭的資料匯出
exp system/[email protected] file=d:\daochu.dmp tables=(table1)
query=\" where filed1 like ‘00%‘\"
上面是常用的匯出,對於壓縮,既用winzip把dmp檔案可以很好的壓縮。
也可以在上面命令後面 加上 compress=y 來實現。
資料的匯入
1 將D:\daochu.dmp 中的資料匯入 TEST資料庫中。
imp system/[email protected] file=d:\daochu.dmp
imp aichannel/[email protected] full=y file= d:\data\newsmgnt.dmp ignore=y
上面可能有點問題,因為有的表已經存在,然後它就報錯,對該表就不進行匯入。
在後面加上 ignore=y 就可以了。
2 將d:\daochu.dmp中的表table1 匯入
imp system/[email protected] file=d:\daochu.dmp tables=(table1)
基本上上面的匯入匯出夠用了。不少情況先是要將表徹底刪除,然後匯入。
注意:
操作者要有足夠的許可權,許可權不夠它會提示。
資料庫時可以連上的。可以用tnsping TEST 來獲得資料庫TEST能否連上。
附錄一:
給使用者增加匯入資料許可權的操作
第一,啟動sql*puls
第二,以system/manager登陸
第三,create user 使用者名稱 IDENTIFIED BY 密碼 (如果已經建立過使用者,這步可以省略)
第四,GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
DBA,CONNECT,RESOURCE,CREATE SESSION TO 使用者名稱字
第五, 運行-cmd-進入dmp檔案所在的目錄,
imp userid=system/manager full=y file=*.dmp
或者 imp userid=system/manager full=y file=filename.dmp
執行樣本:
F:\Work\Oracle_Data\backup>imp userid=test/test full=y file=inner_notify.dmp
螢幕顯示
Import: Release 8.1.7.0.0 - Production on 星期四 2月 16 16:50:05 2006
(c) Copyright 2000 Oracle Corporation. All rights reserved.
串連到: Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production
經由常規路徑匯出由EXPORT:V08.01.07建立的檔案
已經完成ZHS16GBK字元集和ZHS16GBK NCHAR 字元集中的匯入
匯出伺服器使用UTF8 NCHAR 字元集 (可能的ncharset轉換)
正在將AICHANNEL的對象匯入到 AICHANNEL
正在匯入表 "INNER_NOTIFY" 4行被匯入
準備啟用約束條件...
成功終止匯入,但出現警告。
附錄二:
Oracle 不允許直接改變表的擁有者, 利用Export/Import可以達到這一目的.
先建立import9.par,然後,使用時命令如下:imp parfile=/filepath/import9.par
例 import9.par 內容如下:
FROMUSER=TGPMS
TOUSER=TGPMS2 (註:把表的擁有者由FROMUSER改為TOUSER,FROMUSER和TOUSER的使用者可以不同)
ROWS=Y
INDEXES=Y
GRANTS=Y
CONSTRAINTS=Y
BUFFER=409600
file==/backup/ctgpc_20030623.dmp
log==/backup/import_20030623.log
將一個資料庫的某使用者的所有表導到另外資料庫的一個使用者下面的例子
exp userid=system/manager owner=username1 file=expfile.dmp
imp userid=system/manager fromuser=username1 touser=username2
ignore=y file=expfile.dmp ;
ORACLE資料庫有兩類備份方法。第一類為物理備份,該方法實現資料庫的完整恢複,但資料庫必須運行在歸擋模式下(業務資料庫在非歸擋模式下運行),且需要極大的外部存放裝置,例如磁帶庫;第二類備份方式為邏輯備份,業務資料庫採用此種方式,此方法不需要資料庫運行在歸擋模式下,不但備份簡單,而且可以不需要外部存放裝置。
資料庫邏輯備份方法
ORACLE資料庫的邏輯備份分為三種模式:表備份、使用者備份和完全備份。
表模式
備份某個使用者模式下指定的對象(表)。業務資料庫通常採用這種備份方式。
若備份到本地檔案,使用如下命令:
exp icdmain/icd rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=exp_icdmain_csd_yyyymmdd.dmp
log=exp_icdmain_csd_yyyymmdd.log
tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo
若直接備份到磁帶裝置,使用如下命令:
exp icdmain/icd rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=/dev/rmt0
log=exp_icdmain_csd_yyyymmdd.log
tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo
註:在磁碟空間允許的情況下,應先備份到本機伺服器,然後再拷貝到磁帶。出於速度方面的考慮,盡量不要直接備份到磁帶裝置。
使用者模式
備份某個使用者模式下的所有對象。業務資料庫通常採用這種備份方式。
若備份到本地檔案,使用如下命令:
exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=exp_icdmain_yyyymmdd.dmp
log=exp_icdmain_yyyymmdd.log
若直接備份到磁帶裝置,使用如下命令:
exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=/dev/rmt0
log=exp_icdmain_yyyymmdd.log
註:如果磁碟有空間,建議備份到磁碟,然後再拷貝到磁帶。如果資料庫資料量較小,可採用這種辦法備份。
完全模式
備份完整的資料庫。業務資料庫不採用這種備份方式。備份命令為:
exp icdmain/icd rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0 full=y
file=exp_fulldb_yyyymmdd.dmp(磁帶裝置則為/dev/rmt0)
log=exp_fulldb_yyyymmdd.log
對於Database Backup,建議採用增量備份,即只備份上一次備份以來更改的資料。增量備份
命令:
exp icdmain/icd rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0 full=y inctype=incremental
file=exp_fulldb_yyyymmdd.dmp(磁帶裝置則為/dev/rmt0)
log=exp_fulldb_yyyymmdd.log
註:關於增量備份必須滿足下列條件:
1. 只對完整Database Backup有效,且第一次需要full=y參數,以後需要inctype=incremental參數。
2. 使用者必須有EXP_FULL_DATABASE的系統角色。
3. 話務量較小時方可採用Database Backup。
4. 如果磁碟有空間,建議備份到磁碟,然後再備份到磁帶。
業務Database Backup方法及周期
用EXP進行備份前,先在SYS使用者下運行CATEXP.SQL檔案(如果以前已運行該檔案,則不要執行這個指令碼)。
沒有特殊說明,不允許在用戶端執行備份命令。
備份命令參照表模式下的備份命令。
從磁碟檔案備份到磁帶
如果首先備份到本地磁碟檔案,則需要轉儲到磁帶裝置上。
1. 若需查看主機上配置的磁帶裝置,使用如下命令:
lsdev -Cc tape
顯示的結果如下例所示:
rmt0 Available 30-58-00-2,0 SCSI 4mm Tape Drive
rmt1 Defined 30-58-00-0,0 SCSI 4mm Tape Drive
標明Available的裝置是可用的磁帶裝置。
2. 若需查看磁帶儲存的內容,使用如下命令:
tar -tvf /dev/rmt0
顯示的結果如下例所示:
-rw-r--r-- 300 400 8089600 Jan 11 14:33:57 2001 exp_icdmain_20010111.dmp
如果顯示類似如下內容,則表示該磁帶儲存的備份資料是從資料庫直接備份到磁帶上,而非從本地磁碟轉儲到磁帶的備份檔案,因此作業系統無法識別。
tar: 0511-193 An error occurred while reading from the media.
There is an input or output error.
或
tar: 0511-169 A directory checksum error on media; -267331077 not equal to 25626.
3. 對於新磁帶或無需保留現存資料的磁帶,使用如下命令:
tar -cvf /dev/rmt0 exp_icdmain_yyyymmdd.dmp
註:A. 該命令將無條件覆蓋磁帶上的現存資料。
B. 檔案名稱不允許包含路徑資訊,如:/backup/exp_icdmain_yyyymmdd.dmp。
4. 對於需要保留現存資料的磁帶,使用如下命令:
tar -rvf /dev/rmt0 exp_icdmain_yyyymmdd.dmp
註:該命令將檔案exp_icdmain_yyyymmdd.dmp追加到磁帶的末端,不會覆蓋現存的資料。
特彆強調:如果備份時是從資料庫直接備份到磁帶上,則不可再向該磁帶上追加複製任何其他檔案,否則該備份資料失效。
5. 若需將轉儲到磁帶上的備份檔案複製到本地硬碟,使用如下命令:
A. 將磁帶上的全部檔案複製到本地硬碟的目前的目錄
tar -xvf /dev/rmt0
B. 將磁帶上的指定檔案複製到本地硬碟的目前的目錄
tar -xvf /dev/rmt0 exp_icdmain_yyyymmdd.dmp
備份時間安排
由於備份時對系統I/O有較大影響,所以,建議在晚上11點以後進行備份工作。
業務資料庫Oracle版本的恢複,恢複方案需根據備份方案確定。由於業務資料庫採用表備份和使用者備份相結合的方案,所以業務資料庫的恢複需根據實際情況採用表恢複和使用者恢複相結合的方案。
恢複方案
資料庫的邏輯恢複分為表恢複、使用者恢複、完全恢複三種模式。
表模式
此方式將根據按照表模式備份的資料進行恢複。
A. 恢複備份資料的全部內容
若從本地檔案恢複,使用如下命令:
imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n
commit=y buffer=65536 feedback=100000 ignore=n volsize=0
file=exp_icdmain_csd_yyyymmdd.dmp
log=imp_icdmain_csd_yyyymmdd.log
若從磁帶裝置恢複,使用如下命令:
imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n
commit=y buffer=65536 feedback=100000 ignore=n volsize=0 file=/dev/rmt0
log=imp_icdmain_csd_yyyymmdd.log
B. 恢複備份資料中的指定表
若從本地檔案恢複,使用如下命令:
imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n
commit=y buffer=65536 feedback=100000 ignore=n volsize=0
file=exp_icdmain_cs
d_yyyymmdd.dmp
log=imp_icdmain_csd_yyyymmdd.log
tables=commoninformation,serviceinfo
若從磁帶裝置恢複,使用如下命令:
imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n
commit=y buffer=65536 feedback=100000 ignore=n volsize=0
file=/dev/rmt0
log=imp_icdmain_csd_yyyymmdd.log
tables=commoninformation,serviceinfo
使用者模式
此方式將根據按照使用者模式備份的資料進行恢複。
A. 恢複備份資料的全部內容
若從本地檔案恢複,使用如下命令:
imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n
commit=y buffer=65536 feedback=100000 ignore=n volsize=0
file=exp_icdmain_yyyymmdd.dmp
log=imp_icdmain_yyyymmdd.log
若從磁帶裝置恢複,使用如下命令:
imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n
commit=y buffer=65536 feedback=100000 ignore=n volsize=0 file=/dev/rmt0
log=imp_icdmain_yyyymmdd.log
B. 恢複備份資料中的指定表
若從本地檔案恢複,使用如下命令:
imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n
commit=y buffer=65536 feedback=100000 ignore=n volsize=0
file=exp_icdmain_yyyymmdd.dmp
log=imp_icdmain_yyyymmdd.log
tables=commoninformation,serviceinfo
若從磁帶裝置恢複,使用如下命令:
imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n
commit=y buffer=65536 feedback=100000 ignore=n volsize=0 file=/dev/rmt0
log=imp_icdmain_yyyymmdd.log
tables=commoninformation,serviceinfo
完全模式
如果備份方式為完全模式,採用下列恢複方法:
若從本地檔案恢複,使用如下命令:
imp system/manager rows=y indexes=n commit=y buffer=65536
feedback=100000 ignore=y volsize=0 full=y
file=exp_icdmain_yyyymmdd.dmp
log=imp_icdmain_yyyymmdd.log
若從磁帶裝置恢複,使用如下命令:
imp system/manager rows=y indexes=n commit=y buffer=65536
feedback=100000 ignore=y volsize=0 full=y
file=/dev/rmt0
log=imp_icdmain_yyyymmdd.log
參數說明
1. ignore參數
Oracle在恢複資料的過程中,當恢複某個表時,該表已經存在,就要根據ignore參數的設定來決定如何操作。
若ignore=y,Oracle不執行CREATE TABLE語句,直接將資料插入到表中,如果插入的記錄違背了約束條件,比如主鍵約束,則出錯的記錄不會插入,但合法的記錄會添加到表中。
若ignore=n,Oracle不執行CREATE TABLE語句,同時也不會將資料插入到表中,而是忽略該表的錯誤,繼續恢複下一個表。
2. indexes參數
在恢複資料的過程中,若indexes=n,則表上的索引不會被恢複,但是主鍵對應的唯一索引將無條件恢複,這是為了保證資料的完整性。
字元集轉換
對於單一位元組字元集(例如US7ASCII),恢複時,資料庫自動轉換為該會話的字元集(NLS_LANG參數);對於多位元組字元集(例如ZHS16CGB231280),恢複時,應盡量使字元集相同(避免轉換),如果要轉換,目標資料庫的字元集應是輸出資料庫字元集的超集。
恢複方法
業務資料庫採用表恢複方案。在用IMP進行恢複前,先在SYS使用者下運行CATEXP.SQL檔案(如果以前已運行該檔案,則不要執行這個指令碼),然後執行下列命令:
IMP ICDMAIN/ICD FILE=檔案名稱 LOG=LOG檔案名稱 ROWS=Y
COMMIT=Y BUFFER=Y IGNORE=Y TABLES=表名
註:要恢複的表名參照備份的表名
恢複是在原表基礎上累加資料
沒有特殊說明,不允許在用戶端執行恢複命令
更多內容請登入:訊馳線上,www.xconnet.com
Oracle資料匯入匯出命令