語言

LogStore.CreateLogArchiveSnapshot 方法

定義

會擷取備份所需的日誌儲存狀態快照。

多載

名稱 Description
CreateLogArchiveSnapshot()

會擷取日誌儲存狀態的快照以便備份。

CreateLogArchiveSnapshot(SequenceNumber, SequenceNumber)

會對指定序號之間的日誌儲存狀態進行快照,以便備份。

CreateLogArchiveSnapshot()

會擷取日誌儲存狀態的快照以便備份。

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 錯誤。

引數無效。

執行了一個無效的操作。

記憶體不足以繼續執行程式。

紀錄序列已滿。

作業系統會拒絕存取指定的日誌儲存。

範例

以下範例展示了如何將 a 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)

會對指定序號之間的日誌儲存狀態進行快照,以便備份。

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 包含建立檔案所需狀態的物件。

例外狀況

first 或 last 不位於該序列的基數與末一序列號之間。

first 大於 last。

執行了一個無效的操作。

建立歸檔快照時會發生 I/O 錯誤。

日誌儲存無法歸檔。

該方法是在序列被處理後才被呼叫的。

記憶體不足以繼續執行程式。

紀錄序列已滿。

作業系統會拒絕存取指定的日誌儲存。

備註

此方法回傳的壓縮快照包含從基礎序號或歸檔序號(以較低者為準)至最後一個序號的資訊。 它不包含最後一個序號,這表示檔案只包含到最後一個但不包含的紀錄。 此外,使用此方法時,起始序號必須等於基礎序號,才能使歸檔保持一致。

適用於