我使用相同的.bak文件創建備份。我製作了一個腳本來自動恢復這個備份。使用腳本從bak文件恢復最新備份
RESTORE DATABASE [xxx] FROM DISK = N'xxx.bak'
WITH FILE = 10, NOUNLOAD, REPLACE, STATS = 10
GO
在此,顯式指定要還原的備份集。不過,我總是想恢復最新的集可用。默認情況下,它使用第一個備份集。
我使用相同的.bak文件創建備份。我製作了一個腳本來自動恢復這個備份。使用腳本從bak文件恢復最新備份
RESTORE DATABASE [xxx] FROM DISK = N'xxx.bak'
WITH FILE = 10, NOUNLOAD, REPLACE, STATS = 10
GO
在此,顯式指定要還原的備份集。不過,我總是想恢復最新的集可用。默認情況下,它使用第一個備份集。
使用RESTORE HEADERONLY命令找到您想要的特定備份,因爲該結果集顯示BackupFinishDate。請注意名爲Position的字段;這是FILE號碼。
此時,如果您已經知道邏輯名稱,則可以使用WITH子句中的FILE選項運行RESTORE命令。
restore database yourDB
from disk = N'C:\Program Files\Microsoft SQL Server\yourDB.bak'
with
file = 3
您可能已經知道您可以使用RESTORE FILELISTONLY命令來查找邏輯名稱。
Tibor Karaszi在此發佈了一個類似的解決方案:http://www.karaszi.com/SQLServer/util_restore_all_in_file.asp您可以使用他的CREATE TABLE命令將RESTORE HEADERONLY的結果放入表中。我在下面粘貼的內容展示瞭如何將RESTORE FILELISTONLY的結果放入表格中(也是從Tibor中撕下來的)。
create table FLO_results (
LogicalName nvarchar(128),
PhysicalName nvarchar(260),
[Type] char(1),
FileGroupName nvarchar(128),
Size numeric(20,0),
MaxSize numeric(20,0),
FileId bigint,
CreateLSN numeric(25,0),
DropLSN numeric(25,0),
UniqueId uniqueidentifier,
ReadOnlyLSN numeric(25,0),
ReadWriteLSN numeric(25,0),
BackupSizeInBytes bigint,
SourceBlockSize bigint,
FilegroupId bigint,
LogGroupGUID uniqueidentifier,
DifferentialBaseLSN numeric(25),
DifferentialBaseGUID uniqueidentifier,
IsReadOnly int,
IsPresent int
)
;
insert into FLO_results
exec('
restore filelistonly from disk = ''C:\Program Files\Microsoft SQL Server\yourDB.bak''
')
;
select * from FLO_results
;
drop table FLO_results
;
增加@Oliver的上一個答案。這是腳本(from here)爲您的xxx.bak備份顯示HeaderInfo。
DECLARE @HeaderInfo table
(
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,
CompressedBackupSize numeric(20,0)
)
INSERT INTO @HeaderInfo EXEC('RESTORE HEADERONLY
FROM DISK = N''xxx.bak''
WITH NOUNLOAD')
SELECT * FROM @HeaderInfo
這是一個很好的提示,我用HEADERONLY選項。 TNX! – Jowen 2010-03-31 14:26:01
邏輯文件名稱將根據恢復哪個位置而改變?或者,對於.bak文件中的所有備份集,邏輯文件名總是相同的? – Despertar 2012-05-27 06:13:07