1. 程式人生 > 其它 >海量資料遷移之資料抽取流程 (r4筆記第72天)

海量資料遷移之資料抽取流程 (r4筆記第72天)

在之前的一些博文中花了大篇幅介紹了採用外部表抽取的一些細節,可能細節到了,基本原理的內容還希望再補充補充。 採用外部表抽取資料的流程圖如下:

大體標註了一下抽取的基本結構,我們會盡量保證不去碰原本的資料來源,會建立兩個臨時的使用者,一個是隻讀使用者,這個使用者上只有同義詞,只具有資料來源中的select許可權。這就對應上面紅色標註的1,而另外一個使用者是外部表使用者,所有通過建立外部表都會在這個使用者下進行,生成了dump檔案之後,我們可以隨時刪除外部表,這個時候為了保證相關的drop操作不會牽扯到資料來源,外部表使用者會繼承只讀使用者中的select許可權。這就對應紅色標註的2. 當開始抽取資料的時候,會去查詢是否有許可權讀取資料,會找到只讀使用者,最終能夠讀取資料來源的資料,這就對應紅色標註的3,4 當滿足了基本的條件,就開始生成外部表的dump,可以為一個表生成多個dump,而且這個過程是並行的,這就對應紅色標註的5 對於步驟5,是抽取的關鍵,基本的原理可以參考下面的虛擬碼,黃色標註的重點部分。

CREATE TABLE MO1_MEMO_EXT
   ORGANIZATION EXTERNAL
  (
    TYPE ORACLE_DATAPUMP
    DEFAULT DIRECTORY xxxxx
    LOCATION (
 ‘xxxx1.dmp’,‘xxxx2.dmp’)
   )
  parallel xx   as
   SELECT  /*+ parallel(t xx) */
 *
   FROM 只讀使用者.MO1_MEMO;

我們使用了外部表的oracle_datapump引擎,可以在指定的目錄下生成多個dump檔案,我們可以指定並行度,指定多個dump的名稱等等。這些都需要通過程式設計來控制和管理這些複雜的部分。