Oracle資料匯入匯出imp/exp?批次檔

來源:互聯網
上載者:User

來源:http://secyaher.blog.163.com/blog/static/389557720092935857930/

如何寫批次檔自動將資料匯入oracle資料庫Oracle資料庫的自動匯入與匯出,在許多地方有廣泛的應用.例如:一個Oracle資料庫應用系統開發結束後,如果要將系統安裝到客戶電腦上,就需要將初始資料匯入到使用者的Oracle資料庫中.
最近項目中也需要實現以上功能,花了點時間搜尋實驗,整理如下: 先把要安裝的初始資料檔案匯出為initial.dmp,然後在客戶計算上安裝好oracle,接著執行批次檔impInitialData.bat(與該批次檔同一目錄還有createuser.sql,initial.dmp兩個檔案) impInitialData.bat中內容如下:
@echo off
sqlplus system/manager @createuser
imp system/manager file=initial.dmp fromuser=initialuser touser=initialuser ignore = y 上面的createuser是一個副檔名為sql的檔案.與批次檔放在同一目錄下.其內容為:
create user initialuser identified by test;
grant dba,resource,connect to initialuser;
exit; 簡要解釋一下:
@echo off 表示其之後的命令不在命令提示字元視窗顯示出來
sqlplus為oracle的一個工具程式,須先安裝oracle後才能使用
system/manager 為oracle的一個預設系統管理員帳戶,如果被鎖定或更改密碼了就不能用了,可以用其它的帳戶/密碼來替換;
@createuser 表示執行createuser.sql檔案
該sql檔案中, create user xx identified by yy;表示建立一個密碼為yy的使用者xx;
grant dba,resource,connect to xx;表示授權給使用者xx dba,resource,connect 許可權  imp 為匯入資料命令,後面的參數中 file表示要匯入的資料庫檔案;fromuser表示原匯出的資料庫檔案的使用者名稱;touser表示要匯入的資料庫的使用者名稱;ignore表示忽略錯誤 大致的方法就是這樣,可以再增添其它命令來執行更複雜的操作.Oracle資料匯入匯出imp/exp

功能:Oracle資料匯入匯出imp/exp就相當與oracle資料還原與備份。
 大多情況都可以用Oracle資料匯入匯出完成資料的備份與還原(不會造成資料的丟失)。
 
 Oracle有個好處,雖然你的電腦不是伺服器,但是你裝了oracle用戶端,並建立了串連
 (通過net8 assistant中本地-->服務命名 添加正確的服務命名
 其實你可以想成是用戶端與伺服器端修了條路,然後資料就可以被拉過來了)
 這樣你可以把資料匯出到本地,雖然可能伺服器離你很遠。
 你同樣可以把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/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) 
 
 基本上上面的匯入匯出夠用了。不少情況我是將表徹底刪除,然後匯入。
 
注意:
 你要有足夠的許可權,許可權不夠它會提示你。
 資料庫時可以連上的。可以用tnsping TEST 來獲得資料庫TEST能否連上。

以前我們一般都是使用PL/SQL Developer來實現,但是PL/SQL Developer在匯出、匯入資料時有兩個問題:
      1、要把表資料和對象(預存程序、視圖)分開匯出
      2、匯出的視圖如果有注釋,那麼在匯入時常常會出錯。

      其實,PL/SQL的匯出、匯入功能使用的是Oracle內建的工具:exp和imp,這兩個工具的匯出匯入資料時提供了很多功能,PL/SQL 只是使用其中的一些功能。下面對它們簡單介紹一下:

      1 exp/imp使用方法及執行個體
  
  exp/imp為一種Database Backup恢複工具也可以作為不同資料庫之間傳遞資料的工具兩個資料庫所在的作業系統可以不同exp 可以將資料庫資料匯出為二進位檔案imp 可以將匯出的資料檔案再匯入到相同的資料庫或不同的資料庫
  
  資料庫匯出有四種模式full(全庫匯出), owner(使用者匯出), table(表匯出), tablespace(資料表空間匯出).
  
  full( 全庫匯出): 匯出除ORDSYS,MDSYS,CTXSYS,ORDPLUGINS,LBACSYS 這些系統使用者之外的所有使用者的資料.
  
  owner( 使用者匯出): 匯出某個或某些使用者的所有許可權和資料.
  
  tables( 表匯出): 匯出某些表(可以是不同使用者的)的結構和資料.
  
  tablespace( 資料表空間匯出):資料表空間匯出資料.
  
  執行exp 有三種方法:互動式,命令列和參數檔案
  
  互動式:直接輸入exp 命令使用者可以按照exp 提示的資訊一步一步操作,比較簡單.
  
  命令列:輸入命令列exp username/password parameter=value.
  
  參數檔案:輸入命令列exp username/password parfile=filename exp 所需的參數從參數檔案引入.
  
  參數是可以重複的優先順序為命令列優於參數檔案後面的參數值覆蓋於前面的參數值.
  
  參數介紹

         詳細的介紹可通過exp help=y或imp helpe=y來查看。下面只對一些常用的參數進行說明。
  
  buffer 緩衝區大小如果此值設為0 則一次只匯入一條記錄對資料量大的匯出可以設定較大一般預設值即可.
  
  file 匯出的檔案清單可以指定一個或多個檔案名稱預設副檔名為.dmp 預設匯出檔案名稱為expdat.dmp.
  
  filesize exp 匯出檔案的最大位元組數超出時從檔案清單中擷取下一個檔案名稱,沒有,則提示輸入新的檔案名稱.
  
  help 顯示export 參數協助資訊
  
  inctype 增量備份的類型:complete(完全),cumulative(累積)和incremental (增量).
  
  只可以在全庫匯出模式下才可以做完全累積或增量匯出累積匯出只匯出自上次累積匯出或完全匯出以來已經修改的表增量匯出只匯出自上次增量累積或完全匯出以來已經修改的表完全匯出將資料庫中全部對象都匯出不管是否以及何時被修改.
  
  log:記錄檔,一般如果以命令列匯入時,將log 設定上比較好可以看,到所有的匯入資訊,匯入資訊哪兒出錯,匯入了那些資料庫物件.
  
  show(imp):只是用來顯示備份資料檔案的內容.
  
  full:為Y 時表示在全庫方式下匯出預設為N.
  
  tables:匯出的表列表可以指定一個或多個表名.
  
  fromuser(imp):可以將匯出檔案中的一個使用者模式的資料對象匯入為另一個使用者模式的對象此參數表示匯出檔案中的使用者模式.
  
  touser(imp):此參數表示匯入到資料庫中時使用的使用者模式對象譬如使用全庫或者使用者模式匯出caittmdba使用者的所有對象到一個檔案中匯入時需要將使用者模式名稱改為caittmdba1此時fromuser 為caittmdba,touser 為caittmdba1

       匯出、匯入執行個體
      
      匯出資料:
       D:\oracle\ora92\bin\exp userid=caittmdba/cait@YSDB_192.168.1.2 owner=caittmdba file=e:\%DATE%.dmp log=e:\exp.log
       通過該命令可以把caittmdba這個使用者所屬的所有資料、對象匯出到一個檔案中,匯出的日誌寫在e:\exp.log檔案中,串連Oracle的本地服務名為YSDB_192.168.1.2,匯出的檔案為e:\%DATE%.dmp,這個檔案的檔案名稱是當前的日期。如果把這個命令寫成批次檔,並放到計劃任務中,就可以自動進行備份資料了。

      匯入資料:
      D:\oracle\ora92\bin\imp userid=caittmdba/cait@YSDB_192.168.1.2 fromuser=caittmdba touser=caittmdba file=e:\data.dmp log=e:\imp.log

      注意事項

      在匯出資料時常常會出現Oracle 942 錯誤,這個錯誤往往是在對Oracle進行了升級後才會出現,這是Oracle升級程式的一個Bug(Oracle的Bug和補丁一直以來都是滿天飛,而且不成體系,文檔和支援人員以少,這一點和MS比起來就差很遠了。如果大家去看一看Oracle的發展經曆相關的文章就知道,Oracle從開始就這樣)。
      這個Bug只需要執行ORACLE_HOME/rdbms/admin/catpatch.sql 指令碼就可以了,同時要注意調大java_pool_size 和shared_pool_size這兩個參數的大小,不然會很花時間的。在用sysdba的身份登入進SQL Plus執行下面的命令:
         SQL>shutdown immediate;
         SQL>startup migrate;
         SQL>@?/rdbms/admin/catpatch.sql
      大約半個小時就可以執行完了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.