Share via


LogStore.CreateLogArchiveSnapshot 메서드

정의

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

오버로드

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 오류가 발생한 경우

인수가 잘못된 경우.

잘못된 작업을 실행한 경우

메모리가 부족하여 프로그램을 계속 실행할 수 없는 경우

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

지정된 로그 저장소에 대한 액세스가 운영 체제에서 거부된 경우

예제

다음 예제에서는 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가 이 시퀀스의 기준 시퀀스 번호와 마지막 시퀀스 번호 사이에 있지 않은 경우

firstlast보다 큰 경우

잘못된 작업을 실행한 경우

아카이브 스냅샷을 만들 때 I/O 오류가 발생한 경우

로그 저장소를 보관할 수 없는 경우

시퀀스가 삭제된 후 메서드가 호출된 경우

메모리가 부족하여 프로그램을 계속 실행할 수 없는 경우

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

지정된 로그 저장소에 대한 액세스가 운영 체제에서 거부된 경우

설명

이 메서드에서 반환된 아카이브 스냅샷은 기준 시퀀스 번호나 아카이브 시퀀스 번호 중 작은 번호부터 마지막 시퀀스 번호 사이의 정보를 포함합니다. 여기에서 마지막 시퀀스 번호는 포함되지 않습니다. 즉, 마지막 시퀀스 번호를 제외하고 그 이전 번호까지의 레코드만 아카이브에 포함됩니다. 또한 이 메서드를 사용할 때 아카이브가 일관성을 유지하려면 시작 SequenceNumber가 BaseSequenceNumber와 같아야 합니다.

적용 대상