企業erp數據檢驗,分析,追蹤技巧

960阅读 0评论2015-09-16 gangjh
分类:Oracle

   在之前的博文中,有提到使用full join, lead等方式校驗數據.
   當問題已經發現時,怎麼樣告知程序員,使用者呢? 數據是否已經修正?
   如何較為方便的追蹤問題處理結果呢? 該問題出現的頻率如何?

   這些檢驗程序運行時間一般都比較長, 如何檢驗同時又避免過多影響系統性能?

  我的解決方法是這樣子的.
  1. 建立DT_DATA_CHECK記錄待檢測的sql,
     這些sql是抓取有問題的數據, 正常情況下應該無記錄.

点击(此处)折叠或打开

  1. create table DT_DATA_CHECK
  2. (
  3.   class NUMBER(8),               --檢測類別
  4.   name VARCHAR2(30),              
  5.   sql_text VARCHAR2(4000),       --檢測sql code
  6.   enabled VARCHAR2(5),           --啟用標記
  7.   comments VARCHAR2(240),
  8.   created DATE default sysdate
  9. )
2. 將要檢測的sql插入DT_DATA_CHECK表.
範例sql
  
 
3. 每天排程運行dt_data_check的sql_text,  將數據存入dt_data_check_logs日志檔. 
  check_sql 自定義procedure, 用dbms_xmlgen將前100筆錯誤數據用xmltype方式存入日志檔.

点击(此处)折叠或打开

  1. create or replace package PKG_DATA_CHECK is
  2. procedure check_sql(p_class number, p_name varchar2, p_sql varchar2, rows out number) ;   --運行檢測sql,更新log檔
  3. procedure check_update ;        --只運行有錯誤的sql,
  4. procedure check_data_all ;      --重行檢測所有sql
  5. procedure notice_info;          --通知管理員
  6. end PKG_DATA_CHECK;


摘錄check_data代碼如下, 点击(此处)折叠或打开

  1. procedure check_data is
  2.   v_cnt pls_integer ;
  3. begin   
  4.    for r in ( select class, name, sql_text
  5.                 from dt_data_check
  6.                 where coalesce(enabled,'TRUE')<>'FALSE' )
  7.    loop
  8.      begin
  9.       check_sql(r.class, r.name, r.sql_text, v_cnt);
  10.       commit ;
  11.       
  12.       exception
  13.         when others then
  14.         raise_application_error(-20013, sqlcode||sqlerrm||chr(10)||r.sql_text) ;
  15.       end ;
  16.    end loop;
  17. end check_data;

4. 將日志檔中有數據的報表分別發email通知相關人員.

点击(此处)折叠或打开

  1. select * from dt_data_check_logs where num_rows>0
錯誤檢測

5. 如用戶告知已經處理. 只重新運行有問題的sql.
   重復第 3步,用行package中的check_update 過程更新log.
 

阿飛
2015/09/14日.

上一篇:Oracle pl/sql解析Excel 97/2000文檔,poi版本
下一篇:没有了