共用方式為


從 CLFS 資料流程讀取資料記錄

一般記錄檔系統中有兩種類型的記錄 (CLFS) 資料流程:資料記錄和重新開機記錄。 本主題說明如何從資料流程讀取資料記錄序列。 如需如何讀取重新開機記錄的詳細資訊,請參閱 從 CLFS 資料流程讀取重新開機記錄

從資料流程讀取資料記錄序列有數種變化。 您可以從指定的記錄在資料流程中向前讀取,也可以沿著連結的記錄鏈結往後讀取。

如需讀取資料記錄序列的所有變化,請完成下列步驟。

  1. 呼叫 ClfsReadLogRecord 以取得序列中的讀取內容和第一筆資料記錄。

  2. 將您在步驟 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 連結。 若要讀取記錄鏈結,您必須建立其模式設定為 ClfsCoNtextPreviousClfsCoNtextUndoNext的讀取內容。 建立讀取內容,並藉由呼叫 ClfsReadLogRecord來取得鏈結中最近寫入的記錄。 然後重複呼叫 ClfsReadNextLogRecord ,以取得鏈結中的先前記錄。 每次呼叫 ClfsReadNextLogRecord時,請將 plsnUser 參數設定為鏈結中上一筆記錄的 LSN。 您在 plsnUser 中提供的 LSN 會覆寫儲存在目前記錄上一個 LSN 或復原下一個 LSN 欄位中的任何值。

請注意,當您呼叫 ClfsReadNextLogRecord 來讀取記錄鏈結時,您只能在資料流程中往後移動。 您在 plsnUser 中提供的 LSN 必須小於鏈結中目前記錄的 LSN。