Получить список данных и файлов журналов из отдельного файла SQL Server .mdf

Имеется отдельный файл первичных данных SQL Server (.mdf) как вы можете получить список данных и файлов журналов, которые существуют внутри этого файла? Цель состоит в том, чтобы использовать Server.AttachDatabase SMO метод для подключения базы данных. Но база данных может иметь несколько файлов данных и / или журналов, поэтому мне нужно получить список, чтобы добавить их в StringCollection параметр метода.

Что мне нужно, это эквивалент select * from sys.files для отдельного мдф. SQL Server Management Studio делает это, когда вы используете его для ручного подключения базы данных, поэтому я знаю, что это можно сделать.

3 ответа

Наконец-то понял это. Недокументированная команда DBCC checkprimaryfile(N'blah.mdf',3) выдает необходимую информацию.

Мне потребовалось некоторое время, чтобы найти его, но в SMO вы используете EnumDetachedLogFiles и EnumDetachedLogFiles.

# PowerShell
$servername = "sqlserver\instance"
$mdf = "S:\DATA\mydb.mdf"

[void][Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO")
$filestructure = New-Object System.Collections.Specialized.StringCollection
$server = New-Object Microsoft.SqlServer.Management.Smo.Server $servername

# Here you can automatically determine the database name, or set it manually
$dbname = ($server.DetachedDatabaseInfo($mdf) | Where { $_.Property -eq "Database name" }).Value

foreach    ($file in $server.EnumDetachedDatabaseFiles($mdf)) {
    $null = $filestructure.add($file)
}

foreach ($file in $server.EnumDetachedLogFiles($mdf)) {
    $null = $filestructure.add($file)
}

Перечислять отдельные файловые структуры базы данных

SMO Прикрепить / Отсоединить Рецепты

Если это один файл MDF, если есть другие файлы MDF, я не думаю, что файл MDF может сказать вам об этом напрямую.

И вы всегда можете попробовать прикрепить файл MDF без файла журнала, используя CREATE DATABASE ... FOR ATTACH_REBUILD_LOG вариант.

В SMO вы можете сделать это, используя AttachDatabase указание метода RebuildLog за AttachOptions,

Конечно, все это предполагает, что файл.mdf исправен - его можно будет использовать, только если он был чисто отсоединен.

Вероятно, в Management Studio есть какой-то собственный способ чтения заголовков файлов, но они не документированы, и вы не сможете увидеть, что делает SSMS с помощью Profiler или чего-то подобного.

Если вы обычно создаете.mdf файлы для распространения, я настоятельно рекомендую вместо этого использовать резервное копирование / восстановление. Вы можете узнать больше о файле.BAK и файлах данных / журналов, которые представляет его база данных, используя документированные и общедоступные методы, такие как RESTORE FILELISTONLY,

Другие вопросы по тегам