標籤:
oracle匯入匯出命令詳解(附資料庫每天定時備份指令碼)一. 匯出工具 exp1. 它是作業系統下一個可執行檔檔案 存放目錄/ORACLE_HOME/bin exp匯出工具將資料庫中資料備份壓縮成一個二進位系統檔案.可以在不同OS間遷移 它有三種模式: a. 使用者模式: 匯出使用者所有對象以及對象中的資料; b. 表模式: 匯出使用者所有表或者指定的表; c. 整個資料庫: 匯出資料庫中所有對象。2. 匯出工具exp互動式命令列方式的使用的例子$exp test/[email protected]Enter array fetch buffer size: 4096 > 斷行符號Export file: expdat.dmp > m.dmp 產生匯出的檔案名稱 (1)E(ntire database), (2)U(sers), or (3)T(ables): (2)U > 3Export table data (yes/no): yes > 斷行符號Compress extents (yes/no): yes > 斷行符號Export done in ZHS16GBK character set and ZHS16GBK NCHAR character setAbout to export specified tables via Conventional Path ...Table(T) or Partition(T:P) to be exported: (RETURN to quit) > cmamenu 要匯出的表名. . exporting table CMAMENU 4336 rows exportedTable(T) or Partition(T:P) to be exported: (RETURN to quit) >要匯出的表名nTable(T) or Partition(T:P) to be exported: (RETURN to quit) > 斷行符號Export terminated successfully without warnings. 3. 匯出工具exp非互動式命令列方式的例子$exp scott/tiger tables=emp,dept file=/directory/scott.dmp grants=y 說明:把scott使用者裡兩個表emp,dept匯出到檔案/directory/scott.dmp$exp scott/tiger tables=emp query=\"where job=\‘salesman\‘ and sal\<1600\" file=/directory/scott2.dmp 說明:在exp裡面加上匯出emp的查詢條件job=‘salesman‘ and sal<1600 (但我個人很少這樣用,還是把滿足條件的記錄產生暫存資料表後,再exp會方便一些)$exp parfile=username.par file=/directory1/username_1.dmp,/directory1/username_2.dmp filesize=2000M log=/directory2/username_exp.log參數檔案username.par內容userid=username/userpasswordbuffer=8192000compress=ngrants=y說明:username.par為匯出工具exp用的參數檔案,裡面具體參數可以根據需要去修改 filesize指定產生的二進位備份檔案的最大位元組數 (可用來解決某些OS下2G物理檔案的限制及加快壓縮速度和方便刻曆史資料光碟片等)4. 命令參數說明關鍵字 說明(預設)---------------------------------------------------USERID 使用者名稱/口令FULL 匯出整個檔案 (N)BUFFER 資料緩衝區的大小OWNER 所有者使用者名稱列表FILE 輸出檔案 (EXPDAT.DMP)TABLES 表名列表COMPRESS 匯入一個範圍 (Y)RECORDLENGTH IO 記錄的長度GRANTS 匯出許可權 (Y)INCTYPE 增量匯出類型INDEXES 匯出索引 (Y)RECORD 跟蹤增量匯出 (Y)ROWS 匯出資料行 (Y)PARFILE 參數檔案名稱CONSTRAINTS 匯出限制 (Y)CONSISTENT 交叉表一致性LOG 螢幕輸出的記錄檔STATISTICS 分析對象 (ESTIMATE)DIRECT 直接路徑 (N)TRIGGERS 匯出觸發器 (Y)FEEDBACK 顯示每 x 行 (0) 的進度FILESIZE 各轉儲檔案的最大尺寸QUERY 選定匯出表子集的子句下列關鍵字僅用於可傳輸的資料表空間TRANSPORT_TABLESPACE 匯出可傳輸的資料表空間中繼資料 (N)TABLESPACES 將傳輸的資料表空間列表二.匯入工具 imp1. 它是作業系統下一個可執行檔檔案 存放目錄/ORACLE_HOME/binimp匯入工具將EXP形成的二進位系統檔案匯入到資料庫中. 它有三種模式: a. 使用者模式: 匯出使用者所有對象以及對象中的資料; b. 表模式: 匯出使用者所有表或者指定的表; c. 整個資料庫: 匯出資料庫中所有對象。 只有擁有IMP_FULL_DATABASE和DBA許可權的使用者才能做整個資料庫匯入 imp步驟: (1) create table (2) insert data (3) create index (4) create triggers,constraints2.匯入工具imp互動式命令列方式的例子$ impImport: Release 8.1.6.0.0 - Production on 星期五 12月 7 17:01:08 2001(c) Copyright 1999 Oracle Corporation. All rights reserved.使用者名稱: test口令:****串連到: Oracle8i Enterprise Edition Release 8.1.6.0.0 - 64bit ProductionWith the Partitioning optionJServer Release 8.1.6.0.0 - Production匯入檔案: expdat.dmp> /tmp/m.dmp輸入插入緩衝區大小(最小為 8192 ) 30720>經由常規路徑匯出由EXPORT:V08.01.06建立的檔案警告: 此對象由 TEST 匯出, 而不是目前使用者已經完成ZHS16GBK字元集和ZHS16GBK NCHAR 字元集中的匯入只列出匯入檔案的內容(yes/no):no>由於對象已存在, 忽略建立錯誤(yes/no):no> yes匯入許可權(yes/no):yes>匯入表資料(yes/no):yes>匯入整個匯出檔案(yes/no):no> yes. 正在將TEST的對象匯入到 SCOTT. . 正在匯入表 "CMAMENU" 4336行被匯入成功終止匯入,但出現警告。 3.匯入工具imp非互動式命令列方式的例子$ imp system/manager fromuser=jones tables=(accts) $ imp system/manager fromuser=scott tables=(emp,dept) $ imp system/manager fromuser=scott touser=joe tables=emp $ imp scott/tiger file = expdat.dmp full=y $ imp scott/tiger file = /mnt1/t1.dmp show=n buffer=2048000 ignore=n commit=y grants=y full=y log=/oracle_backup/log/imp_scott.log$ imp system/manager parfile=params.dat params.dat 內容 file=dba.dmp show=n ignore=n grants=y fromuser=scott tables=(dept,emp) 4.匯入工具imp可能出現的問題(1) 資料庫物件已經存在一般情況, 匯入資料前應該徹底刪除目標資料下的表, 序列, 函數/過程,觸發器等; 資料庫物件已經存在, 按預設的imp參數, 則會匯入失敗如果用了參數ignore=y, 會把exp檔案內的資料內容匯入如果表有唯一關鍵字的約束條件, 不合條件將不被匯入如果表沒有唯一關鍵字的約束條件, 將引起記錄重複(2) 資料庫物件有主外鍵約束 不符合主外鍵約束時, 資料會匯入失敗 解決辦法: 先匯入主表, 再匯入依存表disable目標匯入對象的主外鍵約束, 匯入資料後, 再enable它們(3) 許可權不夠如果要把A使用者的資料匯入B使用者下, A使用者需要有imp_full_database許可權(4) 匯入大表( 大於80M ) 時, 儲存分配失敗 預設的EXP時, compress = Y, 也就是把所有的資料壓縮在一個資料區塊上. 匯入時, 如果不存在連續一個大資料區塊, 則會匯入失敗. 匯出80M以上的大表時, 記得compress= N, 則不會引起這種錯誤.(5) imp和exp使用的字元集不同 如果字元集不同, 匯入會失敗, 可以改變unix環境變數或者NT註冊表裡NLS_LANG相關資訊. 匯入完成後再改回來.(6) imp和exp版本不能往上相容imp可以成功匯入低版本exp產生的檔案, 不能匯入高版本exp產生的檔案根據情況我們可以用$ imp username/[email protected]_string說明: connect_string 是在/ORACLE_HOME/network/admin/tnsnames.ora 定義的本地或者遠端資料庫的名稱5.命令參數說明關鍵字 說明(預設) ----------------------------------------------USERID 使用者名稱/口令FULL 匯入整個檔案 (N)BUFFER 資料緩衝區大小FROMUSER 所有人使用者名稱列表FILE 輸入檔案 (EXPDAT.DMP)TOUSER 使用者名稱列表SHOW 只列出檔案內容 (N)TABLES 表名列表IGNORE 忽略建立錯誤 (N)RECORDLENGTH IO 記錄的長度GRANTS 匯入許可權 (Y)INCTYPE 增量匯入類型INDEXES 匯入索引 (Y)COMMIT 提交數組插入 (N)ROWS 匯入資料行 (Y)PARFILE 參數檔案名稱LOG 螢幕輸出的記錄檔CONSTRAINTS 匯入限制 (Y)DESTROY 覆蓋資料表空間資料檔案 (N)INDEXFILE 將表/索引資訊寫入指定的檔案SKIP_UNUSABLE_INDEXES 跳過不可用索引的維護 (N)ANALYZE 執行轉儲檔案中的 ANALYZE 語句 (Y)FEEDBACK 顯示每 x 行 (0) 的進度TOID_NOVALIDATE 跳過指定類型 id 的校正FILESIZE 各轉儲檔案的最大尺寸RECALCULATE_STATISTICS 重新計算統計值 (N)下列關鍵字僅用於可傳輸的資料表空間TRANSPORT_TABLESPACE 匯入可傳輸的資料表空間中繼資料 (N)TABLESPACES 將要傳輸到資料庫的資料表空間DATAFILES 將要傳輸到資料庫的資料檔案TTS_OWNERS 擁有可傳輸資料表空間集中資料的使用者三. unix下oracle資料庫定時備份指令碼(按使用者備份)以下命令可以用crontab方式每天夜裡2點定時執行,指令碼最多分30個檔案,每個檔案大小最大1G的形式將資料庫匯出,如果資料庫資料量很大,多於30G,則會匯出不成功,此時只需根據資料量大小調整變數num的值即可。該指令碼將資料庫匯出後用gzip進行壓縮,然後儲存到系統/data/expfiles,匯出之前,會將前一天的備份移到/data/expfiles_bak,此種備份方式可以儲存最近兩天的資料備份。outfile=`date +%Y%m%d_%H%M`num=30i=1files=if [ ! -d /data/expfiles ]; thenmkdir /data/expfilesfiif [ ! -d /data/expfiles_bak ]; thenmkdir /data/expfiles_bakfidfile=`ls -1 /data/expfiles_bak/|awk ‘{if ( NR < 2 ) {print $1}}‘`prefix=`echo | awk ‘{print substr("‘"${dfile}"‘",1,13)}‘`rm -f /data/expfiles_bak/${prefix}*dfile=`ls -1 /data/expfiles/|awk ‘{if ( NR < 2 ) {print $1}}‘`prefix=`echo | awk ‘{print substr("‘"${dfile}"‘",1,13)}‘`mv /data/expfiles/${prefix}* /data/expfiles_bakwhile [ $i -lt $num ]dofiles=$files/data/expfiles/${outfile}_$i.dmp,i=` expr $i + 1 `donefiles=$files/data/expfiles/${outfile}_$i.dmp#echo $filesexp userid=user/[email protected] FILE=$files filesize=1024M grants=N 2>>exp_rpt.loggzip /data/expfiles/${outfile}*1、Oracle資料庫匯出的命令,參考下面的exp system/[email protected] file=d:\mb.dmp owner=(scott)-------------------------------------------資料匯出: 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 將資料庫中的表table1 、table2匯出 exp system/[email protected] file=d:\daochu.dmp tables=(table1,table2) 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 ignore=y 上面可能有點問題,因為有的表已經存在,然後它就報錯,對該表就不進行匯入。 在後面加上 ignore=y 就可以了。 imp aichannel/[email protected] full=y file=d:\datanewsmgnt.dmp ignore=y imp aichannel/[email protected] full=y file=e:\20150714-1.dmp ignore=y 2 將d:\daochu.dmp中的表table1 匯入 imp aichannel/[email protected] file=d:\daochu.dmp tables=(table1) imp aichannel/[email protected] file=d:\daochu.dmp tables=(table1) 基本上上面的匯入匯出夠用了。不少情況我是將表徹底刪除,然後匯入。---------tfx案例一:在9.3上的9I資料庫aichannel進行匯入匯出操作1、運行>>cmd2、d:3、cd D:\oracle\ora92\bin4、exp aichannel/[email protected] file=e:\20150714-1.dmp full=y5、imp aichannel/[email protected] full=y file=e:\20150714-1.dmp ignore=y --單表匯入
imp system/[email protected] file=e:\0825.dmp tables=(acd_code,acd_codetype) ignore=y buffer=(5400000)
---------tfx注意: 操作者要有足夠的許可權,許可權不夠它會提示。 資料庫時可以連上的。可以用tnsping TEST 來獲得資料庫TEST能否連上。 可以通過輸入 IMP 命令和您的使用者名稱/口令後接使用者名稱/口令的命令:常式: IMP SCOTT/TIGER或者, 可以通過輸入 IMP 命令和各種參數來控制“匯入”按照不同參數。要指定參數,您可以使用關鍵字:格式: IMP KEYWORD=value 或 KEYWORD=(value1,value2,...,vlaueN)常式: IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N或 TABLES=(T1: P1,T1: P2),如果 T1 是分區表附錄一: 給使用者增加匯入資料許可權的操作 第一,啟動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:WorkOracle_Databackup>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
oracle的emp匯入imp匯出命令