執行環境:
可以在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他們所包裹的類,完成導入導出功能。
用
IMP和EXP處理的:
EXP userid=<username>/<password>@<service_name> file=<dmpname>
IMP userid==<username>/<password>@<service_name> file=<dmpname> fromuser=<fromuser> touser=<touser>
(eg: IMP
emp/emp@ora9i file=e:emp.dmp fromuser=emp touser=emp )
實例:
數據的導出
exp qhmis/qhmis@qhmis file='d:\backup\qhmis\qhmis20060526.dmp' grants=y full=n
1 將數據庫TEST完全導出,用戶名system 密碼manager 導出到D:\daochu.dmp中
exp system/manager@TEST file=d:\daochu.dmp full=y
2 將數據庫中system用戶與sys用戶的表導出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
3 將數據庫中的表table1 、table2導出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)
4 將數據庫中的表table1中的字段filed1以"00"打頭的數據導出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"
上面是常用的導出,對于壓縮我不太在意,用winzip把dmp文件可以很好的壓縮。
不過在上面命令后面 加上 compress=y 就可以了
數據的導入
1 將D:\daochu.dmp 中的數據導入 TEST數據庫中。
imp system/manager@TEST file=d:\daochu.dmp
上面可能有點問題,因為有的表已經存在,然后它就報錯,對該表就不進行導入。
在后面加上 ignore=y 就可以了。
2 將d:\daochu.dmp中的表table1 導入
imp system/manager@TEST file=d:\daochu.dmp tables=(table1)
下面這句是執行將c盤的oracle的備份的用戶qhmis導入到用戶qhmis的數據庫
imp qhmis/qhmis@qhmis file='c:qhmis20060224.dmp' ignore=n grants=y full=y
遠程備份的時候只要將“@<service_name>”@后的部分改成連接數據庫的方式就可以了,
如:LSD_192.168.1.33
這是我在..\ora92\network\admin\tnsnames.ora中自己設置的,
代碼如下:
LSD_192.168.1.32 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.32)(PORT = 1521))
)
(CONNECT_DATA =
(SID = ora9i)
(SERVER = DEDICATED)
)
)
注:其中紅色部分是要自己改寫的
******************************************************************
進階:
將一個數據庫的某用戶的所有表導到另外數據庫的一個用戶下面的例子
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
對于數據庫備份,建議采用增量備份,即只備份上一次備份以來更改的數據。增量備份
命令:
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. 只對完整數據庫備份有效,且第一次需要full=y參數,以后需要inctype=incremental參數。
2. 用戶必須有EXP_FULL_DATABASE的系統角色。
3. 話務量較小時方可采用數據庫備份。
4. 如果磁盤有空間,建議備份到磁盤,然后再備份到磁帶。
業務數據庫備份方法及周期
用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_cs
d_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_yy
yymmdd.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_yy
yymmdd.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=表名
注:要恢復的表名參照備份的表名
。恢復是在原表基礎上累加數據
。沒有特殊說明,不允許在客戶端執行恢復命令
附錄一:
給用戶增加導入數據權限的操作
第一,啟動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
windows環境下的oracle服務
注:SID - 數據庫標識
HOME_NAME - Oracle Home名稱,如OraHome92、OraHome81
(1)OracleServiceSID
數據庫服務,這個服務會自動地啟動和停止數據庫。如果安裝了一個數據庫,它的缺省啟動類型為自動。服務進程為ORACLE.EXE,參數文件initSID.ora,日志文件SIDALRT.log,控制臺SVRMGRL.EXE、SQLPLUS.EXE。
(2)OracleHOME_NAMETNSListener
監聽器服務,服務只有在數據庫需要遠程訪問時才需要(無論是通過另外一臺主機還是在本地通過 SQL*Net 網絡協議都屬于遠程訪問),不用這個服務就可以訪問本地數據庫,它的缺省啟動類型為自動。服務進程為TNSLSNR.EXE,參數文件Listener.ora,日志文件listener.log,控制臺LSNRCTL.EXE,默認端口1521、1526。
(3)OracleHOME_NAMEAgent
OEM代理服務,接收和響應來自OEM控制臺的任務和事件請求,只有使用OEM管理數據庫時才需要,它的缺省啟動類型為自動。服務進程為DBSNMP.EXE,參數文件snmp_rw.ora,日志文件nmi.log,控制臺LSNRCTL.EXE,默認端口1748。
(4)OracleHOME_NAMEClientCache
名字緩存服務,服務緩存用于連接遠程數據庫的Oracle Names 數據。它的缺省啟動類型是手動。然而,除非有一臺Oracle Names 服務器,否則沒有必要運行這個服務。服務進程為ONRSD.EXE,參數文件NAMES.ORA,日志文件ONRSD.LOG,控制臺NAMESCTL.EXE。
(5)OracleHOME_NAMECMAdmin
連接管理服務,是構建Connection Manager服務器所用,只有服務器作為Connection Manager才需要,它的缺省啟動類型是手動。服務進程為CMADMIN.EXE,參數文件CMAN.ORA,日志文件CMADM_PID.TRC,控制臺CMCTL.EXE,默認端口1830。
(6)OracleHOME_NAMECMan
連接網關服務,是構建Connection Manager服務器所用,只有服務器作為Connection Manager才需要,它的缺省啟動類型是手動。服務進程為CMGW.EXE,參數文件CMAN.ORA,日志文件CMAN_PID.TRC,控制臺CMCTL.EXE,默認端口1630。
(7)OracleHOME_NAMEDataGatherer
性能包數據采集服務,除非使用Oracle Capacity Planner 和 Oracle Performance Manager,否則不需要啟動,它的缺省啟動類型是手動。服務進程為VPPDC.EXE,日志文件alert_dg.log,控制臺vppcntl.exe。
(8)OracleHOME_NAMEHTTPServer
Oracle提供的WEB服務器,一般情況下我們只用它來訪問Oracle Apache 目錄下的Web 頁面,比如說JSP 或者modplsql 頁面。除非你使用它作為你的HTTP服務,否則不需要啟動(若啟動它會接管IIS的服務),它的缺省啟動類型是手動。服務進程為APACHE.EXE,參數文件httpd.conf,默認端口80。
(9)OracleHOME_NAMEPagingServer
通過一個使用調制解調器的數字傳呼機或者電子郵件發出警告(沒試過),它的缺省啟動類型是手動。服務進程PAGNTSRV.EXE,日志文件paging.log。
(10)OracleHOME_NAMENames
Oracle Names服務,只有服務器作為Names Server才需要,它的缺省啟動類型是手動。服務進程NAMES.EXE,參數文件NAMES.ORA,日志文件NAMES.LOG,控制臺NAMESCTL.EXE,默認端口1575。
(11)OracleSNMPPeerMasterAgent
SNMP服務代理,用于支持SNMP的網管軟件對服務器的管理,除非你使用網管工具監控數據庫的情況,否則不需要啟動,它的缺省啟動類型是手動。服務進程為AGNTSVC.EXE,參數文件MASTER.CFG,默認端口161。
(12)OracleSNMPPeerEncapsulater
SNMP協議封裝服務,用于SNMP協議轉換,除非你使用一個不兼容的SNMP代理服務,否則不需要啟動,它的缺省啟動類型是手動。服務進程為ENCSVC.EXE,參數文件ENCAPS.CFG,默認端口1161。
(13)OracleHOME_NAMEManagementServer
OEM管理服務,使用OEM時需要,它的缺省啟動類型是手動。服務進程為OMSNTSVR.EXE,日志文件oms.nohup。