欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種SQLite空閑頁上被刪數(shù)據(jù)表的記錄分析方法和裝置的制造方法

文檔序號:9667491閱讀:495來源:國知局
一種SQLite空閑頁上被刪數(shù)據(jù)表的記錄分析方法和裝置的制造方法
【技術領域】
[0001]本發(fā)明涉及計算機數(shù)據(jù)處理技術領域,特別涉及一種SQLite空閑頁上被刪數(shù)據(jù)表的記錄分析方法和裝置。
【背景技術】
[0002]SQLite是一款輕型的數(shù)據(jù)庫。它的設計目標是嵌入式的,廣泛運用于各種嵌入式設備中,具有占用資源小的特點。相比于MysqUPostgreSQL這兩款開源的世界著名數(shù)據(jù)庫管理系統(tǒng),具有更快的處理速度。
[0003]傳統(tǒng)的SQLite刪除數(shù)據(jù)解析方法是根據(jù)記錄數(shù)據(jù)的特征來識別記錄關鍵數(shù)據(jù)的起始和終止標志,從而解析某些關鍵數(shù)據(jù),但是這種方法的弊端是只能針對某一類數(shù)據(jù)庫文件的某些關鍵數(shù)據(jù),而無法提取全部數(shù)據(jù),并且對于其他的數(shù)據(jù)庫文件則需要重新提取數(shù)據(jù)特征并重新解析,無法保證通用性。
[0004]SQLite數(shù)據(jù)庫刪除數(shù)據(jù)的通用解析,當前國內(nèi)外研究比較少;目前市場上的通用解析產(chǎn)品具有很大的局限性,其空閑頁刪除記錄挖掘,由于對于記錄特征提取不夠精確,對于整表刪除的數(shù)據(jù),基本無法恢復出任何數(shù)據(jù),這樣影響了刪除記錄解析的準確性和全面性。
[0005]目前現(xiàn)有專利中對于刪除數(shù)據(jù)的通用解析均為對于未刪除數(shù)據(jù)表的恢復,如專利CN201110266852.1以及CN201110266852.1,而不適用于已刪除數(shù)據(jù)表。

【發(fā)明內(nèi)容】

[0006]本發(fā)明提出一種SQLite空閑頁上被刪數(shù)據(jù)表的記錄分析方法和裝置,可以快速、準確地挖掘SQLite的空閑頁上刪除記錄,主要包括被刪除的數(shù)據(jù)表上的記錄。
[0007]具體方案如下:
[0008]一種SQLite空閑頁上被刪數(shù)據(jù)表的記錄分析方法,包括以下步驟:
[0009]S1:讀取主表的B+tree樹以及空閑頁鏈表;
[0010]S2:若被刪數(shù)據(jù)表已知,直接手動構造FTLIST,若被刪數(shù)據(jù)表未知,則從步驟S1得到的主表B+tree和空閑頁鏈表中,解析得到刪除的完整的建表記錄集合FTLIST ;
[0011]S3:讀取FTLIST中的下一個未讀節(jié)點,記為FTN0DE,并將該節(jié)點標記為已讀;
[0012]S4:分析FTNODE節(jié)點中的建表SQL語句,得到該被刪除的數(shù)據(jù)表的結構FTS ;
[0013]S5:獲取空閑頁中符合該FTS結構的刪除記錄。
[0014]進一步的,所述的步驟S2中解析得到刪除的完整的建表記錄集合FTLIST的具體步驟是:
[0015]S21:從主表B+tree和空閑頁鏈表中,解析得到初步的刪除建表記錄集合FTLIST1 ;
[0016]S22:從FTLIST1排除重復記錄并且過濾掉碎片記錄和非建表記錄,得到集合FTLIST2 ;
[0017]S23:從數(shù)據(jù)庫主表中查詢得到所有未刪除的建表記錄集合TLIST ;
[0018]S24:在FTLIST2中排除與TLIST中重復的記錄,得到的集合FTLIST,該集合FTLIST即為最終的刪除建表記錄集合。
[0019]進一步的,所述的步驟S5的具體步驟是:
[0020]S51:讀取SQLite空閑頁鏈表節(jié)點;
[0021]S52:從空閑頁鏈表節(jié)點中查找所有與FTS相匹配的記錄關鍵點;
[0022]S53:對關鍵點進行記錄重組。
[0023]其中,所述的步驟S24中FTLIST2中排除與TLIST中重復的記錄根據(jù)為表名字、根頁號和建表SQL語句的一種或多種。
[0024]其中,所述步驟S52中所述記錄關鍵點為4個字節(jié)組成為二元組〈NFP, FTL>或<TL, HL>,其中〈NFP,F(xiàn)TL>對應記錄頭部4個字節(jié)被覆蓋的情況,NFP表示指向下一個空閑節(jié)點的指針,由2個字節(jié)組成,F(xiàn)TL是NFP后面的2個字節(jié),表示該空閑節(jié)點的大小,而<TL,HL>對應的是記錄頭部完整的情況,TL表示記錄總長度,是記錄的第一個變長整數(shù),HL表示頭部總長度,是記錄的第三個變長整數(shù)。一種SQLite空閑頁上被刪數(shù)據(jù)表的記錄分析裝置,所述的裝置包括:
[0025]讀取單元,用于讀取主表的B+tree樹以及空閑頁鏈表;
[0026]建表記錄獲取單元,用于若被刪數(shù)據(jù)表已知,直接手動構造FTLIST,若被刪數(shù)據(jù)表未知,則從讀取單元得到的主表B+tree和空閑頁鏈表中,解析得到刪除的完整的建表記錄集合 FTLIST ;
[0027]節(jié)點讀取標記單元,用于讀取FTLIST中的下一個未讀節(jié)點,記為FTN0DE,并將該節(jié)點標記為已讀;
[0028]數(shù)據(jù)表的結構FTS獲取單元,用于分析FTNODE節(jié)點中的建表SQL語句,得到該被刪除的數(shù)據(jù)表的結構FTS ;
[0029]刪除記錄獲取單元,用于獲取空閑頁中符合該FTS結構的刪除記錄。
[0030]進一步的,所述的建表記錄獲取單元包括:
[0031]第一記錄獲取單元,用于從主表B+tree和空閑頁鏈表中,解析得到初步的刪除建表記錄集合FTLIST 1 ;
[0032]第二記錄獲取單元,用于從FTLIST1排除重復記錄并且過濾掉碎片記錄和非建表記錄,得到集合FTLIST2 ;
[0033]第三記錄獲取單元,用于從數(shù)據(jù)庫主表中查詢得到所有未刪除的建表記錄集合TLIST ;
[0034]最終記錄獲取單元,用于在FTLIST2中排除與TLIST中重復的記錄,得到的集合,該集合FTLIST即為最終的刪除建表記錄集合。
[0035]進一步的,所述的刪除記錄獲取單元包括:
[0036]空閑頁鏈表節(jié)點讀取單元,用于讀取SQLite空閑頁鏈表節(jié)點;
[0037]記錄關鍵點查找單元:用于從空閑頁鏈表節(jié)點中查找所有與FTS相匹配的記錄關鍵點;
[0038]關鍵點重組單元:用于對關鍵點進行記錄重組。
[0039]其中,所述的最終記錄獲取單元中排除與TLIST中重復的記錄根據(jù)可以為表名字、根頁號和建表SQL語句的一種或多種。
[0040]其中,所述記錄關鍵點查找單元中所述記錄關鍵點為4個字節(jié)組成的二元組〈NFP,F(xiàn)TL>或<TL,HL>,其中〈NFP,F(xiàn)TL>對應記錄頭部4個字節(jié)被覆蓋的情況,NFP表示指向下一個空閑節(jié)點的指針,由2個字節(jié)組成,F(xiàn)TL是NFP后面的2個字節(jié),表示該空閑節(jié)點的大小,而<TL,HL>對應的是記錄頭部完整的情況,TL表示記錄總長度,是記錄的第一個變長整數(shù),HL表示頭部總長度,是記錄的第三個變長整數(shù)。
[0041]與現(xiàn)有技術相比,本發(fā)明具有以下優(yōu)點:
[0042]實用性:無需人工分析介入,自動識別主表上刪除的數(shù)據(jù)表的建表記錄并分析數(shù)據(jù)表的結構,并且根據(jù)分析到的數(shù)據(jù)表的結構來解析空閑頁上的刪除記錄;由于SQLite的使用呈廣泛化趨勢,該方法的重要性不言而喻,預計該方法將對數(shù)據(jù)庫信息安全技術產(chǎn)生一定影響,也為其它相近數(shù)據(jù)庫類型的自由空間記錄挖掘提供嶄新思路。
[0043]創(chuàng)新性:該方法創(chuàng)造性的從主表去分析被刪除的數(shù)據(jù)表的建表記錄,并且根據(jù)建表記錄來分析空閑頁,增強空閑頁上刪除記錄挖掘的準確性和全面性,尤其是對于數(shù)據(jù)表被刪除的情況;該方法不僅在算法上體現(xiàn)出簡潔明了的特點,更憑借其出色的環(huán)境適應性,大大增加了程序的健壯度;并且該方法不局限于某一個數(shù)據(jù)庫,而是對所有SQLite數(shù)據(jù)庫的自由空間的刪除記錄挖掘都適用,具有很強的通用性。
【附圖說明】
[0044]圖1為一個SQLite頁面結構示意圖;
[0045]圖2為一個實施例的數(shù)據(jù)庫展示圖;
[0046]圖3為本發(fā)明的主流程圖;
[0047]圖4為該實施例的主表數(shù)據(jù)截圖;
[0048]圖5為該實施例的food表殘留數(shù)據(jù)截圖;
[0049]圖6為該實施例的主表恢復結果圖;
[0050]圖7為該實施例的food表的刪除記錄圖。
【具體實施方式】
[0051]在結合附圖和【具體實施方式】對本發(fā)明作進一步詳細的說明之前,首先介紹一下與SQLite數(shù)據(jù)庫有關的幾個概念。
[0052]SQLite數(shù)據(jù)庫由系列的數(shù)據(jù)表組成的,而這一系列的數(shù)據(jù)表表及其對應的索引表(index)和觸發(fā)器(trigger)均由主表(sqlite_master)來管理,而主表和普通的數(shù)據(jù)表沒有區(qū)別,由一系列頁面來記錄數(shù)據(jù)表、索引表和觸發(fā)器等的變更(創(chuàng)建、刪除等),并且這些頁面組織由B+tree來管理,每個B+tree節(jié)點對應一個SQLite頁面。
[0053]SQLite主表具有以下3個特征:
[0054]1)以一棵 B+tree 組織;
[0055]2)以第一頁為根頁;
[0056]3)由 5 個字段組成:(type text, name text,tbl—name text,rootpageinteger, sql text)
[0057]SQLite主表及其管理的數(shù)據(jù)表由B+tree來組織頁面管理,而數(shù)據(jù)表對應的索引表有B-tree來組織頁面管理,在這一系列Btree (包括B+tree和B-tree)之外的頁面統(tǒng)稱為空閑頁。
[0058]空閑頁以鏈表形式組織起來,圖1為SQLite頁面結構示意圖,其中
[0059]a.鏈表首指針存放在文件頭32字節(jié)偏移處的4個字節(jié);
[0060]b.若只有一個空閑頁,則沒有主干頁,僅有的一個空閑頁是葉子頁;
[0061]c.每個主干頁的第0-3字節(jié),指向下一個主干頁的頁號,0表示鏈表結束;
[0062]d.每個主干頁的第4-7字節(jié),表示該主干頁的葉子頁的數(shù)量;
[0063]e.每個主干頁的第8個字節(jié)開始,分別以4字節(jié)表示一個空閑頁的頁號。
[0064]空閑頁上被刪數(shù)據(jù)表的分析:
[0065]如上述所描述,空閑頁已經(jīng)脫離了 B+tree的管理范圍,已經(jīng)無法得知某一個空閑頁是歸屬于哪個B+tree或者歸屬于哪張數(shù)據(jù)表,不過對于數(shù)據(jù)庫中存在的數(shù)據(jù)表,依然可以用嘗試的方式來分析空閑頁,從而把空閑頁中的刪除記錄解析出來,但是對于數(shù)據(jù)庫中已刪除的數(shù)據(jù)表,就無法嘗試分析了。
[0066]基于上述主表的三個特征可得知,數(shù)據(jù)庫中表格的刪除,依然可以通過主表的B+tree來分析出被刪表格的名稱、根頁和創(chuàng)建表的SQL語句等,其恢復的方式與一般的表格的刪除記錄恢復方式類似。
[0067]因此,我們可以通過主表的記錄解析(包括刪除記錄)并且排重得到刪除的表格的基本屬性,包括表格名字、根頁和SQL語句等,然后根據(jù)SQL語句分析出該刪除的數(shù)據(jù)表的表結構屬性,并且根據(jù)分析得到的表結構去解析空閑頁鏈表,從而解決數(shù)據(jù)庫中已刪除數(shù)據(jù)表無法刪除恢復的問題。
[0068]此外,對于某些特定的已知數(shù)據(jù)庫(比如Android手機的QQ數(shù)據(jù)庫等),我們可以跳過主表的記錄分析,直接自行構造建表記錄來達到解析空閑頁的目的。
[0069]為進一步說明各實施例,本發(fā)明提供有附圖。這些附圖為本發(fā)明揭露內(nèi)容的一部分,其主要用以說明實施例,并可配合說明書的相關描述來解釋實施例的運作原理。配合參考這些內(nèi)容,本領域普通技術人員應能理解其他可能的實施方式以及本發(fā)明的優(yōu)點?,F(xiàn)結合附圖和【具體實施方式】對本發(fā)明進一步說明。
當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
凌云县| 阜新市| 大石桥市| 巴里| 石台县| 大渡口区| 房产| 棋牌| 车致| 大田县| 交城县| 三穗县| 隆昌县| 大英县| 昌邑市| 九江县| 遵义县| 安义县| 贵州省| 黔南| 枣庄市| 马山县| 宾阳县| 清远市| 临漳县| 达孜县| 宣汉县| 鸡泽县| 汤阴县| 土默特左旗| 静安区| 临江市| 阿克苏市| 商丘市| 石泉县| 新绛县| 同心县| 保靖县| 原平市| 翁源县| 灯塔市|