iLog 介面 (txlogpub.h)
提供一般低階記錄功能。
Common Log File System (CLFS) ,提供 ILog 所提供的超集功能。
繼承
ILog 介面繼承自 IUnknown 介面。 ILog 也有下列類型的成員:
方法
ILog 介面具有這些方法。
ILog::AppendRecord 將新記錄寫入記錄的結尾。 |
ILog::Force 強制記錄檔的內容到磁碟,至少會透過指定的 LSN。 |
ILog::GetLogLimits 擷取記錄檔目前界限的相關信息。 |
ILog::ReadRecord 從記錄檔讀取記錄。 |
ILog::ReadRecordPrefix 從記錄檔讀取記錄的初始部分。 |
ILog::SetAccessPolicyHint 提供有關將讀取記錄之模式的實作提示。 |
ILog::TruncatePrefix 會擲回記錄的指定前置詞,使其無法再擷取。 |
備註
WAL 是特定應用程式用來實作不可部分完成和隔離交易的技術,例如資料庫管理系統。 這項技術牽涉到在您進行這些變更之前,先將應用程式的資源變更記錄寫入記錄。 如此一來,如果需要變更即可還原,例如,如果交易失敗或中斷。 為了讓應用程式針對系統當機或電源故障等中斷提供健全的交易,記錄實作必須提供強制記錄的方法;也就是說,若要確保先前寫入的記錄位於磁碟上,再繼續進行。
寫入使用 ILog 的記錄是循序作業;也就是說,新記錄一律會附加至記錄的結尾。 附加至記錄的每個記錄都會指派記錄序號 (LSN) ,這是稍後可用來擷取記錄的數值標識碼。 數據類型 LSN 是 LARGE_INTEGER的 typedef,這是帶正負號的 64 位值;不過, ILog 只會使用 LSN 搭配非負值。 此外,LSN 必須符合下列條件:
- LSN 會以單調方式增加;如果記錄 B 在記錄 A 之後寫入記錄,則記錄 B 的 LSN 必須大於記錄 A 的 LSN。
- 零和 MAXLSN的值 (0x7FFFFFFFFFFFFFFF) 絕對不能當做記錄的 LSN 使用,因為它們對 ILog 的某些方法有特殊意義。
將記錄附加至記錄之後,可能無法修改。 不過,當不再需要先前寫入的記錄時,例如已認可的交易中變更的記錄, ILog 支援截斷記錄。 如此一來,可能會重複使用用於非必要記錄的磁碟空間。 截斷記錄包含刪除 LSN 小於指定值的所有記錄。
作為效能優化, ILog 的某些實作可能會緩衝記憶體中的記錄,直到強制記錄為止。 如果是這種情況,您就必須考慮錯誤控制和復原。 請考慮下列情況:
- 記錄 A 會附加至記錄,但不會強制記錄檔。 ILog 實作會將記錄複製到記憶體中的緩衝區,並傳回成功程序代碼。
- 記錄 B 會附加至記錄, 而 ILog 實作決定強制記錄到磁碟。 這是因為呼叫端要求強制記錄,或因為記憶體緩衝區已滿。 不過,寫入作業會失敗,例如磁碟空間不足。
ILog 檔案型實作
Windows 作業系統提供 ILog 的檔案型實作,可讓您建立適合在檔案上進行預先寫入記錄的記錄。 記錄會使用檔案作為迴圈緩衝區,讓未使用的空間可以重複使用。 這也可能會增加記錄已滿時可能需要容納其他記錄的檔案大小。 記錄檔的變更會以不可部分完成的方式進行,如此一來,當機之後,可能會復原記錄的內容。 此實作會使用記憶體中的緩衝區來附加記錄檔記錄。 因此,除非呼叫端要求強制記錄,否則 當 ILog::AppendRecord 方法傳回時,不保證記錄會寫入磁碟。使用下列 CLSID 來建立檔案型記錄的實例, (請參閱 CoCreateInstance) :
CLSID_SimpleFileBasedLog ({E16C0593-128F-11D1-97E4-00C04FB9618A} ) 。
ILog 的檔案型實作也支援 IFileBasedLogInit 和 IPersistFile 介面。 使用 IFileBasedLogInit::InitNew 建立新的記錄檔。 使用 IPersistFile::Load 開啟現有的記錄檔。
此實作會使用簡單的錯誤控制原則。 如果有任何一種方法因為文件系統層級發生錯誤而失敗,其中包含磁碟完整錯誤,記錄檔會以錯誤狀態釘選。 這可防止用戶端將其他記錄附加至檔案,或讀取可能不正確的記錄。 若要繼續使用記錄檔,您必須建立記錄檔的新實例。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | txlogpub.h |