Получение имени базы данных из файла bak - PullRequest
5 голосов
/ 14 ноября 2010

У меня есть bak-файл, в котором есть резервная копия базы данных.

Я хочу восстановить эту базу данных в новом месте, и мне нужно извлечь имя базы данных из этого файла, если есть идеисделать это?

Мне нужно переопределить расположение файла данных и местоположение файла журнала.

Спасибо за помощь.

1 Ответ

11 голосов
/ 14 ноября 2010
RESTORE FILELISTONLY
FROM DISK = 'full path to your .bak file'

покажет вам текущие имена файлов в резервной копии. Если в одном файле несколько резервных копий и вы не указали «WITH FILE = X», вы получите информацию только для первой резервной копии в файле.

RESTORE DATABASE MyNewDBname
    FROM DISK = 'full path to your .bak file'
    WITH 
      MOVE 'LogicalFilename_Data' TO 'D:\somepath\...\MyDB.mdf',
      MOVE 'LogicalFilename_Log' TO 'D:\somepath\...\MyDB.ldf';
GO

Грубый контур с SMO (не тестировался):

Restore restoreDB = new Restore();
restoreDB.Database = myDatabase.Name;
// Specify whether you want to restore database, files or log
restoreDB.Action = RestoreActionType.Database;
restoreDB.Devices.AddDevice(@"D:\somepath\...\MyDBFull.bak", DeviceType.File);

restoreDB.ReplaceDatabase = true; // will overwrite any existing DB     
restoreDB.NoRecovery = true;

// you can Wire up events for progress monitoring */
// restoreDB.PercentComplete += CompletionStatus;
// restoreDB.Complete += RestoreCompleted;

restoreDB.SqlRestore(myServer);

1010 * Ref *.

Используя SMO, вы можете получить список файлов, используя Restore.ReadFileList

См. Также: Как восстановить базу данных из C #

...