Восстановите последнее резервное копирование из bak файла со сценарием

Я создаю резервные копии с помощью того же .bak файла. Я сделал сценарий, чтобы автоволшебно восстановить это резервное копирование.

RESTORE DATABASE [xxx] FROM  DISK = N'xxx.bak' 
WITH  FILE = 10,  NOUNLOAD,  REPLACE,  STATS = 10
GO

Здесь, набор резервных копий для восстановления явно указан. Однако я всегда хочу восстановить последний доступный набор. По умолчанию это использует первый набор резервных копий.

7
задан Jowen 30 March 2010 в 08:57
поделиться

1 ответ

Используйте команду RESTORE HEADERONLY, чтобы найти нужную резервную копию, поскольку в этом наборе результатов отображается BackupFinishDate. Обратите внимание на поле с именем Position; это номер ФАЙЛА.

На этом этапе, если вы уже знаете логические имена, вы можете запустить команду RESTORE, используя параметр FILE в предложении WITH.

restore database yourDB
from disk = N'C:\Program Files\Microsoft SQL Server\yourDB.bak' 
with 
  file = 3  

Вы, наверное, уже знаете, что можно использовать команду RESTORE FILELISTONLY для поиска логических имен.

Тибор Караси опубликовал похожее (но не такое же) решение здесь: http://www.karaszi.com/SQLServer/util_restore_all_in_file.asp Вы можете использовать его команды CREATE TABLE, чтобы получить результаты ВОССТАНОВИТЬ ТОЛЬКО ЗАГОЛОВКУ в таблицу. То, что я вставил ниже, показывает, как получить результаты 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
;
4
ответ дан 7 December 2019 в 12:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: