從 CLFS 資料流程讀取資料記錄
一般記錄檔系統中有兩種類型的記錄 (CLFS) 資料流程:資料記錄和重新開機記錄。 本主題說明如何從資料流程讀取資料記錄序列。 如需如何讀取重新開機記錄的詳細資訊,請參閱 從 CLFS 資料流程讀取重新開機記錄。
從資料流程讀取資料記錄序列有數種變化。 您可以從指定的記錄在資料流程中向前讀取,也可以沿著連結的記錄鏈結往後讀取。
如需讀取資料記錄序列的所有變化,請完成下列步驟。
呼叫 ClfsReadLogRecord 以取得序列中的讀取內容和第一筆資料記錄。
將您在步驟 1 中取得的讀取內容傳遞至 ClfsReadNextLogRecord 重複取得序列中的其餘資料記錄。
謹慎 讀取內容不是安全線程。 用戶端負責序列化讀取內容的存取權。
下列子主題討論讀取不同類型的記錄序列和鏈結的詳細資料。
從指定的資料記錄向前讀取
若要在 CLSF 資料流程中向前讀取 (從您選擇的資料記錄開始) ,您必須建立其模式設定為 ClfsCoNtextForward的讀取內容。 若要建立讀取內容,並讀取您已選擇讀取 () 集合中的第一筆記錄,請呼叫 ClfsReadLogRecord ,如下表所示。
參數名稱 | 值 |
---|---|
pvMarshalCoNtext |
提供封送處理區域的指標。 |
plsnFirst |
提供您想要讀取之第一筆記錄的 LSN。 這必須是資料記錄的 LSN,而不是重新開機記錄。 |
peCoNtextMode |
提供 ClfsCoNtextForward值。 |
ppvReadBuffer |
接收記錄資料。 |
dnsReadBuffer |
接收記錄資料的大小。 |
peRecordType |
接收記錄類型。 這個值是一組旗標,指出記錄的各種功能。 記錄是資料記錄,因此您收到的值應該已設定 ClfsDataRecord 旗標,並清除 ClfsRestartRecord 旗標。 |
plsnUndoNext |
接收資料記錄的復原下一個 LSN。 您不需要此值才能繼續讀取鏈結,因此您可以忽略它。 |
plsnPrevious |
接收先前的資料記錄 LSN。 您不需要此值才能繼續讀取鏈結,因此您可以忽略它。 |
ppvReadCoNtext |
接收不透明讀取內容的指標。 使用讀取內容來讀取後續記錄。 |
取得讀取內容和第一筆記錄之後,您可以重複呼叫 ClfsReadNextLogRecord ,在資料流程中取得後續記錄。 當資料流程中沒有其他資料記錄時, ClfsReadNextLogRecord 會傳回STATUS_END_OF_FILE。 下表顯示如何設定和解譯參數。
參數名稱 | 值 |
---|---|
pvReadCoNtext |
提供您從 ClfsReadLogRecord收到的讀取內容的指標。 |
ppvBuffer |
接收記錄資料。 |
dnsBuffer |
接收記錄資料的大小。 |
peRecordType |
提供 ClfsDataRecord的值。 |
plsnUndoNext |
接收資料記錄的復原下一個 LSN 欄位。 您不需要此值才能繼續讀取鏈結,因此您可以忽略它。 |
plsnPrevious |
接收資料記錄的上一個 LSN 欄位。 您不需要此值才能繼續讀取鏈結,因此您可以忽略它。 |
plsnRecord |
接收已讀取之資料記錄的 LSN。 |
讀取前一個 LSN 連結的資料記錄鏈結
當您將資料記錄寫入 CLFS 資料流程時,您可以將資料記錄的先前 LSN 設定為先前寫入資料流程之任何記錄的 LSN。 藉由設定先前的 LSN,您可以建立可稍後以反向順序周遊的相關記錄鏈結。 例如,假設您正在執行資料庫交易,而且您必須撰寫數個 CLFS 記錄檔記錄來描述交易所做的更新。 每次撰寫描述交易更新的記錄檔記錄時,您可以將記錄的先前 LSN 設定為先前記錄記錄的 LSN,以描述相同交易所做的更新。
假設您已撰寫由先前 LSN 連結的資料記錄鏈結。 若要讀取記錄鏈結,您必須建立其模式設定為 ClfsCoNtextPrevious 的讀取內容。 若要建立讀取內容並讀取鏈結中的第一筆記錄,請呼叫 ClfsReadLogRecord ,如下表所示。
參數名稱 | 值 |
---|---|
pvMarshalCoNtext |
提供封送處理區域的指標。 |
plsnFirst |
提供鏈結中第一筆記錄的 LSN。 這必須是資料記錄的 LSN,而不是重新開機記錄。 |
peCoNtextMode |
提供 ClfsCoNtextPrevious的值。 |
ppvReadBuffer |
接收記錄資料。 |
dnsReadBuffer |
接收記錄資料的大小。 |
peRecordType |
接收記錄類型。 這個值是一組旗標,指出記錄的各種功能。 記錄是資料記錄,因此您收到的值應該已設定 ClfsDataRecord 旗標,並清除 ClfsRestartRecord 旗標。 |
plsnUndoNext |
接收資料記錄的復原下一個 LSN。 您不需要此值才能繼續讀取鏈結,因此您可以忽略它。 |
plsnPrevious |
接收先前的資料記錄 LSN。 您不需要此值才能繼續讀取鏈結,因此您可以忽略它。 |
ppvReadCoNtext |
接收不透明讀取內容的指標。 使用讀取內容來讀取鏈結中的先前記錄。 |
讀取內容和第一筆記錄之後,您可以重複呼叫 ClfsReadNextLogRecord 來讀取鏈結中的剩餘記錄。 下表顯示如何設定和解譯參數。
參數名稱 | 值 |
---|---|
pvReadCoNtext |
提供您從 ClfsReadLogRecord收到的讀取內容的指標。 |
ppvBuffer |
接收記錄資料。 |
dnsBuffer |
接收記錄資料的大小。 |
peRecordType |
提供 ClfsDataRecord的值。 |
plsnUndoNext |
接收資料記錄的復原下一個 LSN。 您不需要此值才能繼續讀取鏈結,因此您可以忽略它。 |
plsnPrevious |
接收先前的資料記錄 LSN。 您不需要此值才能繼續讀取鏈結,因此您可以忽略它。 |
plsnRecord |
接收已讀取之資料記錄的 LSN。 |
當您對 ClfsReadNextLogRecord進行重複呼叫時,您的呼叫順序將會以下列其中一種方式結束。
最後,您將讀取一筆資料記錄,其先前的 LSN 設定為 CLFS_LSN_INVALID。 下次呼叫 ClfsReadNextLogRecord時,它會傳回STATUS_END_OF_FILE。
最後,您將讀取一筆資料記錄,其先前的 LSN 小於資料流程的基底 LSN 和資料流程的 封存結尾 。 下次呼叫 ClfsReadNextLogRecord時,它會傳回STATUS_LOG_START_OF_LOG。
讀取復原下一個 LSN 連結的資料記錄鏈結
當您將資料記錄寫入 CLFS 資料流程時,您可以將資料記錄的復原下一個 LSN 設定為您先前寫入資料流程之任何記錄的 LSN。 藉由設定復原下一個 LSN,您可以建立可反向周遊的相關記錄鏈結。 如需建立和解譯復原下一個鏈結的詳細資訊,請參閱 CLFS 記錄序號。
假設您已撰寫由其復原下一個 LSN 連結的資料記錄鏈結。 若要讀取記錄鏈結,您必須呼叫 ClfsReadLogRecord 來建立其模式設定為 ClfsCoNtextUndoNext 的讀取內容。 之後,此程式與讀取先前 LSN 連結的鏈結相同, (本主題先前所述) 。
讀取使用者 LSN 連結的資料記錄鏈結
除了由先前 LSN 連結的鏈結和復原下一個 LSN 之外,您還可以建立連結自有 LSN 的連結鏈結,以內嵌在記錄資料中。
假設您已撰寫一連串的資料記錄,這些記錄是由您儲存在記錄資料本身的 LSN 連結。 若要讀取記錄鏈結,您必須建立其模式設定為 ClfsCoNtextPrevious 或 ClfsCoNtextUndoNext的讀取內容。 建立讀取內容,並藉由呼叫 ClfsReadLogRecord來取得鏈結中最近寫入的記錄。 然後重複呼叫 ClfsReadNextLogRecord ,以取得鏈結中的先前記錄。 每次呼叫 ClfsReadNextLogRecord時,請將 plsnUser 參數設定為鏈結中上一筆記錄的 LSN。 您在 plsnUser 中提供的 LSN 會覆寫儲存在目前記錄上一個 LSN 或復原下一個 LSN 欄位中的任何值。
請注意,當您呼叫 ClfsReadNextLogRecord 來讀取記錄鏈結時,您只能在資料流程中往後移動。 您在 plsnUser 中提供的 LSN 必須小於鏈結中目前記錄的 LSN。