對於資料庫操作,資料的備份與還原是必不可少的。下面與大家一塊分享一下網路上的相關資訊 用IMP和EXP 處理的: EXP userid=<username>/<password>@<service_name> file=<dmpname> IMP userid==<username>/<password>@<service_name> file=<dmpname> fromuser=<fromuser> touser=<touser> 執行個體: 資料的匯出 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 遠程備份 的時候只要將mailto:“@%3Cservice_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 對於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_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。