LogStore.CreateLogArchiveSnapshot 方法

定義

取得製作備份所需的記錄存放區狀態快照 (Snapshot)。

多載

CreateLogArchiveSnapshot()

取得記錄存放區狀態的快照 (Snapshot),以便製作備份。

CreateLogArchiveSnapshot(SequenceNumber, SequenceNumber)

取得介於指定之序號間的記錄存放區狀態快照 (Snapshot),以便製作備份。

CreateLogArchiveSnapshot()

取得記錄存放區狀態的快照 (Snapshot),以便製作備份。

public:
 System::IO::Log::LogArchiveSnapshot ^ CreateLogArchiveSnapshot();
public System.IO.Log.LogArchiveSnapshot CreateLogArchiveSnapshot ();
member this.CreateLogArchiveSnapshot : unit -> System.IO.Log.LogArchiveSnapshot
Public Function CreateLogArchiveSnapshot () As LogArchiveSnapshot

傳回

LogArchiveSnapshot 物件,其中包含製作封存檔所需的狀態。

例外狀況

無法封存記錄存放區。

已在處置序列之後呼叫此方法。

建立封存快照時發生 I/O 錯誤。

引數無效。

已經執行無效的作業。

沒有足夠的記憶體可以繼續執行程式。

記錄順序已滿。

存取指定的記錄存放區遭作業系統拒絕。

範例

下列範例示範如何將 LogStore 封存至 XML 文件。

class LogBackup
{
    static void ArchiveToXML(LogStore logStore, string fileName)
    {
        LogArchiveSnapshot snapshot = logStore.CreateLogArchiveSnapshot();

        XmlTextWriter writer = new XmlTextWriter(fileName, Encoding.ASCII);

        writer.WriteStartElement("logArchive");
        foreach(FileRegion region in snapshot.ArchiveRegions)
        {
            writer.WriteStartElement("fileRegion");
            writer.WriteElementString("path", region.Path);
            writer.WriteElementString("length", region.FileLength.ToString());
            writer.WriteElementString("offset", region.Offset.ToString());
            using(Stream dataStream = region.GetStream())
            {
                byte[] data = new byte[dataStream.Length];
                dataStream.Read(data, 0, data.Length);
                writer.WriteElementString("data", Convert.ToBase64String(data));
            }
            writer.WriteEndElement();
        }
        writer.WriteEndElement();
        writer.Close();
        logStore.SetArchiveTail(snapshot.LastSequenceNumber);
    }
    static void RestoreFromXML(string fileName)
    {
        using(XmlTextReader reader = new XmlTextReader(fileName))
        {
            reader.ReadStartElement("logArchive");
            while(reader.IsStartElement())
            {
                string path = reader.ReadElementString("path");
                long length = Int64.Parse(reader.ReadElementString("length"));
                long offset = Int64.Parse(reader.ReadElementString("offset"));
                string dataString = reader.ReadElementString("data");
                byte[] data = Convert.FromBase64String(dataString);
                FileStream fileStream;
                using(fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
                {
                    fileStream.SetLength(length);
                    fileStream.Position = offset; fileStream.Write(data, 0, data.Length);
                }
            }
        reader.ReadEndElement();
        }
    }
}
Friend Class LogBackup
    Private Shared Sub ArchiveToXML(ByVal logStore As LogStore, ByVal fileName As String)
        Dim snapshot As LogArchiveSnapshot = logStore.CreateLogArchiveSnapshot()

        Dim writer As New XmlTextWriter(fileName, Encoding.ASCII)

        writer.WriteStartElement("logArchive")
        For Each region As FileRegion In snapshot.ArchiveRegions
            writer.WriteStartElement("fileRegion")
            writer.WriteElementString("path", region.Path)
            writer.WriteElementString("length", region.FileLength.ToString())
            writer.WriteElementString("offset", region.Offset.ToString())
            Using dataStream As Stream = region.GetStream()
                Dim data(dataStream.Length - 1) As Byte
                dataStream.Read(data, 0, data.Length)
                writer.WriteElementString("data", Convert.ToBase64String(data))
            End Using
            writer.WriteEndElement()
        Next region
        writer.WriteEndElement()
        writer.Close()
        logStore.SetArchiveTail(snapshot.LastSequenceNumber)

    End Sub
    Private Shared Sub RestoreFromXML(ByVal fileName As String)
        Using reader As New XmlTextReader(fileName)
            reader.ReadStartElement("logArchive")
            Do While reader.IsStartElement()
                Dim path = reader.ReadElementString("path")
                Dim length = Int64.Parse(reader.ReadElementString("length"))
                Dim offset = Int64.Parse(reader.ReadElementString("offset"))
                Dim dataString = reader.ReadElementString("data")
                Dim data() = Convert.FromBase64String(dataString)
                Dim fileStream As FileStream
                fileStream = New FileStream(path, FileMode.OpenOrCreate, FileAccess.Write)
                Using fileStream
                    fileStream.SetLength(length)
                    fileStream.Position = offset
                    fileStream.Write(data, 0, data.Length)
                End Using
            Loop
            reader.ReadEndElement()
        End Using
    End Sub
End Class

適用於

CreateLogArchiveSnapshot(SequenceNumber, SequenceNumber)

取得介於指定之序號間的記錄存放區狀態快照 (Snapshot),以便製作備份。

public:
 System::IO::Log::LogArchiveSnapshot ^ CreateLogArchiveSnapshot(System::IO::Log::SequenceNumber first, System::IO::Log::SequenceNumber last);
public System.IO.Log.LogArchiveSnapshot CreateLogArchiveSnapshot (System.IO.Log.SequenceNumber first, System.IO.Log.SequenceNumber last);
member this.CreateLogArchiveSnapshot : System.IO.Log.SequenceNumber * System.IO.Log.SequenceNumber -> System.IO.Log.LogArchiveSnapshot
Public Function CreateLogArchiveSnapshot (first As SequenceNumber, last As SequenceNumber) As LogArchiveSnapshot

參數

first
SequenceNumber

要封存之範圍的起始序號。

last
SequenceNumber

要封存之範圍的結束序號。

傳回

LogArchiveSnapshot 物件,其中包含製作封存檔所需的狀態。

例外狀況

firstlast 不是介於這個順序的基底序號和最後一個序號之間。

first 大於 last

已經執行無效的作業。

建立封存快照時發生 I/O 錯誤。

無法封存記錄存放區。

已在處置序列之後呼叫此方法。

沒有足夠的記憶體可以繼續執行程式。

記錄順序已滿。

存取指定的記錄存放區遭作業系統拒絕。

備註

這個方法所傳回的封存快照 (Snapshot) 包含由基底序號或封存序號 (較小者) 到最後一個序號的資訊, 其中不含最後一個序號,代表封存檔只包含直到最後一個之前的所有記錄。 此外,使用這個方法時,起始的 SequenceNumber 必須等於 BaseSequenceNumber,才能讓這個封存保持一致。

適用於