
Ich versuche, eine Datenbank von der Festplatte auf das neueste Backup wiederherzustellen. Das Backup enthält vier Backup-Sätze. Ich möchte den neuesten (heute erstellt) wiederherstellen. Ich muss dazu TSQL verwenden können.
Das folgende Skript funktioniert:
RESTORE DATABASE DatabaseName
FROM DISK = 'D:\Data\DatabaseName.bak' WITH FILE = 4, REPLACE
Die Dateiposition wird sich jedoch in Zukunft ändern, wenn weitere Sicherungen erstellt werden.
Gibt es eine Möglichkeit, ein Backup an einer Dateiposition wiederherzustellen, ohne die genaue Dateinummer anzugeben? So etwas wie „WITH FILE = most_recent_backup“
Antwort1
Der RESTORE HEADERONLY
Befehl gibt Ihnen eine Liste mit Daten für alle Sicherungssätze in der Datei. Von dort aus können Sie das Maximum auswählen Position
und an den Parameter übergeben FILE
.
Antwort2
Legen Sie nicht alle Ihre Backups in einer einzigen Datei ab. Wenn Sie das tun und diese Datei beschädigt wird, sind alle Ihre Backups verloren.
Legen Sie stattdessen jedes Backup in einer eigenen Datei mit einem dynamischen Dateinamen ab, wenn Sie die Befehle BACKUP DATABASE und RESTORE DATABASE verwenden.
Antwort3
Matts Antwort hat mich in die richtige Richtung gebracht. Ich musste den Ergebnissatz speichern, bevor ich die maximale Position auswählen konnte. Meine Suche führte mich zu dieser Lösunghttp://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