天天看點

海量資料遷移之資料抽取流程

在之前的一些博文中花了大篇幅介紹了采用外部表抽取的一些細節,可能細節到了,基本原理的内容還希望再補充補充。

采用外部表抽取資料的流程圖如下:

海量資料遷移之資料抽取流程

大體标注了一下抽取的基本結構,我們會盡量保證不去碰原本的資料源,會建立兩個臨時的使用者,一個是隻讀使用者,這個使用者上隻有同義詞,隻具有資料源中的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的名稱等等。這些都需要通過程式設計來控制和管理這些複雜的部分。

繼續閱讀