LogStore.CreateLogArchiveSnapshot Metod

Definition

Tar en ögonblicksbild av logglagringstillståndet som krävs för att göra en säkerhetskopia.

Överlagringar

Name Description
CreateLogArchiveSnapshot()

Tar en ögonblicksbild av logglagringstillståndet för att göra en säkerhetskopia.

CreateLogArchiveSnapshot(SequenceNumber, SequenceNumber)

Tar en ögonblicksbild av logglagringstillståndet mellan de angivna sekvensnumren för att göra en säkerhetskopia.

CreateLogArchiveSnapshot()

Tar en ögonblicksbild av logglagringstillståndet för att göra en säkerhetskopia.

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

Returer

Ett LogArchiveSnapshot objekt som innehåller det tillstånd som krävs för att skapa ett arkiv.

Undantag

Loggarkivet är inte arkiveringsbart.

Metoden anropades efter att sekvensen har tagits bort.

Ett I/O-fel uppstår när du skapar ögonblicksbilden av arkivet.

Ett argument är ogiltigt.

En ogiltig åtgärd har körts.

Det finns inte tillräckligt med minne för att fortsätta körningen av ett program.

Postsekvensen är full.

Åtkomst för det angivna loggarkivet nekas av operativsystemet.

Exempel

I följande exempel visas hur du arkiverar ett LogStore till ett XML-dokument.

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

Gäller för

CreateLogArchiveSnapshot(SequenceNumber, SequenceNumber)

Tar en ögonblicksbild av logglagringstillståndet mellan de angivna sekvensnumren för att göra en säkerhetskopia.

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

Parametrar

first
SequenceNumber

Startsekvensnumret i intervallet som ska arkiveras.

last
SequenceNumber

Slutsekvensnumret i intervallet som ska arkiveras.

Returer

Ett LogArchiveSnapshot objekt som innehåller det tillstånd som krävs för att skapa ett arkiv.

Undantag

first eller last är inte mellan bas- och sista sekvensnumren i den här sekvensen.

first är större än last.

En ogiltig åtgärd har körts.

Ett I/O-fel uppstår när du skapar ögonblicksbilden av arkivet.

Loggarkivet är inte arkiveringsbart.

Metoden anropades efter att sekvensen har tagits bort.

Det finns inte tillräckligt med minne för att fortsätta körningen av ett program.

Postsekvensen är full.

Åtkomst för det angivna loggarkivet nekas av operativsystemet.

Kommentarer

Arkivögonblicksbilden som returneras från den här metoden omfattar information från antingen bassekvensnumret eller arkivsekvensnumret, beroende på vilket som är lägre, till det sista sekvensnumret. Det är inte inkluderande för det sista sekvensnumret, vilket innebär att arkivet endast innehåller poster upp till men inte sista. När du använder den här metoden måste dessutom startsekvensnumret vara lika med BaseSequenceNumber för att arkivet ska vara konsekvent.

Gäller för