
ディスクから最新のバックアップにデータベースを復元しようとしています。バックアップには 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
。
答え2
すべてのバックアップを 1 つのファイルに保存しないでください。そうすると、そのファイルが破損し、すべてのバックアップが失われます。
代わりに、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