程序媛的console——學習手動數據抽取

概述

    通過筆者這周的學習,對數據抽取有了一個大致的瞭解。所謂數據抽取,就是將數據從數據源(一般爲關係型數據庫)中抽取出來的過程,可分爲全量抽取和增量抽取兩種類型。全量抽取比較容易理解,顧名思義,相當於數據庫的遷移和複製。增量抽取則是將數據庫中的表自上次抽取以來修改、刪除、更新的數據抽取出來。而數據抽取的方式也分爲手動抽取和使用工具抽取兩種類型。手動抽取就是我們通過創建dblink+編寫存儲過程+編寫定時任務的方式來手動抽取數據。而通過工具則是通過ETL工具完成數據的抽取。

Database Link

  上文提到,手動抽取數據中的第一步就是創建一個dblink。dblink是一種數據庫之間連接的手段,它相當於一座橋樑,將兩個數據庫連接起來,使我們可以對另一個數據庫中的數據進行無障礙的操作。以下是dblink創建的基本語法:

create databse link link_name connect to r_username identified by r_pwd using 'dbstr';

其中,link_name 是你爲這次連接起的一個名字,r_username是你要連接的遠程數據庫的用戶名,而r_pwd 是用戶名所對應的密碼。dbstr是連接字符串,tnsnames.ora中定義遠程數據庫的連接串,也可以在創建dblink的時候直接指定。

創建dblink之前必須確定用戶擁有創建dblink的權限,否則需要登錄sys爲用戶授權。授權的基本語法爲:

grant create public database link,drop public database link to username;

其中username是你要授權的用戶名。

 

存儲過程

  在上文提到,手動實現數據抽取的第二步就是創建存儲過程。所謂存儲過程,實際上就是一段sql的語句集。相比於傳統的sql,存儲過程具有業務系統與數據庫交互少,一次編譯多次調用,執行效率高等優點。雖然阿里的開發者手冊裏明確禁止了使用存儲過程,但其仍然在政府、醫療、金融等項目的數據庫中佔有一席之地。存儲過程的基本語法爲:

CREATE [OR REPLACE] PROCEDURE procedure_name
(參數部分)

is/as
  聲明區域
begin
  執行區域
exception
  異常處理區域
end;

定時任務

創建job(定時任務)可以實現定時調用存儲過程的功能。下面是筆者寫過的一個簡單的job

declare
  job number;
BEGIN
  DBMS_JOB.SUBMIT(  
        JOB => job,  /*自動生成JOB_ID*/  
        WHAT => 'prc_job;',  /*需要執行的存儲過程名稱或SQL語句*/  
        NEXT_DATE => sysdate+3/(24*60),  /*初次執行時間-下一個3分鐘*/  
        INTERVAL => 'trunc(sysdate,''mi'')+1/(24*60)' /*每隔1分鐘執行一次*/
      );  
  commit;
end;

創建好定時任務之後,運行即可完成定時調用prc_job這個存儲過程,實現其中的功能。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章