LogRecordSequence.AdvanceBaseSequenceNumber(SequenceNumber) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Rückt die Basissequenznummer des Protokolls vor. Diese Methode kann nicht vererbt werden.
public:
virtual void AdvanceBaseSequenceNumber(System::IO::Log::SequenceNumber newBaseSequenceNumber);
public void AdvanceBaseSequenceNumber (System.IO.Log.SequenceNumber newBaseSequenceNumber);
abstract member AdvanceBaseSequenceNumber : System.IO.Log.SequenceNumber -> unit
override this.AdvanceBaseSequenceNumber : System.IO.Log.SequenceNumber -> unit
Public Sub AdvanceBaseSequenceNumber (newBaseSequenceNumber As SequenceNumber)
Parameter
- newBaseSequenceNumber
- SequenceNumber
Gibt die neue Basis-SequenceNumber für das Protokoll an. Diese muss im Bereich zwischen der aktuellen Basissequenznummer und der letzten Sequenznummer des Protokolls liegen.
Implementiert
Ausnahmen
newBaseSequenceNumber
ist für diese Sequenz nicht gültig.
Ein neues oder vorhandenes Archivende oder eine Basis des aktiven Protokolls ist ungültig.
- oder -
newBaseSequenceNumber
befindet sich nicht zwischen der Basissequenznummer und der letzten Sequenznummer dieser Sequenz.
Die Anforderung konnte aufgrund einer unerwarteten E/A-Ausnahme nicht ausgeführt werden.
- oder -
Die Anforderung konnte aufgrund eines E/A-Gerätefehlers nicht ausgeführt werden.
Das angegebene Protokoll verfügt nicht über Wertebereiche. Ein oder mehrere Wertebereiche müssen erstellt werden, bevor eine Datensatzsequenz verwendet werden kann.
Die Methode wurde aufgerufen, nachdem die Sequenz verworfen wurde.
Der Arbeitsspeicher reicht nicht aus, um die Ausführung des Programms fortzusetzen.
Der Zugriff auf die angegebene Protokollsequenz wird vom Betriebssystem verweigert.
Die Datensatzsequenz ist voll.
Beispiele
Dieses Beispiel veranschaulicht die Verwendung der AdvanceBaseSequenceNumber-Methode mit dem TailPinned-Ereignis, um Speicherplatz in einer Protokollsequenz freizugeben.
recordSequence.RetryAppend = true;
recordSequence.TailPinned += new EventHandler<TailPinnedEventArgs>(HandleTailPinned);
void HandleTailPinned(object sender, TailPinnedEventArgs tailPinnedEventArgs)
{
// tailPinnedEventArgs.TargetSequenceNumber is the target
// sequence number to free up space to.
// However, this sequence number is not necessarily valid. We have
// to use this sequence number as a starting point for finding a
// valid point within the log to advance toward. You need to
// identify a record with a sequence number equal to, or greater
// than TargetSequenceNumber; let's call this
// realTargetSequenceNumber. Once found, move the base
recordSequence.AdvanceBaseSequenceNumber(realTargetSequenceNumber);
}
Hinweise
Diese Methode wird oft mit dem TailPinned-Ereignis verwendet, um Speicherplatz in einem Datensatz freizugeben. Das TailPinned-Ereignis gibt an, dass das Ende der Sequenz (die Basissequenznummer) nach vorne verschoben werden muss, um Speicherplatz freizugeben. Speicherplatz kann freigegeben werden, indem Neustartbereiche mit der WriteRestartArea-Methode geschrieben werden oder indem das Protokoll abgeschnitten wird und die Basissequenznummer eines Protokolls mit der AdvanceBaseSequenceNumber-Methode in die durch den newBaseSequenceNumber
-Parameter angegebene Nummer geändert wird. Im Codebeispiel im Abschnitt mit dem Beispiel wird der zweite Ansatz veranschaulicht.
Beachten Sie, dass das Aufrufen dieser Methode dem Festlegen einer neuen Basissequenznummer mit der WriteRestartArea-Methode entspricht. Die einzige Ausnahme besteht darin, dass kein Neustartdatensatz in das Protokoll geschrieben wird.