亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

BI測試工具之跨數據庫數據對比,支持oracle,sqlserver

2024-08-29 13:54:22
字體:
來源:轉載
供稿:網友
BI測試工具之跨數據庫數據對比,支持Oracle,sqlserver

應用場景:

本周在進行SIT,我幫助僅有的一個測試妹妹對部分表進行數據質量驗證,第一步需要做的就是比對source與stage表的table definition 與 數據內容的一致性。

本項目使用的是oracle作為DW,source是oracle,sqlserver和xls.

沒有權限建立database link, 測試們常用的方法是比對總行數,然后如果數據集太大的話,則抽樣比對,導出數據到xls,然后使用beyondcompare進行比對。

如果值出現不同,則需要查找出哪些行的值不同,最少要找出一條具體的值。

我測試的時候發現,手動去做這一些事也是挺費力的。就寫了以下的小工具進行輔助測試。

功能:

1.支持從oracle,sqlserver,xlsx中取數據進行比對。

2.對oracle與sqlserver,可采用傳統的比對,各自獲取一個readonly ,forward 胡datareader,逐行比對。點擊CompareData按鈕。因為數據庫不同找不到統一的方法計算值,oracle中的ora_hash和sqlserver中的hashbyte不一致。

3.對于oracle與oracle的或者是sqlserver對sqlserver的query比對,可以使用GetDiffRange按鈕,即二分查找法進行比對。因為相同的數據庫可以找到一個方法進行數據比對。

測試數據如下:

在oracle的數據庫中執行以下代碼,生成測試數據。

--create table mytest(id int, rid int,name varchar2(20));--create table mytest2(id int, rid int,name varchar2(20));declare i integer :=1;beginwhile i<110000 loopinsert into mytest(ID,RID,NAME) VALUES(mysequence.nextval,i,'dataitem'||i);i:=i+1;end loop;end ;   insert into mytest2 SELECT * FROM mytest order by id;   update mytest2 set rid=100 where id=100000; commit;select * from mytest minus select * from mytest2;   select count(*) as totalcount, to_char(avg(ora_hash(id||rid ||name))) as avghash from (select id as rn, t.* from mytest t)select count(*) as totalcount, to_char(avg(ora_hash(id||rid ||name))) as avghash from (select id as rn, t.* from mytest2 t)   update mytest2 set name='EvanTEst' where id=1000;commit;

Range:可以自己設定,如果是1的話,則直接定位到第一條不同的記錄,如果是大于1 則是一個區間值。

表示不同的數據行就是在他們之間。

為了同時支持oracle和sqlserver,我使用庫中自帶的接口IDbConnection和IDataReader進行開發,可以同時支持oracle和sqlserver and Xlsx.

sql要求:

二分查找需要樣本有序,所以需要寫成

select count(*) as totalcount, to_char(avg(ora_hash(id||rid ||name))) as avghash from (select id as rn, t.* from mytest t)

的樣式,第一個是總行數,第二個要求是里面需要有一個固定列名叫rn。

我使用ora_hash函數對每行的值進行hash,然后求平均值的方式來計算表區間內行的內容是否相同,這是oracle提供的函數。

類似的有函數checksum,但是計算速度要比這個慢許多,尤其是表數據量大的時候。

sqlserver中有hashbyte函數類似。 注意如果不使用to_char函數,則算出的值會溢出,如果放到.net中來承接,會報oci數據溢出的錯誤,所以to_char也是必須的。

歡迎大家分享BI測試的一些經驗心得。

軟件下載地址: files.cnblogs.com/huaxiaoyao/datacompare.rar

主要源碼:

 PRivate void compareData2(int start, int end,int total)        {            rtb_log.AppendText(string.Format("comparedata2({0},{1},{2})", start, end, total) + Environment.NewLine);            string tmpsql = " where rn between {0} and {1} ";            if (total == 0)            {                dr1 = getDataReader(conn, rtx_sql.Text);                dr2 = getDataReader(conn2, rtx_sql2.Text);            }            else            {                dr1 = getDataReader(conn, rtx_sql.Text + string.Format(tmpsql, start, end));                dr2 = getDataReader(conn2, rtx_sql2.Text + string.Format(tmpsql, start, end));            }            //assume the dr schema totalcount,avghash            bool isdiff = false;            while (dr1.Read() && dr2.Read())            {                if (total == 0) {end= total = dr1.GetInt32(0); }                for (int col = 1; col < dr1.FieldCount; col++)                {                    if (!dr1.GetValue(col).ToString().Equals(dr2.GetValue(col).ToString())                        ||                        !(dr1.IsDBNull(col) == dr2.IsDBNull(col))                        )                    {                        isdiff = true;                    }                }            }            dr1.Close();            dr2.Close();            //if isdiff=true the split the totalcount two part            if (isdiff)            {                if ((end - start < range)) return;                compareData2(start, (start + end) / 2, end);            }            else //if same            {                if (start == end) end = total;                compareData2(end, total, total);            }                  }


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲天堂视频在线观看| 中文综合在线观看| 亚洲成人精品在线| 欧美一区二区三区艳史| 国产精品人成电影在线观看| 日本欧美一级片| 成人黄色片网站| 欧美日韩爱爱视频| 成人av在线天堂| 国产精品嫩草视频| 国产精品99一区| 欧美日韩国产中文字幕| 国产精品第10页| 国产精品欧美久久久| 亚洲精品中文字幕女同| 不卡av电影院| 国产在线观看精品一区二区三区| 91久久中文字幕| 欧美激情在线一区| 欧美日韩激情美女| 日韩av高清不卡| 亚洲伊人成综合成人网| 亚洲欧美在线免费观看| 国产97在线视频| 成人做爽爽免费视频| 久久精品这里热有精品| 亚洲精品小视频在线观看| 亚洲女在线观看| 在线成人激情视频| 国产精品直播网红| 欧美性猛交xxxx乱大交| 视频一区视频二区国产精品| 91精品久久久久久久久久久久久| 97福利一区二区| xxx一区二区| 日韩免费观看av| 亚洲新声在线观看| 国产一区二区在线播放| 日韩精品福利网站| 精品日本高清在线播放| 久久夜色精品国产亚洲aⅴ| 久久久视频精品| 欧美极品美女视频网站在线观看免费| 亚洲伊人成综合成人网| 欧美国产精品人人做人人爱| 91视频免费网站| 国产精品久久久久久久久久东京| 欧美日韩性视频在线| 97在线看福利| 久久久久久成人精品| 久久久久中文字幕2018| 夜夜嗨av色一区二区不卡| 欧美激情高清视频| 在线视频免费一区二区| 日韩欧美一区视频| 一本色道久久88综合日韩精品| 97国产成人精品视频| 视频在线观看99| 91精品久久久久久久久久久| 欧美精品videos| 亚洲女人被黑人巨大进入| 国产精品吹潮在线观看| 亚洲无av在线中文字幕| 亚洲人精品午夜在线观看| 国产色视频一区| 国产成人精品在线视频| 欧美特级www| 亚洲成人网av| 精品二区三区线观看| 97久久精品人人澡人人爽缅北| 亚洲精品电影网在线观看| 91精品国产综合久久久久久蜜臀| 欧美电影免费观看| 国产精品美乳在线观看| 日韩电影中文字幕在线观看| 久久精品中文字幕一区| 久久视频在线直播| 美女啪啪无遮挡免费久久网站| 欧美日韩中文字幕综合视频| 成人精品视频99在线观看免费| 欧美日韩国产一区中文午夜| 亚洲一区二区三区四区视频| 亚洲缚视频在线观看| 国产视频综合在线| 国产中文字幕亚洲| 热久久视久久精品18亚洲精品| 91精品视频免费看| 国产91久久婷婷一区二区| 欧美俄罗斯性视频| 九色精品免费永久在线| 97久久久免费福利网址| 中文字幕av一区| 精品在线小视频| 日韩精品视频免费在线观看| 欧美日韩精品二区| 欧美精品www在线观看| 日韩av不卡在线| 亚洲精品在线视频| 日韩有码片在线观看| 日产精品99久久久久久| 国产欧美一区二区白浆黑人| 国语自产偷拍精品视频偷| 欧美在线视频免费播放| 亚洲欧美国产精品久久久久久久| 97视频免费在线看| 中文字幕av日韩| 亚洲性夜色噜噜噜7777| 中文字幕精品—区二区| 国产亚洲精品激情久久| 日韩欧美国产中文字幕| 97久久久久久| 亚洲永久在线观看| 91九色国产社区在线观看| 亚洲精品中文字| 欧美激情第一页xxx| 国产精品毛片a∨一区二区三区|国| 久久久久久久影院| 亚洲人成免费电影| 狠狠色狠狠色综合日日五| 亚洲欧美中文字幕在线一区| 日韩精品在线第一页| 精品国产区一区二区三区在线观看| 日韩免费观看高清| 国产成人综合亚洲| 国产精品欧美风情| 日韩激情第一页| 国产精品日韩欧美| 欧美黑人性视频| 中文字幕成人精品久久不卡| 亚洲欧美国产一本综合首页| 国产日韩欧美在线| 欧美高跟鞋交xxxxhd| 欧美亚洲第一页| 国产精品嫩草视频| 国产日本欧美在线观看| 2019中文字幕在线观看| 欧美亚洲另类激情另类| 日韩中文字幕第一页| 91丝袜美腿美女视频网站| 国产成人在线视频| 中文字幕av一区二区三区谷原希美| 欧美在线视频一区二区| 一本一本久久a久久精品牛牛影视| 国产一区二区视频在线观看| 日韩av在线免费看| 中文字幕亚洲第一| 亚洲精品99999| 久久精品夜夜夜夜夜久久| 国产一区二区三区日韩欧美| 国产精品久久久久久久久久久久久| 亚洲大尺度美女在线| 亚洲成人久久一区| 91网站在线看| 欧美大胆在线视频| 久久久免费精品视频| 国产97色在线|日韩| 91精品国产高清久久久久久91| 成人激情免费在线| 韩国一区二区电影| 国产日韩视频在线观看| 亚洲影视九九影院在线观看| 国产精品一区久久| 欧洲一区二区视频| 成人性生交大片免费看视频直播|