LogRecordSequence.AdvanceBaseSequenceNumber(SequenceNumber) メソッド

定義

ログの基本シーケンス番号を前方に移動します。 このメソッドは継承できません。

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)

パラメーター

newBaseSequenceNumber
SequenceNumber

ログの新しい基本 SequenceNumber を指定します。 これは、現在の基本シーケンス番号とログの最後のシーケンス番号の間の範囲に含まれている必要があります。

実装

例外

newBaseSequenceNumber は、このシーケンスでは無効です。

アクティブ ログの新規または既存のアーカイブ末尾またはベースが無効です。

-又は-

newBaseSequenceNumber は、このシーケンスの基本シーケンス番号と最後のシーケンス番号の間にありません。

予期しない I/O 例外のため、要求を実行できませんでした。

-又は-

I/O デバイス エラーのため、要求を実行できませんでした。

指定されたログにはエクステントがありません。 レコード・シーケンスを使用するには、1 つ以上のエクステントを作成する必要があります。

シーケンスが破棄された後、メソッドが呼び出されました。

プログラムの実行を続行するのに十分なメモリがありません。

指定したログ シーケンスへのアクセスは、オペレーティング システムによって拒否されます。

レコード シーケンスがいっぱいです。

この例では、AdvanceBaseSequenceNumber イベントで TailPinned メソッドを使用して、ログ シーケンス内の領域を解放する方法を示します。

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);

}

注釈

このメソッドは、レコード内の領域を解放するために、 TailPinned イベントでよく使用されます。 TailPinned イベントは、シーケンスの末尾 (つまり、基本シーケンス番号) を前方に移動して領域を解放する必要があることを示します。 領域の解放は、 WriteRestartArea メソッドを使用して再起動領域を書き込むか、ログを切り捨て、 AdvanceBaseSequenceNumber メソッドを使用して、 newBaseSequenceNumber パラメーターで指定されたログの基本シーケンス番号に進めます。 「例」セクションのコード サンプルでは、2 つ目の方法を示します。

このメソッドの呼び出しは、再起動レコードがログに書き込まれないことを除き、 WriteRestartArea メソッドを使用して新しい基本シーケンス番号を設定する場合と同じであることに注意してください。

適用対象