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 方法设置新的基序列号相同,只是没有将重新开始记录写入日志中。

适用于