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 设备错误,无法执行请求。

指定的日志没有任何区。 必须先创建一个或多个盘区,然后才能使用记录序列。

在释放序列后调用了该方法。

没有足够的内存继续执行程序。

操作系统拒绝对指定日志序列的访问。

记录序列已满。

示例

此示例演示如何将 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 日志,从而释放空间。 示例部分中的代码示例演示了第二种方法。

请注意,调用此方法与使用 WriteRestartArea 该方法设置新的基序列号相同,只不过不会将重启记录写入日志。

适用于