SQL Server 2005는 백업에서 가장 최근 파일 위치로 복원합니다.

SQL Server 2005는 백업에서 가장 최근 파일 위치로 복원합니다.

디스크에서 가장 최근 백업으로 데이터베이스를 복원하려고 합니다. 백업에는 4개의 백업 세트가 있습니다. 가장 최근 사진(오늘 촬영)을 복원하고 싶습니다. TSQL로 할 수 있어야 합니다.

아래 스크립트는 작동합니다.

RESTORE DATABASE DatabaseName 
FROM DISK = 'D:\Data\DatabaseName.bak' WITH FILE = 4, REPLACE

그러나 앞으로 더 많은 백업이 이루어지면 파일 위치가 변경됩니다.

정확한 파일 번호를 지정하지 않고 백업을 파일 위치로 복원하는 방법이 있습니까? "WITH FILE = Most_recent_backup"과 같은 것입니다.

답변1

RESTORE HEADERONLY명령은 파일의 모든 백업 세트에 대한 데이터 목록을 제공합니다. 거기에서 최대값을 선택 Position하고 이를 FILE매개변수에 전달할 수 있습니다.

http://msdn.microsoft.com/en-us/library/ms178536.aspx

답변2

모든 백업을 단일 파일에 저장하지 마십시오. 그렇게 해서 해당 파일이 손상되면 모든 백업이 손실된 것입니다.

대신 BACKUP DATABASE 및 RESTORE DATABASE 명령을 사용할 때 동적 파일 이름을 사용하여 각 백업을 자체 파일에 넣으십시오.

답변3

Matt의 대답은 나를 올바른 방향으로 이끌었습니다. 최대 위치를 선택하기 전에 결과 세트를 저장해야 했습니다. 검색을 통해 이 솔루션을 찾았습니다.http://sqlforums.windowsitpro.com/web/forum/messageview.aspx?catid=74&threadid=93926&enterthread=y

set nocount on

Create Table #header (
BackupName nvarchar(128),
BackupDescription nvarchar(255),
BackupType smallint,
ExpirationDate datetime,
Compressed bit,
Position smallint,
DeviceType tinyint,
UserName nvarchar(128),
ServerName nvarchar(128),
DatabaseName nvarchar(128),
DatabaseVersion int,
DatabaseCreationDate datetime,
BackupSize numeric(20,0),
FirstLSN numeric(25,0),
LastLSN numeric(25,0),
CheckpointLSN numeric(25,0),
DatabaseBackupLSN numeric(25,0),
BackupStartDate datetime,
BackupFinishDate datetime,
SortOrder smallint,
CodePage smallint,
UnicodeLocaleId int,
UnicodeComparisonStyle int,
CompatibilityLevel tinyint,
SoftwareVendorId int,
SoftwareVersionMajor int,
SoftwareVersionMinor int,
SoftwareVersionBuild int,
MachineName nvarchar(128),
Flags int,
BindingID uniqueidentifier,
RecoveryForkID uniqueidentifier,
Collation nvarchar(128),
FamilyGUID uniqueidentifier,
HasBulkLoggedData bit,
IsSnapshot bit,
IsReadOnly bit,
IsSingleUser bit,
HasBackupChecksums bit,
IsDamaged bit,
BeginsLogChain bit,
HasIncompleteMetaData bit,
IsForceOffline bit,
IsCopyOnly bit,
FirstRecoveryForkID uniqueidentifier,
ForkPointLSN numeric(25,0) NULL,
RecoveryModel nvarchar(60),
DifferentialBaseLSN numeric(25,0) NULL,
DifferentialBaseGUID uniqueidentifier,
BackupTypeDescription nvarchar(60),
BackupSetGUID uniqueidentifier NULL
)

insert #header
Exec ('restore headeronly from disk = ''\\pathToBackup\file.bak''')

select backupstartdate from #header
drop table #header 

관련 정보