본 게시물은 개인적인 의견으로 작성되었으니 절대적인 정보가 아닐 수 있습니다. 참고만 하시고 궁금한 사항이 있으시면 연락주세요.

티스토리 뷰

SQL Server - CATEGORY

SQL Server 백업 with copy_only 사용하기 1탄

AWS-in 2015. 8. 28. 14:34

-- 시나리오

전체백업 + 로그백업 ..... + 로그백업 with copy_only

백업파일이 존재한다.

여기서 복원시

전체백업 + 로그백업 with copy_only 하면 전체복원이 되는가?

결론 : 실패 왜? [로그백업 with copy_only] 이전의 로그백업이 존재하기에 이전 로그백업을 모두 복원 후

최종으로 [로그백업 with copy_only] 을 복원하면 가능하다.

use master

GO

 

IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'BACKUPTEST')

    DROP DATABASE BACKUPTEST

GO

 

CREATE DATABASE BACKUPTEST

GO

 

USE BACKUPTEST

GO

 

--drop table TBL

IF OBJECT_ID('dbo.TBL') IS NOT NULL

    drop table TBL

GO

 

CREATE TABLE TBL(COL1 VARCHAR(50))

GO

 

INSERT INTO TBL VALUES('백업전')

BACKUP DATABASE BACKUPTEST TO DISK='E:\LAB\D___FUL1.BAK'

INSERT INTO TBL VALUES('로그백업전1')

BACKUP LOG BACKUPTEST TO DISK='E:\LAB\D___TRN1.TRN'

INSERT INTO TBL VALUES('로그백업전2')

BACKUP LOG BACKUPTEST TO DISK='E:\LAB\D___TRN2.TRN'

INSERT INTO TBL VALUES('로그백업전3')

BACKUP LOG BACKUPTEST TO DISK='E:\LAB\D___TRN3.TRN'

INSERT INTO TBL VALUES('로그백업카피전1')

BACKUP LOG BACKUPTEST TO DISK='E:\LAB\D__COPY_TRN1.TRN' with copy_only

 

select * from tbl

 

-- 복원해보자

use master

go

 

IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'BACKUPTEST_BAK')

    DROP DATABASE BACKUPTEST_BAK

GO

 

 

RESTORE DATABASE BACKUPTEST_BAK FROM DISK = N'E:\LAB\D___FUL1.BAK' WITH FILE = 1,

MOVE N'BACKUPTEST' TO N'E:\SQLDATA\BACKUPTEST_BAK.mdf',

MOVE N'BACKUPTEST_log' TO N'E:\SQLDATA\BACKUPTEST_BAK_log.ldf', NOUNLOAD, STATS = 5

, NORECOVERY

 

GO

RESTORE LOG [BACKUPTEST_BAK] FROM DISK = N'E:\LAB\D__COPY_TRN1.TRN' WITH FILE = 1, NOUNLOAD, STATS = 10 , RECOVERY

 

메시지 4305, 수준 16, 상태 1, 줄 56

이 백업 세트의 로그는 LSN 38000000032000001에 시작하므로 데이터베이스에 적용하기에는 너무 이른 로그입니다. LSN 38000000025600001을() 포함하는 더 이전의 로그 백업이 복원될 수 있습니다.

메시지 3013, 수준 16, 상태 1, 줄 56

RESTORE LOG이() 비정상적으로 종료됩니다.

 

해결.

RESTORE LOG [BACKUPTEST_BAK] FROM DISK = N'E:\LAB\D___TRN1.TRN' WITH FILE = 1, NOUNLOAD, STATS = 10 , NORECOVERY

RESTORE LOG [BACKUPTEST_BAK] FROM DISK = N'E:\LAB\D___TRN2.TRN' WITH FILE = 1, NOUNLOAD, STATS = 10 , NORECOVERY

RESTORE LOG [BACKUPTEST_BAK] FROM DISK = N'E:\LAB\D___TRN3.TRN' WITH FILE = 1, NOUNLOAD, STATS = 10 , NORECOVERY

RESTORE LOG [BACKUPTEST_BAK] FROM DISK = N'E:\LAB\D__COPY_TRN1.TRN' WITH FILE = 1, NOUNLOAD, STATS = 10 , RECOVERY

 

use BACKUPTEST_BAK

go

select * from tbl -- 모두 복원이 되었다.

/*

백업전

로그백업전1

로그백업전2

로그백업전3

로그백업카피전1

*/

 

-- LSN (Log Sequence Number) 확인

restore headeronly from DISK='E:\LAB\D___FUL1.BAK'

restore headeronly from DISK='E:\LAB\D___TRN1.TRN'

restore headeronly from DISK='E:\LAB\D___TRN2.TRN'

restore headeronly from DISK='E:\LAB\D___TRN3.TRN'

restore headeronly from DISK='E:\LAB\D__COPY_TRN1.TRN'

 

[참고문서]

COPY_ONLY Backups with SQL Server

https://www.mssqltips.com/sqlservertip/1075/copyonly-backups-with-sql-server/

댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
Total
Today
Yesterday