LogStore.CreateLogArchiveSnapshot 메서드

정의

백업을 만드는 데 필요한 로그 저장소 상태의 스냅샷을 만듭니다.

오버로드

Name 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 오류가 발생합니다.

인수가 잘못되었습니다.

잘못된 작업이 실행되었습니다.

프로그램 실행을 계속할 메모리가 부족합니다.

레코드 시퀀스가 가득 찼습니다.

지정된 로그 저장소에 대한 액세스는 운영 체제에서 거부됩니다.

예제

다음 예제에서는 XML 문서에 보관 LogStore 하는 방법을 보여줍니다.

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 오류가 발생합니다.

로그 저장소는 보관할 수 없습니다.

시퀀스가 삭제된 후 메서드가 호출되었습니다.

프로그램 실행을 계속할 메모리가 부족합니다.

레코드 시퀀스가 가득 찼습니다.

지정된 로그 저장소에 대한 액세스는 운영 체제에서 거부됩니다.

설명

이 메서드에서 반환된 보관 스냅샷은 기본 시퀀스 번호 또는 보관 시퀀스 번호 중 더 낮은 값에서 마지막 시퀀스 번호까지의 정보를 포함합니다. 마지막 시퀀스 번호에는 포함되지 않습니다. 즉, 보관에 최대 레코드만 포함하지만 마지막은 포함하지 않습니다. 또한 이 메서드를 사용하는 경우 보관이 일관되려면 Start SequenceNumber가 BaseSequenceNumber와 같아야 합니다.

적용 대상