Udostępnij za pośrednictwem


LogStore.CreateLogArchiveSnapshot Metoda

Definicja

Tworzy migawkę stanu magazynu dzienników niezbędną do utworzenia kopii zapasowej.

Przeciążenia

CreateLogArchiveSnapshot()

Tworzy migawkę stanu magazynu dzienników na potrzeby tworzenia kopii zapasowej.

CreateLogArchiveSnapshot(SequenceNumber, SequenceNumber)

Tworzy migawkę stanu magazynu dzienników między określonymi numerami sekwencji na potrzeby tworzenia kopii zapasowej.

CreateLogArchiveSnapshot()

Tworzy migawkę stanu magazynu dzienników na potrzeby tworzenia kopii zapasowej.

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

Zwraca

LogArchiveSnapshot Obiekt zawierający stan niezbędny do utworzenia archiwum.

Wyjątki

Magazyn dzienników nie jest archiwizowany.

Metoda została wywołana po usunięciu sekwencji.

Podczas tworzenia migawki archiwum występuje błąd we/wy.

Argument jest nieprawidłowy.

Wykonano nieprawidłową operację.

Za mało pamięci, aby kontynuować wykonywanie programu.

Sekwencja rekordów jest pełna.

Dostęp do określonego magazynu dzienników jest odrzucany przez system operacyjny.

Przykłady

W poniższym przykładzie pokazano, jak zarchiwizować LogStore dokument 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

Dotyczy

CreateLogArchiveSnapshot(SequenceNumber, SequenceNumber)

Tworzy migawkę stanu magazynu dzienników między określonymi numerami sekwencji na potrzeby tworzenia kopii zapasowej.

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

Parametry

first
SequenceNumber

Numer sekwencji początkowej w zakresie do archiwizacji.

last
SequenceNumber

Końcowy numer sekwencji w zakresie do archiwizacji.

Zwraca

LogArchiveSnapshot Obiekt zawierający stan niezbędny do utworzenia archiwum.

Wyjątki

first lub last nie znajduje się między numerami podstawowymi i ostatnimi sekwencjami tej sekwencji.

first jest większy niż last.

Wykonano nieprawidłową operację.

Podczas tworzenia migawki archiwum występuje błąd we/wy.

Magazyn dzienników nie jest archiwizowany.

Metoda została wywołana po usunięciu sekwencji.

Za mało pamięci, aby kontynuować wykonywanie programu.

Sekwencja rekordów jest pełna.

Dostęp do określonego magazynu dzienników jest odrzucany przez system operacyjny.

Uwagi

Migawka archiwum zwrócona z tej metody obejmuje informacje z numeru sekwencji podstawowej lub numeru sekwencji archiwum, w zależności od tego, co jest niższe, do ostatniego numeru sekwencji. Nie jest włącznie dla ostatniego numeru sekwencji, co oznacza, że archiwum zawiera tylko rekordy do, ale nie obejmuje ostatniego. Ponadto w przypadku korzystania z tej metody uruchomienie SequenceNumber musi być równe wartości BaseSequenceNumber, aby archiwum było spójne.

Dotyczy