
SQL 데이터베이스를 백업하기 위해 매일 실행하는 작업이 있습니다. 방금 새 서버를 구입하고 데이터베이스 백업을 새 서버로 전송하고 복원하려고 했습니다. 우리 데이터베이스는 대부분의 회사만큼 크지 않으며 크기도 40GB에 불과합니다. 백업을 복사하러 갔더니 하드 드라이브가 꽉 차서 저장되어 있고 백업 크기가 900GB라는 것을 알았습니다. 다른 SQL 버전에서 동일한 작업을 사용해 본 적이 있지만 데이터베이스 백업이 이렇게 커진 적은 없습니다.
- Windows Server 2008 R2 실행
- SQL Server 2008 R2 Ent 실행
- 64비트
작업에 문제가 있는 스크립트를 작성했는지 확실하지 않습니다. 이에 대한 코드는 다음과 같습니다.
디스크에 데이터베이스 [데이터베이스] 백업 = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.COMPANY\MSSQL\Backup\DATABASE.BAK' WITH NOFORMAT, NOINIT, NAME = N'DATABASE', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO @backupSetId를 int로 선언 select @backupSetId = msdb..backupset의 위치(여기서 데이터베이스_이름=N'DATABASE' 및 backup_set_id=(select max(backup_set_id) from msdb..backupset, 여기서 데이터베이스_이름=N'DATABASE') @인 경우) backupSetId가 null입니다. start raiserror(N'확인에 실패했습니다. 데이터베이스 ''DATABASE''에 대한 백업 정보를 찾을 수 없습니다.', 16, 1) end RESTORE VERIFYONLY FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.COMPANY \MSSQL\Backup\DATABASE.BAK' 파일 포함 = @backupSetId, NOUNLOAD, NOREWIND GO
(코드 태그를 추가했지만 어떤 이유로 사용되지 않았습니다)
내 데이터베이스 백업이 계속 증가하는 이유를 누군가 말해 줄 수 있습니까? 미리 도움을 주셔서 감사합니다.
답변1
NOINIT = 기존 백업 세트를 보존하면서 백업 세트가 지정된 미디어 세트에 추가됨을 나타냅니다.
백업을 추가하는 중입니다. 백업이 계속 커지는 것을 원하지 않으면 INIT를 사용해야 합니다.
답변2
백업할 때마다 끝에 추가됩니다.
답변3
DanBig과 joeqwerty가 말했듯이 백업은 동일한 파일에 추가됩니다. 추가하거나 덮어쓰지 않고 버전을 유지하려면 날짜가 지정된 개별 파일을 만드세요. 예를 들어:
Declare @DBname varchar(255),
@SQL nvarchar(max),
@today nvarchar(50),
@servername nvarchar(50)
set @today = convert(nvarchar,GETDATE(),12)
set @servername = REPLACE(@@SERVERNAME,'\','-')
set @DBName = 'YourDB'
set @SQL='BACKUP DATABASE [' + @DBName + '] TO DISK = N''c:\some backup path\' + @servername + '-' + @DBName + '-' + @today + '.bak'' WITH FORMAT, INIT, NAME = N''Full ' + @DBName + ' Database Backup'', SKIP, NOREWIND, NOUNLOAD, STATS = 10'
EXEC SP_EXECUTESQL @SQL