티스토리 뷰
-- 시나리오
전체백업 + 로그백업 ..... + 로그백업 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/
'SQL Server' 카테고리의 다른 글
SQL Server 백업 with copy_only 사용하기 3탄 (0) | 2015.08.28 |
---|---|
SQL Server 백업 with copy_only 사용하기 2탄 (0) | 2015.08.28 |
SQL Server 최초 전체백업 with copy_ony 후 로그백업은 실패다 (0) | 2015.08.28 |
SQL Server 전체백업 과 차등백업, 로그백업의 LSN 관계 (0) | 2015.08.27 |
SQL Server SSMS TIP – 세션창에서 다른 인스턴스로 바로 연결하기 (0) | 2015.08.10 |
- Total
- Today
- Yesterday