因為我只需要一個對象,明確包含該對象比起明確不包括其它對象要容易得多。我的 INCLUDE 參數值的第一部分是關鍵字 TABLE ,表明我要導入的對象是一個數據表(其它的可能是一個函數或一個過程)。 接下來是一個冒號,然后是一個 WHERE 子句的謂詞。我明確希望數據表名為 GNIS ,所以這個謂詞是 "= 'GNIS'" 。如果必要,則你可以寫出多個詳細的謂詞。通過 INCLUDE 和 EXCLUDE 參數,你可以確切地指出以什么樣的粒度導入或導出。我建議你仔細地閱讀關于這兩個參數的文檔。它們的功能之強大和多功能性是我在本文中所無法描述的。
我可以很輕松地完成該模式的改變,將來自 GNIS 模式的數據表重新映射到 MICHIGAN 模式:
REMAP_SCHEMA=gennick: michigan
我只需要關于密歇根州的數據行。為此,我可以使用 QUERY 參數來指定一個 WHERE 子句:
QUERY="WHERE gnis_state_abbr='MI'"
QUERY 在老的實用程序中也有,但只能用于導出操作。數據泵使 QUERY 也能用于導入操作,因為數據泵利用了 Oracle 較新的外部數據表功能。只要可能,數據泵會選擇直接路徑來導出或導入數據,包括從數據庫數據文件中讀取數據然后直接寫到一個導出轉儲文件中,或讀取轉儲文件然后直接寫入數據庫數據文件中。但是,當你指定了 QUERY 參數時,數據泵將使用一個外部數據表。對于一個導入任務,數據泵將使用 ORACLE_DATAPUMP 存取驅動程序建立一個外部數據表,并執行一條 INSERT...SELECT...FROM 語句。
我的最后一個要求是避免導入與已被導出的數據表相關的存儲參數。我希望 MICHIGAN 模式中的新 GNIS 表沿用該模式的默認表空間的默認存儲參數。原因是 MICHIGAN 的默認表空間不足以容納該數據表的本來大小,但是是以僅僅容納與密歇根有關的數據行。通過 TRANSFORM 參數,我可以告訴導入任務不要包含與原始表相關的任何數據段屬性:
TRANSFORM=SEGMENT_ATTRIBUTES:N
這看起來是件小事,但以前有很多次我都希望老的導入實用程序的 TRANSFORM 參數有這樣的功能。我在試圖將少量生產數據導入到測試系統中時經常失敗,因為即使存儲生產數據的各個區段當中許多是空的,其數據量也比我測試系統所能支持的大得多。對于只導入一張數據表的情況,預先建立數據表是解決這個問題的一個辦法。然而,隨著數據表的增多,預先建表會很麻煩。而 TRANSFORM 這樣的簡單開關可以輕松地將轉儲文件中所有數據段的屬性全體忽略掉。
將我上面描述的所有選項放到一個參數文件中后,我可以調用導入實用程序,如下所示:
impdp michigan/password
parfile=gnis_import.par
當作為一個沒被授權的用戶進行導入時,你需要連接到目標模式。如果你擁有 IMP_FULL_DATABASE 角色,那么你可以用自己的身份登錄,然后導入到任何目標模式。
八、性能和多功能性
Oracle 數據泵比起以前的導出和導入實用程序在性能上有很大的提高。這種性能提高大部分來自于讀寫轉儲文件的并行操作。你可以指定并行程度來達到你所要求的速度與資源消耗的折中。
九、下載本文所使用的示例數據
數據泵還很好地利用了 Oracle 數據庫其他最新開發的創新特性。 Flashback (回閃)用于確保導出數據的一致性,而 FLASHBACK_SCN 和 FLASHBACK_TIME 參數使你能夠完全控制這一功能。直接路徑( direct-path ) API 用于在任何可能的時候提高性能,當直接路徑 API 不能使用時,用外部數據表和新的 ORACLE_DATAPUMP 外部數據表存取驅動程序來傳輸數據。
數據泵除了提供全新的性能外還為你提供靈活性。這表現在 INCLUDE 和 EXCLUDE 參數、 QUERY 參數、 TRANSFORM 參數和其他參數的實現中,這些參數使你能夠精細地控制被加載和卸載的數據和對象。
人們一直在不斷地對 " 大數據" 的含意進行重新定義,這種數據庫容量之大在十年前還只能是夢想。在這樣的世界里,數據泵對于你的數據庫管理員所用的工具庫是個不錯的補充,使你能夠以前所未有的速度對數據庫進行數據導入和導出。
Jonathan Gennick ( Jonathan@Gennick.com ) 是一名經驗豐富的 Oracle 數據庫管理員和 Oracle 認證
文章來源于領測軟件測試網 http://www.kjueaiud.com/