oracle data pump

jss001發表於2009-02-20
在Oracle 10g中, exp 和 imp 被重新設計為Oracle Data Pump(雖然Oracle 仍然裝載了exp 和imp,並完全地支援它們)。如果你以前使用過exp 和 imp,那麼Data Pump 的命令列程式的語法對你來說就不陌生了。
  
  Data Pump 是執行在資料庫內部的, 而不是像一個獨立的客戶端應用程式一樣存在。這就意味著這部分的工作在一定程度上獨立於發起執行匯入或者匯出任務的程式 。 在一臺機器上 (例如一個定期任務) 可以開始執行匯出的任務,而另一臺機器上 (例如 DBA 的 手提電腦) 可以對任務的執行狀態進行監控。 也正因為任務是執行在資料庫內部的,所以如果你要將資料匯出到一個檔案中,那麼你首先要做的事情就是為輸出路徑建立一個資料庫的DIRECTORY 物件,然後給將要進行資料匯入和匯出的使用者授權訪問,命令如下:
  
  create or replace directory dumpdir as 'c:';
  
  grant read,write on directory dumpdir to scott;
  
  一旦該路經被授權後,就可以透過以下的命令引數匯出使用者的物件,這些命令與 exp 和 imp 中的命令非常相似:
  
  expdp scott/tiger directory=dumpdir dumpfile=scott.dmp
  
   當匯出工作開始執行以後,可以透過按下[Ctrl]C (或者是客戶端中具有相同功能的按鍵) 來“中止”匯出任務。這樣就不會再有資料傳送到你的客戶端了,但是該任務在資料庫中仍然還在執行。你的客戶端會進入互動模式(出現Export>提 示符)。 在提示符後輸入status就可以檢視到當前有哪些任務正在執行。如果在客戶端輸入expdp attach=,你就可以連線到一個正在執行的任務上。
  
  Data Pump 並不是一定要寫入到檔案中。現在可以透過選項設定就可以將資料庫物件透過SQL*Net直接導到一個遠端資料庫中。你所要做的就僅僅是指定remote 選項,然後加上與遠端資料庫連線的連線字串。 這就有點類似於對資料庫的一次性複製過程。
  
   Data Pump 執行起來要比原來的exp 和 imp 客戶端命令快得多。Data Pump 執行得更快是因為它有一個新特性——“parallel”選項。選定這個選項後,Data Pump 將會以四個不同的執行緒同時壓送資料。下面舉個例子,我先執行下面的任務,然後按 [Ctrl]C,接著察看後臺任務的狀態:
  
  expdp scott/tiger directory=dumpdir dumpfile=scott2.dmp parallel=4
  job_name=scott2
  
  Export: Release 10.1.0.2.0 - Production on Friday, 31 December, 2004 14:54
  
  Copyright (c) 2003, Oracle. All rights reserved.
  
  Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 -
  Production
  With the Partitioning, OLAP and Data Mining options
  FLASHBACK automatically enabled to preserve database integrity.
  Starting "SCOTT"."SCOTT2": scott/******** directory=dumpdir
  dumpfile=scott2.dmp parallel=4 job_name=scott2
  Estimate in progress using BLOCKS method...
  
  Export> status
  
  Job: SCOTT2
  Operation: EXPORT
  Mode: SCHEMA
  State: EXECUTING
  Bytes Processed: 0
  Current Parallelism: 4
  Job Error Count: 0
  Dump File: C:SCOTT2.DMP
  bytes written: 4,096
  
  Worker 1 Status:
  State: EXECUTING
  
  Worker 2 Status:
  State: WORK WAITING
  
  Worker 3 Status:
  State: WORK WAITING
  
  Worker 4 Status:
  State: WORK WAITING
  
   其實不僅僅只有Data Pump 是在資料庫內部執行的,事實上大部分的命令列性質的命令都是在資料庫內部執行的,只不過是透過一個PL/SQL API—— DBMS_DATAPUMP顯示出來。例如,可以透過以下的PL/SQL程式碼來實現透過PL/SQL 包啟動匯出任務:
  
  declare
  handle number;
  begin
  handle := dbms_datapump.open('EXPORT','SCHEMA');
  dbms_datapump.add_file(handle,'SCOTT3.DMP','DUMPDIR');
  dbms_datapump.metadata_filter(handle,'SCHEMA_EXPR','= ''SCOTT''');
  dbms_datapump.set_parallel(handle,4);
  dbms_datapump.start_job(handle);
  dbms_datapump.detach(handle);
  end; /
  
   仔細研究 Data Pump ,你可以瞭解到 Data Pump 其他更多的新特性。例如,Data Pump 可以對資料檔案重新命名,可以將物件移動到不同的表空間中,還可以透過使用萬用字元結構或者是語句來查詢圖表物件或是圖表。Data Pump 還可以用作外部表的介面 (例如,可以將一個表與儲存在一個資料泵匯出檔案中的資料關聯起來,這就像Oracle 9i 以及更高版本中的Oracle Loader 介面一樣)。
[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18921899/viewspace-1017654/,如需轉載,請註明出處,否則將追究法律責任。

相關文章