CLFS 스트림에서 데이터 레코드 읽기

CLFS(Common Log File System) 스트림에는 데이터 레코드 및 다시 시작 레코드라는 두 가지 유형의 레코드가 있습니다. 이 항목에서는 스트림에서 데이터 레코드 시퀀스를 읽는 방법을 설명합니다. 다시 시작 레코드를 읽는 방법에 대한 자세한 내용은 CLFS 스트림에서 다시 시작 레코드 읽기를 참조하세요.

스트림에서 데이터 레코드 시퀀스를 읽는 데는 몇 가지 변형이 있습니다. 지정된 레코드에서 스트림에서 앞으로 읽거나 연결된 레코드 체인을 따라 뒤로 읽을 수 있습니다.

데이터 레코드 시퀀스를 읽는 모든 변형에 대해 다음 단계를 완료합니다.

  1. ClfsReadLogRecord를 호출하여 시퀀스에서 읽기 컨텍스트 및 첫 번째 데이터 레코드를 가져옵니다.

  2. 1단계에서 얻은 읽기 컨텍스트를 ClfsReadNextLogRecord 에 반복적으로 전달하여 시퀀스의 나머지 데이터 레코드를 가져옵니다.

주의 읽기 컨텍스트는 스레드로부터 안전하지 않습니다. 클라이언트는 읽기 컨텍스트에 대한 액세스를 직렬화해야 합니다.

다음 하위 항목에서는 다양한 유형의 레코드 시퀀스 및 체인을 읽는 세부 정보를 설명합니다.

지정된 데이터 레코드에서 전달 읽기

CLSF 스트림에서 앞으로 읽으려면(선택한 데이터 레코드부터 시작) 해당 모드가 ClfsContextForward로 설정된 읽기 컨텍스트를 만들어야 합니다. 읽기 컨텍스트를 만들고 첫 번째 레코드(읽도록 선택한 집합)를 읽으려면 다음 표와 같이 ClfsReadLogRecord 를 호출합니다.

매개 변수 이름

pvMarshalContext

마샬링 영역에 대한 포인터를 입력합니다.

plsnFirst

읽으려는 첫 번째 레코드의 LSN을 제공합니다. 다시 시작 레코드가 아니라 데이터 레코드의 LSN이어야 합니다.

peContextMode

ClfsContextForward 값을 제공합니다.

ppvReadBuffer

레코드 데이터를 받습니다.

pcbReadBuffer

레코드 데이터의 크기를 받습니다.

peRecordType

레코드 형식을 받습니다. 이 값은 레코드의 다양한 기능을 나타내는 플래그 집합입니다. 레코드는 데이터 레코드이므로 받는 값에는 ClfsDataRecord 플래그가 설정되고 ClfsRestartRecord 플래그가 지워져야 합니다.

plsnUndoNext

데이터 레코드의 실행 취소 후 LSN을 받습니다. 체인을 계속 읽으려면 이 값이 필요하지 않으므로 무시해도 됩니다.

plsnPrevious

데이터 레코드의 이전 LSN을 받습니다. 체인을 계속 읽으려면 이 값이 필요하지 않으므로 무시해도 됩니다.

ppvReadContext

불투명 읽기 컨텍스트에 대한 포인터를 받습니다. 읽기 컨텍스트를 사용하여 후속 레코드를 읽습니다.

읽기 컨텍스트와 첫 번째 레코드를 가져온 후에 는 ClfsReadNextLogRecord 를 반복적으로 호출하여 스트림에서 후속 레코드를 가져올 수 있습니다. 스트림에 데이터 레코드가 더 이상 없으면 ClfsReadNextLogRecord 는 STATUS_END_OF_FILE 반환합니다. 다음 표에서는 매개 변수를 설정하고 해석하는 방법을 보여줍니다.

매개 변수 이름

pvReadContext

ClfsReadLogRecord에서 받은 읽기 컨텍스트에 대한 포인터를 제공합니다.

ppvBuffer

레코드 데이터를 받습니다.

pcbBuffer

레코드 데이터의 크기를 받습니다.

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

레코드 데이터를 받습니다.

pcbReadBuffer

레코드 데이터의 크기를 받습니다.

peRecordType

레코드 형식을 받습니다. 이 값은 레코드의 다양한 기능을 나타내는 플래그 집합입니다. 레코드는 데이터 레코드이므로 받는 값에는 ClfsDataRecord 플래그가 설정되고 ClfsRestartRecord 플래그가 지워져야 합니다.

plsnUndoNext

데이터 레코드의 실행 취소 후 LSN을 받습니다. 체인을 계속 읽으려면 이 값이 필요하지 않으므로 무시해도 됩니다.

plsnPrevious

데이터 레코드의 이전 LSN을 받습니다. 체인을 계속 읽으려면 이 값이 필요하지 않으므로 무시해도 됩니다.

ppvReadContext

불투명 읽기 컨텍스트에 대한 포인터를 받습니다. 읽기 컨텍스트를 사용하여 체인의 이전 레코드를 읽습니다.

읽기 컨텍스트와 첫 번째 레코드가 있으면 ClfsReadNextLogRecord 를 반복적으로 호출하여 체인의 나머지 레코드를 읽을 수 있습니다. 다음 표에서는 매개 변수를 설정하고 해석하는 방법을 보여줍니다.

매개 변수 이름

pvReadContext

ClfsReadLogRecord에서 받은 읽기 컨텍스트에 대한 포인터를 제공합니다.

ppvBuffer

레코드 데이터를 받습니다.

pcbBuffer

레코드 데이터의 크기를 받습니다.

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보다 작아야 합니다.