Oracle 數據庫 10g 中的新的實用程序使其性能和多功能性達到了新的水平。
Oracle 數據庫 10g 中增加的叫做 Oracle Data Pump (數據泵)的新的導入和導出特性,徹底改變了數據庫用戶已經習慣的過去幾代 Oracle 數據庫的客戶 / 服務器工作方式?,F在服務器可以運行導出和導入任務。你可以通過并行方式快速裝入或卸載大量數據,而且你可以在運行過程中調整并行的程度。導出和導入任務現在可以重新啟動,所以發生故障不一定意味著要從頭開始。 API 是公諸于眾的,并且易于使用;用 PL/SQL 建立一個導入和導出任務非常簡單。一旦啟動,這些任務就在后臺運行,但你可以通過客戶端實用程序從任何地方檢查任務的狀態和進行修改。
二、體系結構
在 Oracle 數據庫 10g 之前(從 Oracle7 到 Oracle9I ),導入和導出實用程序都作為客戶端程序運行,并且完成大量工作。導出的數據由數據庫實例讀出,通過連接傳輸到導出客戶程序,然后寫到磁盤上。所有數據在整個導出進程下通過單線程操作。今天的數據量比這個體系結構最初采用的時候要大得多,使得單一導出進程成了一個瓶頸,因為導出任務的性能受限于導出實用程序所能支持的吞吐量。
在 Oracle 數據庫 10g 和全新的數據泵( Data Pump )體系結構下,如今所有的工作都由數據庫實例來完成。數據庫實例可以用兩種方法來并行處理這些工作:通過建立多個數據泵工作進程來讀 / 寫正在被導出 / 導入的數據,以及建立并行 I/O 服務器進程以更快地選?。?SELECT )或插入( INSERT )這些數據。這樣,單進程瓶頸再也就不存在了。
數據泵任務用新的 DBMS_DATAPUMP PL/SQL API 來建立、監測和調整。新的導入和導出實用程序(分別為 impdp 和 expdp )對于這個 API 來說只是命令行接口。你可以使用數據泵導出實用程序初始化一個任務,例如一個導出任務。然后你就可以關閉你的客戶端,回家過夜和享用晚餐,而你的任務會一直運行。到了深夜,你可以重新連接到那個任務,檢查其狀態,甚至可以提高并行程度,以便在深夜系統沒有用戶在用的情況下多完成一些工作。第二天早上,你可以降低并行度甚至掛起該任務,為白天在線的用戶釋放資源。
重新啟動任務的功能是數據泵體系結構的一個重要特性。你可以隨時停止和重啟動一個數據泵任務,比如為在線用戶釋放資源。你還可以從文件系統的空間問題中輕松地恢復。如果一個 12 小時的導出任務在進行了 11 小時后因磁盤空間不夠而失敗,那么你再也不用從頭開始重新啟動該任務,重復前面 11 小時的工作。而是你可以連接到這個失敗的任務,增加一個或多個新的轉儲( dump )文件,從失敗的地方重新啟動,這樣只需一個小時你就可以完成任務了。這在你處理很大數據量時非常有用。
三、對文件系統的訪問
由服務器處理所有的文件 I/O 對于遠程執行導出和導入任務的數據庫管理員來說非常有利。如今,用戶可以很輕松地在類似 UNIX 的系統 ( 如 Linux) 上 telnet 或 ssh 到一個服務器,在命令行方式下初始化一個運行在服務器上的導出或導入任務。然而,在其他操作系統上就不那么容易, Windows 是最明顯的例子。在推出數據泵之前,要從一個 Windows 系統下的 Oracle 數據庫中導出大量數據,你很可能必須坐在服務器控制臺前發出命令。通過 TCP/IP 連接導出數據只對小數據量是可行的。數據泵改變了這一切,因為即使你通過在你的客戶端上運行該導出和導入實用程序來初始化一個導出或導入任務,該任務其實也運行在服務器上,所有的 I/O 也都發生在該服務器上。
出于安全性考慮,數據泵要求你通過 Oracle 的目錄對象來指定其中存放著你要建立或讀取的轉儲文件的目標目錄。例如:
CREATE DIRECTORY export_dumps
AS 'c:\a';
GRANT read, write
ON DIRECTORY export_dumps
TO gennick;
我以 SYSTEM 身份登錄到我的實驗室數據庫上,并執行以上語句來建立一個目錄對象,這個目錄對象指向了我磁盤上的一個臨時目錄,以用來存放導出的轉儲文件。 GRANT 語句為用戶 gennick- 就是我 - 分配了訪問該目錄的權限。我給自己分配讀 / 寫權限,因為我將導出和導入數據。你可以為一個用戶分配讀權限,限制他只能導入數據。
原文轉自:http://www.anti-gravitydesign.com