| 導購 | 订阅 | 在线投稿
分享
 
 
當前位置: 王朝網路 >> oracle >> 教你怎樣在Oracle數據庫中高速導出/導入
 

教你怎樣在Oracle數據庫中高速導出/導入

2008-10-30 08:14:24  編輯來源:互聯網  简体版  手機版  評論  字體: ||
 
 
  迄今爲止,導出/導入工具集仍是跨多個平台轉移數據所需勞動強度最小的首選實用工具,盡管人們常常抱怨它速度太慢。導入只是將每條記錄從導出轉儲文件中讀出來,然後使用常見的 INSERT INTO 命令將其插入到目標表中,因此導入可能是個很慢的過程,這一點並不讓人感到吃驚。

  進入 Oracle Data Pump,Oracle Database 10g 中的導出/導入工具包的更新更快的同類工具,它被設計來成倍地加速這個過程。

  Data Pump 反映了整個導出/導入過程的徹底革新。它不是使用常見的 SQL 命令,而是應用專用 API 來以更快得多的速度加載和卸載數據。在我的測試中,我看到導出性能比在直接模式下提高了 10-15 倍,導入過程性能提高了 5 倍。此外,與使用導出實用工具不同,它還能夠只取出特定類型的對象(如過程)。

  Data Pump 導出

  這個新的實用工具稱爲 expdp,以和原來的導出 exp 區分開。在本例中,我們將用 Data Pump 來導出一個大表 CASES,大小約爲 3GB。Data Pump 在服務器端使用文件處理來創建和讀取文件;因此,目錄作爲位置使用。在這種情況下,我們將使用文件系統 /u02/dpdata1 來保存轉儲文件。

  create directory dpdata1 as '/u02/dpdata1';

  grant read, write on directory dpdata1 to ananda;

  

  接下來,我們將導出數據:

  expdp ananda/abc123 tables=CASES directory=DPDATA1

  dumpfile=expCASES.dmp job_name=CASES_EXPORT

  讓我們來分析該命令的各個部分。用戶 ID/口令組合、表和轉儲文件參數的意義是顯而易見的。與原來的導出不同,文件是在服務器(不是客戶端)上創建的。位置由目錄參數值 DPDATA1 指定,它指向之前創建的 /u02/dpdata1。這個進程還在目錄參數指定的位置上創建一個日志文件(同樣在服務器上)。默認地,這個進程使用一個名稱爲 DPUMP_DIR 的目錄;因此可以創建它來代替 DPDATA1。

  注意上面的參數 job_name,這是個特殊的參數,在原來的導出中沒有。所有的 Data Pump 工作都通過作業來完成。Data Pump 作業 — 與 DBMS 作業不同 — 只是服務器進程,它代表主進程處理數據。主進程(稱爲主控制進程)通過高級隊列 (AQ) 來協調這項工作;它通過在運行期內創建的一個特殊的表(稱爲主表)來實現這個目的。在我們的例子中,如果您在 expdp 運行時檢查用戶 ANANDA 的模式 ,您將注意到一個表 CASES_EXPORT 的存在(對應參數 job_name)。當 expdp 結束時,這個表被丟棄。

  導出監控

  當 Data Pump Export (DPE) 運行時,按 Control-C;它將阻止消息在屏幕上顯示,但不停止導出進程本身。相反,它將顯示 DPE 提示符(如下所示)。進程現在被認爲處于「交互式」模式:

  Export>

  這種方法允許在這個 DPE 作業上輸入幾條命令。要查看概要,在提示符下使用 STATUS 命令:

  Export> status

  Job:CASES_EXPORT

  Operation:EXPORT

  Mode:TABLE

  State:EXECUTING

  Degree: 1

  Job Error Count: 0

  Dump file:/u02/dpdata1/expCASES.dmp

  bytes written =2048

  Worker 1 Status:

  State:EXECUTING

  Object Schema:DWOWNER

  Object Name:CASES

  Object Type:TABLE_EXPORT/TBL_TABLE_DATA/TABLE/TABLE_DATA

  Completed Objects: 1

  Total Objects: 1

  Completed Rows: 4687818

  

  記住,這只是狀態顯示。導出在後台工作。要繼續在屏幕上查看消息,從 Export> 提示符下使用命令 CONTINUE_CLIENT。

  並行操作

  您可以通過 PARALLEL 參數爲導出使用一個以上的線程來顯著地加速作業。每個線程創建一個單獨的轉儲文件,因此參數 dumpfile 應當擁有和並行度一樣多的項目。您可以指定通配符作爲文件名,而不是顯式地輸入各個文件名,例如:

  expdp ananda/abc123 tables=CASES directory=DPDATA1

  dumpfile=expCASES_%U.dmp parallel=4 job_name=Cases_Export

  注意 dumpfile 參數擁有一個通配符 %U,它指示文件將按需要創建,格式將爲 expCASES_nn.dmp,其中 nn 從 01 開始,然後按需要向上增加。

  在並行模式下,狀態屏幕將顯示四個工作進程。(在默認模式下,只有一個進程是可見的。)所有的工作進程同步取出數據,並在狀態屏幕上顯示它們的進度。

  分離訪問數據文件和轉儲目錄文件系統的輸入/輸出通道是很重要的。否則,與維護 Data Pump 作業相關的開銷可能超過並行線程的效益,並因此而降低性能。並行方式只有在表的數量多于並行值並且表很大時才是有效的。

  數據庫監控

  您還可以從數據庫視圖獲得關于運行的 Data Pump 作業的更多信息。監控作業的主視圖是 DBA_DATAPUMP_JOBS,它將告訴您在作業上有多少個工作進程(列 DEGREE)在工作。另一個重要的視圖是 DBA_DATAPUMP_SESSIONS,當它與上述視圖和 V$SESSION 結合時將給出主前台進程的會話 SID。

  select sid, serial#

  from v$session s, dba_datapump_sessions d

  where s.saddr = d.saddr;

  

  這條指令顯示前台進程的會話。更多有用的信息可以從警報日志中獲得。當進程啓動時,MCP 和工作進程在警報日志中顯示如下:

  kupprdp:master process DM00 started with pid=23,

   OS id=20530 to execute -

  SYS.KUPM$MCP.MAIN('CASES_EXPORT', 'ANANDA');

  kupprdp:worker process DW01 started with worker

   id=1, pid=24, OS id=20532 to execute -

  SYS.KUPW$WORKER.MAIN('CASES_EXPORT', 'ANANDA');

  kupprdp:worker process DW03 started with worker

   id=2, pid=25, OS id=20534 to execute -

  SYS.KUPW$WORKER.MAIN('CASES_EXPORT', 'ANANDA');

  

  它顯示爲數據泵操作啓動的會話的 PID。您可以用以下查詢找到實際的 SID:

  select sid, program from v$session where paddr in

  (select addr from v$process where pid in (23,24,25));

  

  PROGRAM 列將對應警報日志文件中的名稱顯示進程 DM (爲主進程)或 DW (爲工作進程)。如果一個工作進程使用了並行查詢,比如說 SID 23,您可以在視圖 V$PX_SESSION 中看到它,並把它找出來。它將爲您顯示從 SID 23 代表的工作進程中運行的所有並行查詢會話:

  select sid from v$px_session where qcsid = 23;

  

  從視圖 V$SESSION_LONGOPS 中可以獲得其它的有用信息來預測完成作業將花費的時間。

  select sid, serial#, sofar, totalwork

  from v$session_longops

  where opname = 'CASES_EXPORT'

  and sofar != totalwork;

  

  列 totalwork 顯示總工作量,該列的 sofar 數量被加和到當前的時刻 — 因而您可以用它來估計還要花多長時間。

  Data Pump 導入

  不過,數據導入性能是 Data Pump 真正出色的地方。要導入先前導出的數據,我們將使用

  impdp ananda/abc123 directory=dpdata1

   dumpfile=expCASES.dmp job_name=cases_import

  導入進程的默認行爲是創建表和所有相關的對象,然後在表已存在時産生一個錯誤。如果您想把數據添加到一個現有的表中,您可以在上述命令行中使用 TABLE_EXISTS_ACTION=APPEND。

  和使用 Data Pump 導入一樣,在進程中按 Control-C 將進入 Date Pump Import (DPI) 的交互模式;同樣,提示符是 Import>。

  處理特定對象

  您是否有過只需要從一個用戶導出特定的過程,以在一個不同的數據庫或用戶中重新創建這些過程的情況?與傳統的導出實用工具不同,Data Pump 允許您只導出特定類型的對象。例如,以下命令讓您只導出過程,而不導出其它任何東西 — 不導出表、視圖、甚至函數:

  expdp ananda/iclaim directory=DPDATA1

   dumpfile=expprocs.dmp include=PROCEDURE

  

  要只導出一些特定的對象 — 比如說,函數 FUNC1 和過程 PROC1 — 您可以使用

  

  expdp ananda/iclaim directory=DPDATA1 dumpfile=expprocs.dmp

  include=PROCEDURE:\"=\'PROC1\'\",FUNCTION:\"=\'FUNC1\'\"

  

  這個轉儲文件充當了源對象的一個備份。您甚至可以用它來創建 DDL 腳本,以供之後使用。一個稱爲 SQLFILE 的特殊參數允許創建 DDL 腳本文件。

  

  impdp ananda/iclaim directory=DPDATA1

   dumpfile=expprocs.dmp sqlfile=procs.sql

  

  該指令在 DPDATA1 指定的目錄中創建一個名稱爲 procs.sql 的文件,並將對象的腳本包含在導出轉儲文件中。這種方法幫助您快速地在另一個模式中創建源對象。

  利用參數 INCLUDE 允許您從轉儲文件中定義要包含或排除的對象。您可以使用子句 INCLUDE=TABLE:"LIKE 'TAB%'" 來僅導出那些名稱以 TAB 開頭的表。類似地,您可以使用結構 INCLUDE=TABLE:"NOT LIKE 'TAB%'" 來排除所有名稱以 TAB 開頭的表。作爲另一種選擇,您可以使用 EXCLUDE 參數來排除特定的對象。

  通過外部表,Data Pump 還可以用來傳輸表空間;它非常強大,能夠即時地重定義並行方式,將更多的表添加到一個現有的進程中等等。
 
 
 
上一篇《操作Oracle的php類》
下一篇《史上最簡單的方法複制或遷移Oracle數據庫》
 
 
 
日版寵物情人插曲《Winding Road》歌詞

日版寵物情人2017的插曲,很帶節奏感,日語的,女生唱的。 最後聽見是在第8集的時候女主手割傷了,然後男主用嘴幫她吸了一下,插曲就出來了。 歌手:Def...

兄弟共妻,我成了他們夜裏的美食

老鍾家的兩個兒子很特別,就是跟其他的人不太一樣,魔一般的執著。兄弟倆都到了要結婚的年齡了,不管自家老爹怎麽磨破嘴皮子,兄弟倆說不娶就不娶,老父母爲兄弟兩操碎了心...

如何磨出破洞牛仔褲?牛仔褲怎麽剪破洞?

把牛仔褲磨出有線的破洞 1、具體工具就是磨腳石,下面墊一個硬物,然後用磨腳石一直磨一直磨,到把那塊磨薄了,用手撕開就好了。出來的洞啊很自然的。需要貓須的話調幾...

我就是掃描下圖得到了敬業福和愛國福

先來看下敬業福和愛國福 今年春節,支付寶再次推出了“五福紅包”活動,表示要“把欠大家的敬業福都還給大家”。 今天該活動正式啓動,和去年一樣,需要收集“五福”...

冰箱異味産生的原因和臭味去除的方法

有時候我們打開冰箱就會聞到一股異味,冰箱裏的這種異味是因爲一些物質發出的氣味的混合體,聞起來讓人惡心。 産生這些異味的主要原因有以下幾點。 1、很多人有這種習...

《極品家丁》1-31集大結局分集劇情介紹

簡介 《極品家丁》講述了現代白領林晚榮無意回到古代金陵,並追隨蕭二小姐化名“林三”進入蕭府,不料卻陰差陽錯上演了一出低級家丁拼搏上位的“林三升職記”。...

李溪芮《極品家丁》片尾曲《你就是我最愛的寶寶》歌詞

你就是我最愛的寶寶 - 李溪芮 (電視劇《極品家丁》片尾曲) 作詞:常馨內 作曲:常馨內 你的眉 又鬼馬的挑 你的嘴 又壞壞的笑 上一秒吵鬧 下...

烏梅的功效與作用以及烏梅的食用禁忌有哪些?

烏梅,又稱春梅,中醫認爲,烏梅味酸,性溫,無毒,具有安心、除熱、下氣、祛痰、止渴調中、殺蟲的功效,治肢體痛、肺痨病。烏梅泡水喝能治傷寒煩熱、止吐瀉,與幹姜一起制...

什麽是脂肪粒?如何消除臉部脂肪粒?

什麽是脂肪粒 在我們的臉上總會長一個個像脂肪的小顆粒,弄也弄不掉,而且顔色還是白白的。它既不是粉刺也不是其他的任何痘痘,它就是脂肪粒。 脂肪粒雖然也是由油脂...

網絡安全治理:國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰受害者

來源:中國青年報 新的攻擊方法不斷湧現,黑客幾乎永遠占據網絡攻擊的上風,我們不可能通過技術手段杜絕網絡攻擊。國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰...

 
 
 
迄今爲止,導出/導入工具集仍是跨多個平台轉移數據所需勞動強度最小的首選實用工具,盡管人們常常抱怨它速度太慢。導入只是將每條記錄從導出轉儲文件中讀出來,然後使用常見的 INSERT INTO 命令將其插入到目標表中,因此導入可能是個很慢的過程,這一點並不讓人感到吃驚。 進入 Oracle Data Pump,Oracle Database 10g 中的導出/導入工具包的更新更快的同類工具,它被設計來成倍地加速這個過程。 Data Pump 反映了整個導出/導入過程的徹底革新。它不是使用常見的 SQL 命令,而是應用專用 API 來以更快得多的速度加載和卸載數據。在我的測試中,我看到導出性能比在直接模式下提高了 10-15 倍,導入過程性能提高了 5 倍。此外,與使用導出實用工具不同,它還能夠只取出特定類型的對象(如過程)。 Data Pump 導出 這個新的實用工具稱爲 expdp,以和原來的導出 exp 區分開。在本例中,我們將用 Data Pump 來導出一個大表 CASES,大小約爲 3GB。Data Pump 在服務器端使用文件處理來創建和讀取文件;因此,目錄作爲位置使用。在這種情況下,我們將使用文件系統 /u02/dpdata1 來保存轉儲文件。      create directory dpdata1 as '/u02/dpdata1';   grant read, write on directory dpdata1 to ananda;     接下來,我們將導出數據:      expdp ananda/abc123 tables=CASES directory=DPDATA1   dumpfile=expCASES.dmp job_name=CASES_EXPORT 讓我們來分析該命令的各個部分。用戶 ID/口令組合、表和轉儲文件參數的意義是顯而易見的。與原來的導出不同,文件是在服務器(不是客戶端)上創建的。位置由目錄參數值 DPDATA1 指定,它指向之前創建的 /u02/dpdata1。這個進程還在目錄參數指定的位置上創建一個日志文件(同樣在服務器上)。默認地,這個進程使用一個名稱爲 DPUMP_DIR 的目錄;因此可以創建它來代替 DPDATA1。 注意上面的參數 job_name,這是個特殊的參數,在原來的導出中沒有。所有的 Data Pump 工作都通過作業來完成。Data Pump 作業 — 與 DBMS 作業不同 — 只是服務器進程,它代表主進程處理數據。主進程(稱爲主控制進程)通過高級隊列 (AQ) 來協調這項工作;它通過在運行期內創建的一個特殊的表(稱爲主表)來實現這個目的。在我們的例子中,如果您在 expdp 運行時檢查用戶 ANANDA 的模式 ,您將注意到一個表 CASES_EXPORT 的存在(對應參數 job_name)。當 expdp 結束時,這個表被丟棄。 導出監控 當 Data Pump Export (DPE) 運行時,按 Control-C;它將阻止消息在屏幕上顯示,但不停止導出進程本身。相反,它將顯示 DPE 提示符(如下所示)。進程現在被認爲處于「交互式」模式: Export> 這種方法允許在這個 DPE 作業上輸入幾條命令。要查看概要,在提示符下使用 STATUS 命令:      Export> status   Job:CASES_EXPORT   Operation:EXPORT               Mode:TABLE                State:EXECUTING              Degree: 1   Job Error Count: 0   Dump file:/u02/dpdata1/expCASES.dmp   bytes written = 2048      Worker 1 Status:   State:EXECUTING              Object Schema:DWOWNER   Object Name:CASES   Object Type:TABLE_EXPORT/TBL_TABLE_DATA/TABLE/TABLE_DATA   Completed Objects: 1   Total Objects: 1   Completed Rows: 4687818     記住,這只是狀態顯示。導出在後台工作。要繼續在屏幕上查看消息,從 Export> 提示符下使用命令 CONTINUE_CLIENT。 並行操作 您可以通過 PARALLEL 參數爲導出使用一個以上的線程來顯著地加速作業。每個線程創建一個單獨的轉儲文件,因此參數 dumpfile 應當擁有和並行度一樣多的項目。您可以指定通配符作爲文件名,而不是顯式地輸入各個文件名,例如:      expdp ananda/abc123 tables=CASES directory=DPDATA1   dumpfile=expCASES_%U.dmp parallel=4 job_name=Cases_Export 注意 dumpfile 參數擁有一個通配符 %U,它指示文件將按需要創建,格式將爲 expCASES_nn.dmp,其中 nn 從 01 開始,然後按需要向上增加。 在並行模式下,狀態屏幕將顯示四個工作進程。(在默認模式下,只有一個進程是可見的。)所有的工作進程同步取出數據,並在狀態屏幕上顯示它們的進度。 分離訪問數據文件和轉儲目錄文件系統的輸入/輸出通道是很重要的。否則,與維護 Data Pump 作業相關的開銷可能超過並行線程的效益,並因此而降低性能。並行方式只有在表的數量多于並行值並且表很大時才是有效的。 數據庫監控 您還可以從數據庫視圖獲得關于運行的 Data Pump 作業的更多信息。監控作業的主視圖是 DBA_DATAPUMP_JOBS,它將告訴您在作業上有多少個工作進程(列 DEGREE)在工作。另一個重要的視圖是 DBA_DATAPUMP_SESSIONS,當它與上述視圖和 V$SESSION 結合時將給出主前台進程的會話 SID。      select sid, serial#   from v$session s, dba_datapump_sessions d   where s.saddr = d.saddr;     這條指令顯示前台進程的會話。更多有用的信息可以從警報日志中獲得。當進程啓動時,MCP 和工作進程在警報日志中顯示如下:      kupprdp:master process DM00 started with pid=23, OS id=20530 to execute -   SYS.KUPM$MCP.MAIN('CASES_EXPORT', 'ANANDA');      kupprdp:worker process DW01 started with worker id=1, pid=24, OS id=20532 to execute -   SYS.KUPW$WORKER.MAIN('CASES_EXPORT', 'ANANDA');      kupprdp:worker process DW03 started with worker id=2, pid=25, OS id=20534 to execute -   SYS.KUPW$WORKER.MAIN('CASES_EXPORT', 'ANANDA');     它顯示爲數據泵操作啓動的會話的 PID。您可以用以下查詢找到實際的 SID:      select sid, program from v$session where paddr in   (select addr from v$process where pid in (23,24,25));     PROGRAM 列將對應警報日志文件中的名稱顯示進程 DM (爲主進程)或 DW (爲工作進程)。如果一個工作進程使用了並行查詢,比如說 SID 23,您可以在視圖 V$PX_SESSION 中看到它,並把它找出來。它將爲您顯示從 SID 23 代表的工作進程中運行的所有並行查詢會話:      select sid from v$px_session where qcsid = 23;     從視圖 V$SESSION_LONGOPS 中可以獲得其它的有用信息來預測完成作業將花費的時間。      select sid, serial#, sofar, totalwork   from v$session_longops   where opname = 'CASES_EXPORT'   and sofar != totalwork;     列 totalwork 顯示總工作量,該列的 sofar 數量被加和到當前的時刻 — 因而您可以用它來估計還要花多長時間。 Data Pump 導入 不過,數據導入性能是 Data Pump 真正出色的地方。要導入先前導出的數據,我們將使用      impdp ananda/abc123 directory=dpdata1 dumpfile=expCASES.dmp job_name=cases_import 導入進程的默認行爲是創建表和所有相關的對象,然後在表已存在時産生一個錯誤。如果您想把數據添加到一個現有的表中,您可以在上述命令行中使用 TABLE_EXISTS_ACTION=APPEND。 和使用 Data Pump 導入一樣,在進程中按 Control-C 將進入 Date Pump Import (DPI) 的交互模式;同樣,提示符是 Import>。 處理特定對象 您是否有過只需要從一個用戶導出特定的過程,以在一個不同的數據庫或用戶中重新創建這些過程的情況?與傳統的導出實用工具不同,Data Pump 允許您只導出特定類型的對象。例如,以下命令讓您只導出過程,而不導出其它任何東西 — 不導出表、視圖、甚至函數:      expdp ananda/iclaim directory=DPDATA1 dumpfile=expprocs.dmp include=PROCEDURE     要只導出一些特定的對象 — 比如說,函數 FUNC1 和過程 PROC1 — 您可以使用       expdp ananda/iclaim directory=DPDATA1 dumpfile=expprocs.dmp   include=PROCEDURE:\"=\'PROC1\'\",FUNCTION:\"=\'FUNC1\'\"    這個轉儲文件充當了源對象的一個備份。您甚至可以用它來創建 DDL 腳本,以供之後使用。一個稱爲 SQLFILE 的特殊參數允許創建 DDL 腳本文件。       impdp ananda/iclaim directory=DPDATA1 dumpfile=expprocs.dmp sqlfile=procs.sql    該指令在 DPDATA1 指定的目錄中創建一個名稱爲 procs.sql 的文件,並將對象的腳本包含在導出轉儲文件中。這種方法幫助您快速地在另一個模式中創建源對象。 利用參數 INCLUDE 允許您從轉儲文件中定義要包含或排除的對象。您可以使用子句 INCLUDE=TABLE:"LIKE 'TAB%'" 來僅導出那些名稱以 TAB 開頭的表。類似地,您可以使用結構 INCLUDE=TABLE:"NOT LIKE 'TAB%'" 來排除所有名稱以 TAB 開頭的表。作爲另一種選擇,您可以使用 EXCLUDE 參數來排除特定的對象。 通過外部表,Data Pump 還可以用來傳輸表空間;它非常強大,能夠即時地重定義並行方式,將更多的表添加到一個現有的進程中等等。
󰈣󰈤
 
 
 
  免責聲明:本文僅代表作者個人觀點,與王朝網路無關。王朝網路登載此文出於傳遞更多信息之目的,並不意味著贊同其觀點或證實其描述,其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,並請自行核實相關內容。
 
 
微光夜曲_朦胧的美
青春校園_女生娜娜
氣質佳人_唯美動人
新年時尚魅力女生
痞子的甘南日記
疑是銀河落九天
雪域壩上四——純美色
冬日戀歌——西城楊柳弄輕柔
 
>>返回首頁<<
 
 熱帖排行
 
 
 
 
© 2005- 王朝網路 版權所有