Chinaunix首页 | 论坛 | 博客
  • 博客访问: 417503
  • 博文数量: 66
  • 博客积分: 1416
  • 博客等级: 上尉
  • 技术积分: 922
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-16 10:37
个人简介

高級Oracle DBA,善長Linux系統維運以及Oracle數據庫管理,開發,調優. 具有多年PL/SQL開發經驗.

文章分类

全部博文(66)

文章存档

2015年(9)

2014年(4)

2013年(5)

2010年(1)

2009年(3)

2008年(6)

2007年(30)

2006年(8)

我的朋友

分类: Oracle

2015-09-16 09:01:44

   在之前的博文中,有提到使用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日.

阅读(917) | 评论(0) | 转发(0) |
0

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

下一篇:没有了

给主人留下些什么吧!~~