專利名稱:使用最少的日志條目將數(shù)據(jù)庫更改記入日志的設(shè)備和方法
技術(shù)領(lǐng)域:
一般而言,本發(fā)明涉及計(jì)算機(jī)系統(tǒng),具體來說,涉及將數(shù)據(jù)庫中的變化記入日志。
背景技術(shù):
已經(jīng)開發(fā)了可使計(jì)算機(jī)存儲(chǔ)大量信息的數(shù)據(jù)庫系統(tǒng),以便用戶可以搜索和檢索數(shù)據(jù)庫中的特定信息。例如,保險(xiǎn)公司可能具有包括其所有保險(xiǎn)客戶以及他們的往來帳戶信息的數(shù)據(jù)庫,包括支付歷史、保險(xiǎn)費(fèi)量、保險(xiǎn)單編號(hào)、保險(xiǎn)單類型、承保范圍的排除等等。數(shù)據(jù)庫系統(tǒng)可使保險(xiǎn)公司在其數(shù)據(jù)庫中的數(shù)千乃至數(shù)百萬保險(xiǎn)客戶中檢索某一個(gè)保險(xiǎn)客戶的帳戶信息。
數(shù)據(jù)庫系統(tǒng)通常包括確保隨著對(duì)數(shù)據(jù)庫作出更改的數(shù)據(jù)庫完整性的數(shù)據(jù)庫管理器。數(shù)據(jù)庫管理器通常將對(duì)數(shù)據(jù)庫的更改記錄到日志中。日志可使對(duì)數(shù)據(jù)庫的更改在需要的情況下回滾。此外,日志可以用來復(fù)制數(shù)據(jù)庫按對(duì)原始數(shù)據(jù)庫作出記錄的更改的相同順序,對(duì)遠(yuǎn)程數(shù)據(jù)庫應(yīng)用記錄的更改。
當(dāng)對(duì)某一個(gè)記錄作出更改時(shí),現(xiàn)有技術(shù)已知的大多數(shù)數(shù)據(jù)庫管理器將該記錄中的所有字節(jié)都記錄到日志中,包括該記錄中的沒有更改的字節(jié)。由于沒有更改的記錄數(shù)據(jù)在數(shù)據(jù)庫日志中占用寶貴的空間與時(shí)間,因此,引入了被稱為最小化的數(shù)據(jù)日志記錄的較新的概念。利用最小化的數(shù)據(jù)日志,只記錄一個(gè)記錄的已經(jīng)更改的字節(jié),不管字段邊界如何,假設(shè)記錄中的在日志條目沒有表示的字節(jié)未發(fā)生改變。最小化的數(shù)據(jù)日志一般比完整的數(shù)據(jù)日志可能實(shí)現(xiàn)好得多的性能。然而,請(qǐng)注意,這種性能的提高是以犧牲可用性為代價(jià)的。
由于最小化的數(shù)據(jù)日志中的日志條目只包括已經(jīng)更改的字節(jié),因此,所產(chǎn)生的日志條目處于壓縮格式,該格式可能不再輕松地被人類或?qū)彶槌绦蜃x取、理解和識(shí)別。盡管這在某些情況下不構(gòu)成問題,但是,這在需要審查、調(diào)試或人類需要查看數(shù)據(jù)庫更改的其他情況下可能就是比較嚴(yán)重的問題。為進(jìn)行審查,人類審查人員或?qū)彶槌绦蛲ǔ⒏闹暗挠涗浀耐暾挠诚衽c更改之后的記錄的完整的映像進(jìn)行比較。如此,人類審查人員或?qū)彶槌绦蛳M谶M(jìn)行審查時(shí)看到完整的記錄。若沒有完整的記錄映像,讀出記錄的標(biāo)識(shí)(例如,John Doe的銀行帳戶 #12345),排列收集的數(shù)據(jù)集之中的匹配字段,以及識(shí)別字段邊界變得很難進(jìn)行,并且不構(gòu)成友好的人機(jī)界面。由于大多數(shù)最小化的數(shù)據(jù)日志條目不包含完整的記錄,甚至也不包含完整的字段,因此,所產(chǎn)生的編碼數(shù)據(jù)不是人類可讀的。為了這里的目的,術(shù)語“人類-可讀的”是指這樣的格式,該格式不描述更改內(nèi)容的內(nèi)部編碼表示,而是以完整的記錄布局描述更改內(nèi)容的表示,沒有部分地表示的字段。以此方式表示的數(shù)據(jù)可使人類審查人員或?qū)彶槌绦蜉p松地辨別發(fā)生的更改,并與使用完整的日志數(shù)據(jù)一致的方式顯示。因此,最小化的數(shù)據(jù)日志一般不用于需要審查的環(huán)境中。結(jié)果,需要基于日志進(jìn)行審查或偶爾進(jìn)行調(diào)試的環(huán)境沒有受益于由最小化的數(shù)據(jù)日志提供的性能提高。在沒有辦法提供可以以人類可讀的形式輸出的最小化的日志數(shù)據(jù)的情況下,對(duì)于使用最小化的日志數(shù)據(jù)但不能被輕松地審查的較高性能的系統(tǒng),或者使用可以被審查的完整的日志數(shù)據(jù)的較低性能的系統(tǒng),計(jì)算機(jī)行業(yè)不得不進(jìn)行選擇。當(dāng)既需要高性能,又需要審查時(shí),這些選擇中的任何一個(gè)選擇都不能合意。
發(fā)明內(nèi)容
根據(jù)優(yōu)選實(shí)施例,最小化的日志記錄機(jī)制以一種格式存儲(chǔ)最小化的日志數(shù)據(jù),該格式允許以人類可讀的形式顯示和輸出日志數(shù)據(jù),審查人員可以輕松地讀取和識(shí)別它們。當(dāng)對(duì)某一個(gè)記錄進(jìn)行了更改時(shí),不是僅寫入已更改的字節(jié),而是將已更改的每一個(gè)字段中的所有字節(jié),以及被選擇始終將記入日志的每一個(gè)字段中的所有字節(jié)都寫入到日志中。這些類別中的字段沒有一個(gè)不被捕獲。利用所有字段中的默認(rèn)數(shù)據(jù)創(chuàng)建默認(rèn)對(duì)象。當(dāng)日志條目需要以人類可讀的形式輸出時(shí),讀取默認(rèn)對(duì)象,然后,將最小化的日志條目覆蓋在默認(rèn)對(duì)象上。結(jié)果是這樣的對(duì)象該對(duì)象包含未更改的所有未選定的字段中的默認(rèn)數(shù)據(jù),以及已經(jīng)更改的所有字段中的以及被選擇始終將記入日志的所有字段中的日志數(shù)據(jù)。如此,優(yōu)選實(shí)施例既提供最小化的日志數(shù)據(jù)的好處,同時(shí)又允許對(duì)日志進(jìn)行審查。
如附圖所說明的,根據(jù)下列對(duì)本發(fā)明的優(yōu)選實(shí)施例的比較特定的說明,本發(fā)明的前面的及其他特點(diǎn)和優(yōu)點(diǎn)將變得顯而易見。
下面將參考附圖描述本發(fā)明的優(yōu)選實(shí)施例,其中,相同的符號(hào)表示相同的元素,以及圖1是根據(jù)優(yōu)選實(shí)施例的設(shè)備的方框圖;圖2是顯示了現(xiàn)有技術(shù)中的示例數(shù)據(jù)庫表中的記錄的詳細(xì)信息的方框圖;圖3是用于更新如圖2所示的結(jié)構(gòu)化查詢語言(SQL)中的語句;圖4是在應(yīng)用了圖3中的更新語句之后圖2中的記錄的方框圖;圖5是用于生成和存儲(chǔ)完整的日志條目的現(xiàn)有技術(shù)中的方法的流程圖;圖6是顯示了圖2和4的記錄以人類可讀的形式存在的顯示示例;圖7是用于生成和存儲(chǔ)最小化的日志條目的現(xiàn)有技術(shù)中的方法的流程圖;圖8是在應(yīng)用了圖3中的更新語句之后代表了對(duì)圖2中的記錄的更改的現(xiàn)有技術(shù)的最小化日志條目的方框圖;圖9顯示了使用現(xiàn)有技術(shù)的最小化日志條目,無論是之前還是之后記錄的表示都不是人類可讀的;圖10是根據(jù)優(yōu)選實(shí)施例有資格變?yōu)槿祟惪勺x的的最小化日志條目的方框圖;圖11是根據(jù)優(yōu)選實(shí)施例圖2中的數(shù)據(jù)庫表200的默認(rèn)對(duì)象的方框圖;圖12是使用根據(jù)優(yōu)選實(shí)施例的圖10中的最小化日志數(shù)據(jù)以人類可讀的形式存在的圖2和4的記錄的顯示示例;圖13是根據(jù)優(yōu)選實(shí)施例的用于生成和存儲(chǔ)最小化日志數(shù)據(jù)的方法的流程圖;以及圖14是根據(jù)優(yōu)選實(shí)施例的用于以人類可讀的形式輸出最小化日志數(shù)據(jù)的方法的流程圖。
具體實(shí)施例方式
優(yōu)選實(shí)施例以人類可讀的形式提供最小化日志數(shù)據(jù)。這是通過將被更改的每一個(gè)字段中的所有數(shù)據(jù),以及專門被選擇將記入日志的每一個(gè)字段中的所有數(shù)據(jù)寫入到日志中來實(shí)現(xiàn)的。每一個(gè)字段中的具有默認(rèn)值的默認(rèn)對(duì)象也被保存到日志中。當(dāng)日志條目需要以人類可讀的形式輸出時(shí),讀取對(duì)應(yīng)的默認(rèn)對(duì)象,讀取最小化的日志條目,并將來自最小化的日志條目的數(shù)據(jù)覆蓋在默認(rèn)對(duì)象上。結(jié)果是這樣的記錄該記錄包含所有原始字段,并包括已經(jīng)更改的所有字段中的以及被選擇始終將記入日志的所有字段中的數(shù)據(jù),以及沒有更改的以及沒有被選為記入日志的字段中的默認(rèn)數(shù)據(jù)的指示。此記錄是人類可讀的,盡管它包含最小化的日志數(shù)據(jù)。如此,優(yōu)選實(shí)施例實(shí)現(xiàn)了兩全其美由于最小化了日志數(shù)據(jù)收集,而顯著改善了性能,同時(shí)由于能夠以人類可讀的形式輸出最小化的日志數(shù)據(jù),而提供了對(duì)日志數(shù)據(jù)進(jìn)行審查的能力。
請(qǐng)參看圖1,計(jì)算機(jī)系統(tǒng)100是根據(jù)本發(fā)明的優(yōu)選實(shí)施例的設(shè)備的一個(gè)合適的實(shí)現(xiàn)方式。計(jì)算機(jī)系統(tǒng)100是IBM eServer iSeries計(jì)算機(jī)系統(tǒng)。然而,如那些本領(lǐng)域普通技術(shù)人員所理解的,本發(fā)明的機(jī)制和設(shè)備同樣可以應(yīng)用于任何計(jì)算機(jī)系統(tǒng),不管計(jì)算機(jī)系統(tǒng)是復(fù)雜的多用戶計(jì)算設(shè)備,單用戶工作站,還是嵌入式控制系統(tǒng)。如圖1所示,計(jì)算機(jī)系統(tǒng)100包括一個(gè)或多個(gè)處理器110、主存儲(chǔ)器120、大容量存儲(chǔ)接口130、顯示接口140,以及網(wǎng)絡(luò)接口150。這些系統(tǒng)組件通過系統(tǒng)總線160連接起來。大容量存儲(chǔ)接口130用于將諸如直接訪問存儲(chǔ)設(shè)備155之類的大容量存儲(chǔ)設(shè)備連接到計(jì)算機(jī)系統(tǒng)100。直接訪問存儲(chǔ)設(shè)備155的一種特定類型是可讀的和可寫入的CD RW驅(qū)動(dòng)器,該驅(qū)動(dòng)器可以從CD RW 195中讀取數(shù)據(jù),并可以向其中存儲(chǔ)數(shù)據(jù)。
根據(jù)優(yōu)選實(shí)施例的主存儲(chǔ)器120包含數(shù)據(jù)121、操作系統(tǒng)122、數(shù)據(jù)庫123、最小化的日志記錄機(jī)制125以及日志126。數(shù)據(jù)121表示用作向計(jì)算機(jī)系統(tǒng)100中的任何程序的輸入或來自計(jì)算機(jī)系統(tǒng)100中的任何程序的輸出的任何數(shù)據(jù)。操作系統(tǒng)122是業(yè)界已知的多任務(wù)操作系統(tǒng)i5/OS;然而,如那些本領(lǐng)域普通技術(shù)人員所理解的,本發(fā)明的精神和范圍不僅限于任何一種操作系統(tǒng)。數(shù)據(jù)庫123是任何合適的數(shù)據(jù)庫,無論是當(dāng)前已知的還是將來開發(fā)的。數(shù)據(jù)庫123包括一個(gè)或多個(gè)記錄124,記錄包含數(shù)據(jù)的字段。最小化的日志記錄機(jī)制125適當(dāng)?shù)卦谌罩?26中生成日志條目。圖1中的單個(gè)條目被顯示為128A,…,128N。最小化的日志記錄機(jī)制125以一種格式將日志條目128A,…,128N存儲(chǔ)在日志126中,該格式允許日志條目稍后可以以人類可讀的形式輸出。也可以通過利用存儲(chǔ)在日志126中的條目在日志126中存儲(chǔ)每一個(gè)對(duì)象實(shí)例的默認(rèn)對(duì)象129。通過根據(jù)優(yōu)選實(shí)施例存儲(chǔ)默認(rèn)對(duì)象和最小化的日志條目,通過利用對(duì)象的最小化的日志條目中的數(shù)據(jù)覆蓋默認(rèn)對(duì)象,可以輸出人類可讀的形式。結(jié)果是這樣的輸出該輸出顯示了已經(jīng)更改的所有字段中的以及被選擇始終將記入日志的所有字段中的實(shí)際數(shù)據(jù),以及沒有更改的所有未選定的字段中的默認(rèn)數(shù)據(jù)。如此,最小化的日志記錄機(jī)制125得以提供最小化的日志數(shù)據(jù)的顯著的性能好處,同時(shí)仍允許輕松地對(duì)日志進(jìn)行審查。
計(jì)算機(jī)系統(tǒng)100利用已知的虛擬尋址機(jī)制,這種機(jī)制允許計(jì)算機(jī)系統(tǒng)100的程序的表現(xiàn)如同它們僅可以訪問大型單個(gè)存儲(chǔ)實(shí)體而不是訪問諸如主存儲(chǔ)器120和DASD設(shè)備155之類的多個(gè)較小的存儲(chǔ)實(shí)體。因此,盡管顯示的數(shù)據(jù)121、操作系統(tǒng)122、數(shù)據(jù)庫123、最小化的日志記錄機(jī)制125以及日志126駐留在主存儲(chǔ)器120上,但是,那些本領(lǐng)域普通技術(shù)人員將認(rèn)識(shí)到,這些項(xiàng)目不一定都完全同時(shí)包含主存儲(chǔ)器120中。還應(yīng)注意,這里所使用的術(shù)語“存儲(chǔ)器”一般是指計(jì)算機(jī)系統(tǒng)100的整個(gè)虛擬存儲(chǔ)器,并可以包括連接到計(jì)算機(jī)系統(tǒng)100的其他計(jì)算機(jī)系統(tǒng)的虛擬存儲(chǔ)器。
處理器110可以由一個(gè)或多個(gè)微處理器和/或集成電路構(gòu)成。處理器110執(zhí)行存儲(chǔ)在主存儲(chǔ)器120中的程序指令。主存儲(chǔ)器120存儲(chǔ)了處理器110可以訪問的程序和數(shù)據(jù)。當(dāng)計(jì)算機(jī)系統(tǒng)100啟動(dòng)時(shí),處理器110首先執(zhí)行構(gòu)成了操作系統(tǒng)122的程序指令。操作系統(tǒng)122是對(duì)計(jì)算機(jī)系統(tǒng)100的資源進(jìn)行管理的復(fù)雜的程序。這些資源中的一些資源是處理器110、主存儲(chǔ)器120、大容量存儲(chǔ)接口130、顯示接口140,網(wǎng)絡(luò)接口150,以及系統(tǒng)總線160。
雖然顯示的計(jì)算機(jī)系統(tǒng)100只包含單一CPU和單一系統(tǒng)總線,但是,那些本領(lǐng)域普通技術(shù)人員將理解,可以使用具有多個(gè)處理器和/或多個(gè)總線的計(jì)算機(jī)系統(tǒng)來實(shí)施本發(fā)明。此外,在優(yōu)選實(shí)施例中所使用的接口各自都包括單獨(dú)的完全編程的微處理器,用于從處理器110中減少計(jì)算-密集的處理的負(fù)載。然而,如那些本領(lǐng)域普通技術(shù)人員所理解的,本發(fā)明同樣適用于只使用I/O適配器執(zhí)行類似的功能的計(jì)算機(jī)系統(tǒng)。
顯示器接口140用于直接將一個(gè)或多個(gè)顯示器165連接到計(jì)算機(jī)系統(tǒng)100。這些顯示器165可以是非智能的(即,啞的)終端或完全可編程的工作站,用于使系統(tǒng)管理員和用戶與計(jì)算機(jī)系統(tǒng)100進(jìn)行通信。然而,需要注意的是,盡管提供了顯示器接口140以支持與一個(gè)或多個(gè)顯示器165的通信,但是,計(jì)算機(jī)系統(tǒng)100不一定需要顯示器165,因?yàn)榕c用戶的所有必需的交互及其他過程都可以通過網(wǎng)絡(luò)接口150進(jìn)行。
網(wǎng)絡(luò)接口150用于跨網(wǎng)絡(luò)170地將其他計(jì)算機(jī)系統(tǒng)和/或工作站(例如,圖1中的175)連接到計(jì)算機(jī)系統(tǒng)100。不管計(jì)算機(jī)系統(tǒng)100如何連接到其他計(jì)算機(jī)系統(tǒng)和/或工作站,不管是使用現(xiàn)代的模擬和/或數(shù)字技術(shù)還是通過將來的某些網(wǎng)絡(luò)機(jī)制建立網(wǎng)絡(luò)連接170,本發(fā)明都同樣適用。此外,可以使用許多不同的網(wǎng)絡(luò)協(xié)議來實(shí)現(xiàn)網(wǎng)絡(luò)。這些協(xié)議是可使計(jì)算機(jī)跨網(wǎng)絡(luò)170進(jìn)行通信的專門的計(jì)算機(jī)程序。TCP/IP(傳輸控制協(xié)議/因特網(wǎng)協(xié)議)是合適的網(wǎng)絡(luò)協(xié)議的一個(gè)示例。
此時(shí),值得注意的是,盡管是在完整功能的計(jì)算機(jī)系統(tǒng)的上下文中描述本發(fā)明的并且還將繼續(xù)這樣描述,但是,那些精通本技術(shù)的普通人員將認(rèn)識(shí)到,本發(fā)明能夠以各種形式作為程序產(chǎn)品進(jìn)行分發(fā),不管實(shí)際用于進(jìn)行分發(fā)的承載計(jì)算機(jī)可讀的信號(hào)的介質(zhì)的特定類型是什么,本發(fā)明都同樣適用。合適的承載計(jì)算機(jī)可讀的信號(hào)的介質(zhì)的示例包括可記錄類型的介質(zhì),如軟盤和CD RW(例如,圖1的195),以及傳送類型的介質(zhì),如數(shù)字和模擬通信鏈路。注意,首選的承載信號(hào)的介質(zhì)是有形的。
現(xiàn)在將呈現(xiàn)一個(gè)簡單的示例,將現(xiàn)有技術(shù)的用于進(jìn)行日志記錄的方法與優(yōu)選實(shí)施例的方法進(jìn)行比較,優(yōu)選情況下,優(yōu)選實(shí)施例的方法通過圖1中的最小化的日志記錄機(jī)制來執(zhí)行。請(qǐng)參看圖2,示例數(shù)據(jù)庫表200包括如圖所示的多個(gè)記錄。第二個(gè)記錄是低于數(shù)據(jù)庫表200的記錄210。表200包括五個(gè)字段或列,即ProdID,它是基于產(chǎn)品標(biāo)識(shí)符的主鍵;Description,描述了對(duì)應(yīng)于該記錄的商品;Quantity,顯示了清單中的商品的數(shù)量;Cost,顯示了該商品的以美元標(biāo)價(jià)的成本;以及Product_Picture,包含了商品的數(shù)字圖像。圖2顯示了記錄2的這些字段以及它們的值。
我們現(xiàn)在假設(shè),需要對(duì)圖2中的記錄2執(zhí)行更新操作。圖3顯示了一個(gè)更新操作示例,該操作代表了將商品的量減少1的SQL語句。例如,當(dāng)銷售了一個(gè)商品時(shí),可以使用此更新操作。注意,圖3中的where子句指定了ProdID=1001,對(duì)應(yīng)于圖2所示的記錄210,因?yàn)镻rodID是表200中的主鍵(即,唯一的)。在執(zhí)行了圖3中的更新語句之后,記錄210如圖4所示,Quantity字段減少1。盡管圖3顯示了更新語句,但是,這只是對(duì)數(shù)據(jù)庫表進(jìn)行更改的已知途徑的一個(gè)特定示例。優(yōu)選實(shí)施例可以明確地?cái)U(kuò)展到更改數(shù)據(jù)庫表中的數(shù)據(jù)任何合適的途徑,無論是當(dāng)前已知的還是將來開發(fā)的。
現(xiàn)有技術(shù)中有多種不同的方式用于使通過執(zhí)行圖3中的更新語句所引起的記錄2從圖2到圖4的更改被記錄到日志中??紤]的第一種方法是完整的數(shù)據(jù)日志記錄,由圖5中的方法500代表。在完全數(shù)據(jù)日志記錄上下文中,一個(gè)記錄中的所有數(shù)據(jù)都被寫入到日志中。如此,圖4中的記錄的完整的日志條目將包括圖4中顯示的所有數(shù)據(jù),盡管只有Quantity字段被更改。首先生成完整的日志條目,包括圖4中的所有字段和數(shù)據(jù)(步驟510)。然后,將完整的日志條目存儲(chǔ)在日志中(步驟520)。圖5所示的現(xiàn)有技術(shù)的用于進(jìn)行完全日志記錄的方法的問題是,圖4中所顯示的所有數(shù)據(jù)都被存儲(chǔ)到日志中,包括產(chǎn)品的圖片的50K JPEG數(shù)據(jù)。不用說,在表200的每一個(gè)日志條目中存儲(chǔ)產(chǎn)品圖片,將會(huì)導(dǎo)致日志要求巨大的存儲(chǔ)空間,從而顯著降低了日志的性能。當(dāng)考慮在復(fù)制環(huán)境中使用日志條目時(shí),額外的性能損失是明顯的。在這樣的環(huán)境中,日志條目數(shù)據(jù)跨通信信道地發(fā)送到輔助系統(tǒng)中,并用于更新數(shù)據(jù)庫表的副本實(shí)例。當(dāng)只修改Quantity字段時(shí),在一而再,再而三地考慮傳輸50K JPEG數(shù)據(jù)的情況下,通信信道內(nèi)的增大的開銷是顯而易見的。
圖5中的現(xiàn)有技術(shù)的方法500中顯示的完全日志記錄的一個(gè)優(yōu)點(diǎn)是,可以對(duì)日志進(jìn)行審查,因?yàn)榭梢暂p松地以人類可讀的形式輸出日志條目。圖6顯示了在執(zhí)行圖3中的更新操作之前和執(zhí)行圖3中的更新操作之后日志的輸出。因?yàn)橥暾娜罩緮?shù)據(jù)是人類可讀的形式,因此,可以對(duì)它進(jìn)行審查。然而,這種審查數(shù)據(jù)的能力是以每次更改任何字段時(shí)必須存儲(chǔ)一個(gè)記錄中的所有字段而產(chǎn)生的顯著的性能損失為代價(jià)的。
由于由完整的日志記錄產(chǎn)生的顯著的性能損失,因此,開發(fā)出了不同的方法,以只將一個(gè)記錄中的已經(jīng)更改的字節(jié)寫入到日志中。在現(xiàn)有技術(shù)這被稱為最小化的數(shù)據(jù)日志記錄,這是在不考慮字段邊界的情況下實(shí)現(xiàn)的。請(qǐng)參看圖7,最小化的數(shù)據(jù)日志記錄的現(xiàn)有技術(shù)方法700開始時(shí)生成最小化的日志條目,該日志條目只包括記錄中的更改的字節(jié)(步驟710)。然后,可以將最小化的日志條目存儲(chǔ)在日志中(步驟720)。圖8顯示了在應(yīng)用圖3中的更新之后圖2中的記錄的最小化的日志條目的一個(gè)實(shí)現(xiàn)方式示例?;趯?duì)于某些字段類型日志條目的內(nèi)部數(shù)據(jù)表示不同于外部表示的事實(shí),并且由于處理數(shù)據(jù)庫表示內(nèi)的可變長度數(shù)據(jù)的不同的方法,已知的最小化的日志條目的格式會(huì)復(fù)雜化。為了便于說明,簡化了圖8中的現(xiàn)有技術(shù)的日志條目示例810。除了記錄的每一個(gè)更改的部分的一組數(shù)據(jù)(包括更改偏移字段、更改字段的長度,以及更改的數(shù)據(jù)字段)之外,最小化的日志條目810還包括記錄編號(hào)字段。記錄編號(hào)字段標(biāo)識(shí)數(shù)據(jù)庫表中的被更改的記錄編號(hào)。更改偏移字段假設(shè)ProdID和Quantity字段為8字節(jié)整數(shù)值,Description字段為20字節(jié),這樣,從記錄的開始到更改的字節(jié)的字節(jié)偏移是8+20+7=35。更改的量是從十進(jìn)制1105(十六進(jìn)制451)更改為十進(jìn)制1104(十六進(jìn)制450)。由于只更改了一個(gè)字節(jié),因此,在最小化的日志條目中只記錄了最后一個(gè)字節(jié)(十六進(jìn)制50)。通過只將那些被更改的字節(jié)寫入到日志條目中,現(xiàn)有技術(shù)的最小化的日志機(jī)制顯著地改善了日志性能,并降低了空間消耗,因?yàn)槲锤牡臄?shù)據(jù),包括50K JPEG數(shù)據(jù),不必寫入到日志中。然而,這種性能的改善是以不能對(duì)日志進(jìn)行審查為代價(jià)的。如圖9所示,不能輕松地以人類可讀的形式輸出日志數(shù)據(jù)。人類希望看到完整的字段并輕松地識(shí)別數(shù)據(jù)庫字段邊界。結(jié)果,很難或無法對(duì)其中存儲(chǔ)了最小化的日志數(shù)據(jù)的日志進(jìn)行審查,特別是在被分析的日志駐留在存放了原始數(shù)據(jù)庫表的機(jī)器之外的不同的機(jī)器的情況下。
優(yōu)選的實(shí)施例解決了不能對(duì)最小化的日志數(shù)據(jù)進(jìn)行審查的問題,同時(shí)仍能提供最小化的數(shù)據(jù)日志記錄的幾乎所有優(yōu)點(diǎn)。在優(yōu)選實(shí)施例中,創(chuàng)建了圖10所示的最小化的日志條目1010。我們假設(shè),用戶或系統(tǒng)已經(jīng)選擇了ProdID字段始終將被記入日志中。用戶很可能選擇此字段,以便審查人員可以輕松地識(shí)別記錄的標(biāo)識(shí)。結(jié)果,日志條目1010包括第一部分1020,該部分記錄了ProdID字段中的完整的8個(gè)字節(jié),第二部分1030,該部分記錄了Quantity字段中的完整的8個(gè)字節(jié),因?yàn)镼uantity字段已經(jīng)改變。不是只存儲(chǔ)已經(jīng)更改的字節(jié),而是在日志條目中存儲(chǔ)兩種信息類型1)具有任何更改的每一個(gè)字段中的所有數(shù)據(jù);以及2)被選擇始終將記入日志的每一個(gè)字段中的所有數(shù)據(jù)。在圖2中的表200中,ProdID字段是鍵字段。我們假設(shè),用戶或系統(tǒng)指定了ProdID字段始終被記入日志中,這樣審查人員可以輕松地識(shí)別該記錄。結(jié)果,優(yōu)選實(shí)施例的最小化的日志條目1010包括位于1020處的ProdID字段的數(shù)據(jù),因?yàn)樗x定的始終被記入日志的字段,還包括1030處的Quantity字段中的所有數(shù)據(jù),因?yàn)樗呀?jīng)更改。注意,圖10所示的最小化的日志條目1010包括選定的ProdID字段的8個(gè)字節(jié)的數(shù)據(jù),并包括整個(gè)已經(jīng)更改的字段Quantity的8個(gè)字節(jié)的數(shù)據(jù),需要比圖8所示的現(xiàn)有技術(shù)的最小化的日志條目810稍微多一些的存儲(chǔ)空間。然而,這種數(shù)據(jù)量的輕微的增加,可使日志條目1010以支持對(duì)日志進(jìn)行審查的人類可讀的形式輸出。
當(dāng)將最小化的日志條目1010存儲(chǔ)到日志中時(shí),最小化的日志機(jī)制(例如,圖1中的125)進(jìn)行檢查以查看日志是否已經(jīng)包含表的當(dāng)前默認(rèn)對(duì)象。如果不,則將當(dāng)前默認(rèn)對(duì)象存儲(chǔ)在日志中。注意,不是對(duì)于日志中的每一個(gè)單個(gè)條目都需要默認(rèn)對(duì)象,而只對(duì)于條目存儲(chǔ)在日志中的每一個(gè)對(duì)象實(shí)例才需要。如此,對(duì)于圖2所示的數(shù)據(jù)庫表200中的所有記錄,在日志中存儲(chǔ)了如圖11所示的單個(gè)默認(rèn)對(duì)象1100。如此,如果一個(gè)日志包含來自四個(gè)不同的數(shù)據(jù)庫表的25,000個(gè)日志條目,則只有四個(gè)對(duì)應(yīng)的默認(rèn)對(duì)象需要存儲(chǔ)在日志中。
如圖11所示,默認(rèn)對(duì)象1100包括所有字段中的默認(rèn)數(shù)據(jù)。默認(rèn)數(shù)據(jù)可以是任何合適的位模式。在優(yōu)選實(shí)施例中,默認(rèn)數(shù)據(jù)包括簡稱為“空值位圖”的位模式,以指出哪些默認(rèn)字段是空值,以及每一個(gè)非空值的字段的默認(rèn)值。圖11中的空值位圖在開頭四位為0,第五位為1,表示Product Picture字段是空值。默認(rèn)數(shù)據(jù)在圖11中被表示破折號(hào)。當(dāng)最小化的日志條目1010需要以人類可讀的形式輸出時(shí),讀取默認(rèn)對(duì)象1100,然后,將目志數(shù)據(jù)覆蓋在默認(rèn)對(duì)象的副本上。結(jié)果是具有所有字段的對(duì)象,如圖12所示,已經(jīng)更改的字段包含數(shù)據(jù),而沒有更改的字段則用默認(rèn)數(shù)據(jù)以及圖12所示的“收集的字段位圖”的標(biāo)識(shí)符表示,以指明默認(rèn)數(shù)據(jù)代表沒有收集其數(shù)據(jù)的字段。圖12中的收集的字段位圖中的五個(gè)位對(duì)應(yīng)于圖2中的數(shù)據(jù)庫表中的五個(gè)字段,位1指出收集了對(duì)應(yīng)的字段,位0指出沒有收集對(duì)應(yīng)的字段。圖12所示的收集的字段位圖12具有值10100,指出了第一和第三字段包含有效數(shù)據(jù),而第二、第四和第五字段既沒有更改也沒有被標(biāo)識(shí)為始終被收集的關(guān)鍵字段。這是區(qū)別真正的默認(rèn)數(shù)據(jù)和可能與默認(rèn)數(shù)據(jù)具有相同值的實(shí)際數(shù)據(jù)的簡便而有效的途徑。圖12所示的額外的結(jié)構(gòu)是“更改的字段位圖”,類似地被用作通過日志條目中所產(chǎn)生的數(shù)據(jù)庫操作確定哪些字段被更改的簡便而有效的途徑。位1表示對(duì)應(yīng)的字段被更改,位0表示對(duì)應(yīng)的字段沒有更改。圖12中的破折號(hào)表示仍包含默認(rèn)數(shù)據(jù),即,沒有被更改的字段。請(qǐng)注意,圖10所示的最小化的日志條目1010可以以人類可讀的形式輸出,如圖12所示。結(jié)果,優(yōu)選的實(shí)施例的最小化的日志提供了現(xiàn)有技術(shù)中的最小化的數(shù)據(jù)日志記錄的幾乎所有優(yōu)點(diǎn),同時(shí)仍可以進(jìn)行審查。
請(qǐng)參看圖13,根據(jù)優(yōu)選實(shí)施例的方法1300顯示了當(dāng)寫入到日志時(shí)最小化的日志記錄機(jī)制(例如,圖1中的125)執(zhí)行的步驟。首先,創(chuàng)建最小化的日志條目,包括被指定始終被記入日志的所有字段以及已經(jīng)更改的任意字段的所有數(shù)據(jù)(步驟1310)。此時(shí)也構(gòu)建位圖(例如,圖12中的收集的字段位圖和更改的字段位圖),并包括在條目中,以指出該記錄的哪些字段被記入日志中,該記錄的哪些字段被更改。如果日志還沒有對(duì)應(yīng)于日志條目的對(duì)象的默認(rèn)條目(步驟1320=NO),則利用默認(rèn)數(shù)據(jù)創(chuàng)建對(duì)象的默認(rèn)條目,默認(rèn)條目存儲(chǔ)在日志中(步驟1330)。然后,可以將最小化的日志條目存儲(chǔ)在日志中(步驟1340)。請(qǐng)注意,如果日志已經(jīng)包含對(duì)應(yīng)于日志條目的對(duì)象的默認(rèn)條目(步驟1320=Y(jié)ES),最小化的日志條目可以存儲(chǔ)在日志中(步驟1340),而不創(chuàng)建新的默認(rèn)條目。
圖13中的方法1300顯示了將所有選定的字段以及所有已經(jīng)更改的字段存儲(chǔ)到最小化的日志條目中。如此,用戶可以指定哪些字段始終存儲(chǔ)在日志中,而字段的其余部分有被最小化的資格。當(dāng)然,在其他實(shí)施例中,某些字段可以基于它們的特征而始終存儲(chǔ)起來。例如,根據(jù)優(yōu)選實(shí)施例,鍵字段可以自動(dòng)地始終被記入日志中。
請(qǐng)參看圖14,根據(jù)優(yōu)選實(shí)施例的方法1400顯示了當(dāng)以人類可讀的形式輸出最小化的日志條目時(shí)最小化的日志記錄機(jī)制(例如,圖1中的125)執(zhí)行的步驟。當(dāng)代表對(duì)象A的日志條目需要以人類可讀的形式從日志中輸出時(shí),方法1400開始(步驟1410)。從日志中讀取對(duì)象A的默認(rèn)條目(步驟1420)。從日志中讀取對(duì)象A的最小化的日志條目(步驟1430)。然后,將對(duì)象A最小化的日志條目覆蓋到對(duì)象A的默認(rèn)條目中(步驟1440)。將最小化的日志條目覆蓋到對(duì)象A的默認(rèn)條目中,將保留不受最小化的日志條目影響的所有字段中的默認(rèn)數(shù)據(jù),同時(shí)將最小化的日志條目中的數(shù)據(jù)寫入到被選擇始終將記入日志的所有字段中和所有已經(jīng)更改的字段。結(jié)果是完整的數(shù)據(jù)庫記錄,其中包括,沒有更改的所有未選定的字段中的默認(rèn)數(shù)據(jù),以及選定的字段中的以及已經(jīng)更改的字段中的實(shí)際數(shù)據(jù),如圖12所示。結(jié)果,現(xiàn)在可以以人類可讀的形式輸出最小化的日志條目(步驟1450)。如方法1400所示,最小化的日志條目直到它被覆蓋在對(duì)應(yīng)于最小化的日志條目的默認(rèn)對(duì)象上之前不是人類可讀的。所產(chǎn)生的對(duì)象是人類可讀的,然后,可以輸出。
優(yōu)選的實(shí)施例與現(xiàn)有技術(shù)相比具體很多優(yōu)點(diǎn)。通過在最小化數(shù)據(jù)日志記錄過程中在日志中僅比現(xiàn)有技術(shù)存儲(chǔ)稍微多一些的數(shù)據(jù),在優(yōu)選的實(shí)施例中實(shí)現(xiàn)了最小化數(shù)據(jù)日志記錄的幾乎所有的性能好處,同時(shí),仍可以人類可讀的形式提供輸出,從而允許對(duì)日志進(jìn)行審查。結(jié)果是兩全其美-通過最小化存儲(chǔ)的數(shù)據(jù)獲得的高性能,同時(shí)仍可以進(jìn)行審查。
并非存儲(chǔ)的日志信息的所有用戶都需要全面的審查和人類可識(shí)別的功能。這種方法的其中一個(gè)優(yōu)點(diǎn)是,可以輕松地提供兩種用法。即,僅僅因?yàn)樵谧钚』瘲l目表示中捕獲了記錄更改不會(huì)要求它在向用戶顯示時(shí)被重新展開為人類可讀的表示。優(yōu)選實(shí)施例說明,以第一種格式將最小化日志條目存儲(chǔ)在日志中,并且最小化日志條目的輸出既可以采用此第一種內(nèi)部格式,也可以采用人類可讀形式的第二種格式。提供這兩種不同的格式具有較大的靈活性。例如,可以使用第一種格式向遠(yuǎn)程系統(tǒng)復(fù)制數(shù)據(jù)庫,從而確保了傳輸量縮小,而可以使用第二種人類可讀的格式來進(jìn)行審查或調(diào)試。兩種不同的格式可使得優(yōu)選實(shí)施例的最小化日志機(jī)制可以同樣容易地滿足人類審查人員的需求和針對(duì)復(fù)制的機(jī)器驅(qū)動(dòng)的重放需求,而無需捕獲和存儲(chǔ)兩個(gè)不同的實(shí)例。
優(yōu)選實(shí)施例的一個(gè)優(yōu)點(diǎn)是,僅憑日志本身就包含了顯示最小化日志條目的人類可讀的形式所需要的所有必需的數(shù)據(jù)。即,被審查或調(diào)試的相關(guān)的數(shù)據(jù)庫表甚至可以不必存在于由審查人員用來查看日志條目的系統(tǒng)上。這是通過將默認(rèn)對(duì)象也存儲(chǔ)在日志中來實(shí)現(xiàn)的。這使得日志能夠獨(dú)立地顯示日志條目。結(jié)果,日志可以保存到介質(zhì)上或遠(yuǎn)程發(fā)送到輔助系統(tǒng)中,保證日志包含完整的審查記錄。這在可以輕松地存檔日志或?qū)⑵鋫鬏數(shù)降诙到y(tǒng)以便進(jìn)行分析的審查環(huán)境中特別有吸引力。
那些本領(lǐng)域普通技術(shù)人員將理解,在本發(fā)明范圍內(nèi)許多變體也是可以的。如此,雖然是參考優(yōu)選實(shí)施例顯示和描述本發(fā)明的,但是,那些本領(lǐng)域普通技術(shù)人員將理解,在不偏離本發(fā)明的精神和范圍的情況下,可以進(jìn)行各種修改。
權(quán)利要求
1.一種設(shè)備,包括至少一個(gè)處理器;連接到至少一個(gè)處理器的存儲(chǔ)器;駐留在存儲(chǔ)器中的數(shù)據(jù)庫,所述數(shù)據(jù)庫包括多個(gè)記錄;以及駐留在存儲(chǔ)器中的并由至少一個(gè)處理器執(zhí)行的日志記錄機(jī)制,當(dāng)數(shù)據(jù)庫中的某一個(gè)記錄更改時(shí),所述日志記錄機(jī)制在日志中存儲(chǔ)一個(gè)條目,所述條目包括來自所述記錄中的已經(jīng)更改的所有字段的所有數(shù)據(jù),所述條目包括來自始終將記入日志的任何選定的字段的所有數(shù)據(jù),所述條目排除所述記錄中的沒有更改的所有未選定的字段的所有數(shù)據(jù)。
2.根據(jù)權(quán)利要求1所述的設(shè)備,其中,選定的字段是由用戶選擇的。
3.根據(jù)權(quán)利要求1所述的設(shè)備,其中,選定的字段是通過指定類型來選擇的,其中,指定的類型的所有字段都包括在選定的字段中。
4.根據(jù)權(quán)利要求1所述的設(shè)備,其中,日志記錄機(jī)制確定對(duì)應(yīng)于所述條目的默認(rèn)對(duì)象是否已經(jīng)存儲(chǔ)在日志中,如果不,則將對(duì)應(yīng)于所述條目的默認(rèn)對(duì)象存儲(chǔ)在日志中。
5.根據(jù)權(quán)利要求4所述的設(shè)備,其中,默認(rèn)對(duì)象包括所述對(duì)象中的每一個(gè)字段的默認(rèn)數(shù)據(jù)。
6.根據(jù)權(quán)利要求4所述的設(shè)備,其中,所述條目通過下列方式被日志記錄機(jī)制以人類可讀的形式輸出日志記錄機(jī)制讀取默認(rèn)對(duì)象,讀取所述條目,將來自所述條目的數(shù)據(jù)覆蓋在默認(rèn)對(duì)象上,并輸出被覆蓋的對(duì)象。
7.根據(jù)權(quán)利要求6所述的設(shè)備,其中,人類可讀的形式被顯示給用戶,其中,所有選定的字段以及所有已更改的字段的數(shù)據(jù)都顯示給用戶,其中,默認(rèn)數(shù)據(jù)在人類可讀的形式的顯示中被表示為沒有變化的數(shù)據(jù)。
8.根據(jù)權(quán)利要求4所述的設(shè)備,其中,所述條目包括收集的字段位圖,所述位圖指出所述條目中的哪些字段被收集,所述條目中的哪些字段沒有被收集,還包括更改的字段位圖,所述位圖指出所述條目中的哪些字段被更改,以及所述條目中的哪些字段沒有更改。
9.一種計(jì)算機(jī)實(shí)現(xiàn)的用于將對(duì)數(shù)據(jù)庫中的某一個(gè)記錄的更改存儲(chǔ)到日志中的一個(gè)條目的方法,所述方法包括下列步驟生成所述條目,所述條目包括來自所述記錄中的已經(jīng)更改的所有字段的所有數(shù)據(jù),所述條目包括來自始終將記入日志的任何選定的字段的所有數(shù)據(jù),所述條目排除所述記錄中的沒有更改的所有未選定的字段的所有數(shù)據(jù);以及將所述條目存儲(chǔ)在日志中。
10.根據(jù)權(quán)利要求9所述的方法,其中,選定的字段是由用戶選擇的。
11.根據(jù)權(quán)利要求9所述的方法,其中,選定的字段是通過指定類型來選擇的,其中,指定的類型的所有字段都包括在選定的字段中。
12.根據(jù)權(quán)利要求9所述的方法,進(jìn)一步包括下列步驟確定對(duì)應(yīng)于所述條目的默認(rèn)對(duì)象是否已經(jīng)存儲(chǔ)在日志中;以及如果對(duì)應(yīng)于所述條目的默認(rèn)對(duì)象還沒有存儲(chǔ)在日志中,則將對(duì)應(yīng)于所述條目的默認(rèn)對(duì)象存儲(chǔ)在日志中。
13.根據(jù)權(quán)利要求12所述的方法,其中,默認(rèn)對(duì)象包括所述對(duì)象中的每一個(gè)字段的默認(rèn)數(shù)據(jù)。
14.根據(jù)權(quán)利要求12所述的方法,進(jìn)一步包括通過執(zhí)行下列步驟來以人類可讀的形式輸出所述條目的步驟讀取默認(rèn)對(duì)象;讀取所述條目;將來自所述條目的數(shù)據(jù)覆蓋在默認(rèn)對(duì)象上;以及輸出被覆蓋的對(duì)象。
15.根據(jù)權(quán)利要求14所述的方法,進(jìn)一步包括以人類可讀的形式向用戶顯示的步驟,其中,所有選定的字段以及所有已更改的字段的數(shù)據(jù)都顯示給用戶,其中,默認(rèn)數(shù)據(jù)在人類可讀的形式的顯示中被表示為沒有變化的數(shù)據(jù)。
全文摘要
公開了使用最少的日志條目記錄數(shù)據(jù)庫更改的設(shè)備和方法。最小化的日志記錄機(jī)制以一種格式存儲(chǔ)最小化的日志數(shù)據(jù),該格式允許以人類可讀的形式顯示和輸出日志數(shù)據(jù)。當(dāng)對(duì)某一個(gè)記錄進(jìn)行了更改時(shí),不是僅寫入已更改的字節(jié),而是將已更改的每一個(gè)字段中的所有字節(jié),以及被選擇始終將記入日志的每一個(gè)字段中的所有字節(jié)都寫入到日志中。利用所有字段中的默認(rèn)數(shù)據(jù)創(chuàng)建默認(rèn)對(duì)象。當(dāng)日志條目需要以人類可讀的形式輸出時(shí),讀取默認(rèn)對(duì)象,然后,將最小化的日志條目覆蓋在默認(rèn)對(duì)象上。結(jié)果是這樣的對(duì)象該對(duì)象包含未更改的所有未選定的字段中的默認(rèn)數(shù)據(jù),以及已經(jīng)更改的所有字段中的以及被選擇將始終記入日志的所有字段中的日志數(shù)據(jù)。
文檔編號(hào)G06F11/14GK1975728SQ20061014469
公開日2007年6月6日 申請(qǐng)日期2006年11月14日 優(yōu)先權(quán)日2005年12月1日
發(fā)明者亞當(dāng)·T.·斯達(dá)爾曼, 拉里·W.·揚(yáng)格倫 申請(qǐng)人:國際商業(yè)機(jī)器公司