Restauración de Sql Server 2005 desde la copia de seguridad a la posición del archivo más reciente

Restauración de Sql Server 2005 desde la copia de seguridad a la posición del archivo más reciente

Estoy intentando restaurar una base de datos desde el disco a la copia de seguridad más reciente. Hay cuatro conjuntos de respaldo en la copia de seguridad. Me gustaría restaurar el más reciente (tomado hoy). Necesito poder hacerlo con TSQL.

Este script a continuación funciona:

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

Sin embargo, la posición del archivo cambiará en el futuro a medida que se realicen más copias de seguridad.

¿Existe alguna manera de restaurar una copia de seguridad a una posición de archivo sin especificar el número de archivo exacto? Algo como "CON ARCHIVO = most_recent_backup"

Respuesta1

El RESTORE HEADERONLYcomando le dará una lista de datos para todos los conjuntos de copias de seguridad del archivo. Desde allí, puede seleccionar el máximo Positiony pasarlo al FILEparámetro.

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

Respuesta2

No coloques todas tus copias de seguridad en un solo archivo. Si lo hace y ese archivo se daña, entonces habrá perdido todas sus copias de seguridad.

En su lugar, coloque cada copia de seguridad en su propio archivo usando un nombre de archivo dinámico cuando use los comandos BACKUP DATABASE y RESTORE DATABASE.

Respuesta3

La respuesta de Matt me puso en la dirección correcta. Necesitaba almacenar el conjunto de resultados antes de poder seleccionar la posición máxima. Mi búsqueda me llevó a esta solución.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 

información relacionada