SQL Server 2008의 전체 백업은 로그 체인을 손상시키지 않습니다. 차등 base-lsn 만 재설정합니다.
사본에서만 복원 한 후 로그 백업을 복원 할 수도 있습니다. 다음 스크립트는 다음을 시연합니다.
CREATE DATABASE BakTst13;
GO
ALTER DATABASE BakTst13 SET RECOVERY FULL;
GO
USE BakTst13;
GO
CREATE TABLE dbo.tst(id INT IDENTITY(1,1));
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Full_1' WITH INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP LOG BakTst13
TO DISK = 'BakTst13_Log_1' WITH INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Full_2' WITH INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Full_C' WITH COPY_ONLY,INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP LOG BakTst13
TO DISK = 'BakTst13_Log_2' WITH INIT,FORMAT;
GO
USE tempdb;
GO
DROP DATABASE BakTst13;
GO
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Full_1' WITH NORECOVERY;
RESTORE LOG BakTst13 FROM DISK='BakTst13_Log_1' WITH NORECOVERY;
RESTORE LOG BakTst13 FROM DISK='BakTst13_Log_2' WITH RECOVERY;
GO
SELECT * FROM BakTst13.dbo.tst;
GO
DROP DATABASE BakTst13;
GO
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Full_C' WITH NORECOVERY;
RESTORE LOG BakTst13 FROM DISK='BakTst13_Log_2' WITH RECOVERY;
GO
SELECT * FROM BakTst13.dbo.tst;
GO
DROP DATABASE BakTst13;
데이터베이스와 테이블을 작성하고 해당 테이블에 50 개의 행을 삽입합니다. 이러한 인서트 사이에서 다음과 같은 순서로 여러 백업이 수행됩니다.
- 완전한
- 로그
- 완전한
- 전체 사본 _ 만
- 로그
다음으로 데이터베이스가 삭제되고 다음과 같이 복원됩니다.
- 첫 번째 전체
- 첫번째 로그
- 두 번째 로그
다음 SELECT
은 복원이 성공했음을 보여줍니다.
이는 COP_ONLY
전체 백업 또는 일반 전체 백업이 로그 체인을 중단 하지 않음을 나타냅니다 .
그런 다음 데이터베이스가 다시 삭제되고 다음과 같이 복원됩니다.
- Copy_Only Full
- 두 번째 로그
그 후 SELECT
다시 성공을 보여줍니다.
이는 COPY_ONLY
전체 백업을 로그 복원의 기본으로 사용할 수 있음을 보여줍니다 .
차동 테스트
나는 또한 DIFFERENTIAL
버전을 만들었다 :
CREATE DATABASE BakTst13;
GO
ALTER DATABASE BakTst13 SET RECOVERY FULL;
GO
USE BakTst13;
GO
CREATE TABLE dbo.tst(id INT IDENTITY(1,1));
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Full_1' WITH INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Diff_1' WITH DIFFERENTIAL,INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Full_2' WITH INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Diff_2' WITH DIFFERENTIAL,INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Full_C' WITH COPY_ONLY,INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Diff_3' WITH DIFFERENTIAL,INIT,FORMAT;
GO
USE tempdb;
GO
DROP DATABASE BakTst13;
GO
RAISERROR('------> Starting restore F1, D1, D2',0,1)WITH NOWAIT;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Full_1' WITH NORECOVERY;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Diff_1' WITH NORECOVERY;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Diff_2' WITH NORECOVERY;--<--Fails!
GO
DROP DATABASE BakTst13;
GO
RAISERROR('------> Starting restore FC, D3',0,1)WITH NOWAIT;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Full_C' WITH NORECOVERY;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Diff_3' WITH NORECOVERY;--<--Fails!
GO
DROP DATABASE BakTst13;
GO
RAISERROR('------> Starting restore F2, D2, D3',0,1)WITH NOWAIT;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Full_2' WITH NORECOVERY;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Diff_2' WITH NORECOVERY;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Diff_3' WITH RECOVERY;
GO
SELECT * FROM BakTst13.dbo.tst;
GO
DROP DATABASE BakTst13;
백업은 다음 순서로 수행됩니다.
- 첫 번째 전체
- 1 차 미분
- 두 번째 전체
- 2 차 미분
- Copy_Only Diff
- 3 차 미분
그런 다음이 복원 경로를 시도합니다.
- 첫 번째 전체
- 1 차 미분
- 2 차 미분
이 오류로 3 단계가 실패합니다.
Msg 3136, Level 16, State 1, Line 4
This differential backup cannot be restored because the database has not been restored to the correct earlier state.
이는 정상적인 전체 백업이 차등 체인을 중단 함을 나타냅니다.
다음으로 데이터베이스가 삭제되고이 복원 플로우가 시도됩니다.
- Copy_Only Full
- 3 차 미분
2 단계는 위의 3 단계와 동일한 오류로 실패합니다. 이는 사본 전용 백업을 차등 복원의 기본으로 사용할 수 없음을 나타냅니다.
그런 다음 데이터베이스가 다시 삭제되고 다음 복원이 실행됩니다.
- 두 번째 전체
- 2 차 미분
- 3 차 미분
다음 선택은이 복원이 성공했음을 나타냅니다. 이는 COPY_ONLY
전체 백업이 차등 체인을 방해하지 않음을 나타냅니다 .