8

多数のデータベースを持つ SQL Server 2005 / 2008 を想定します。特定の .mdf ファイルに接続されているデータベースがある場合、そのデータベースをすばやく確認する方法はありますか?

時間の経過とともにいくつかのデータベースを削除しました。残りの .mdf をクリーンアップして、サーバーのスペースを空けたいと考えています。現在私が知っている唯一の方法は、Management Studio で各データベースのプロパティを 1 つずつ見て、それらが添付されているファイルのリストを作成することです。何かあれば、これよりも少し効率的なものを探しています。

4

6 に答える 6

12

sys.master_filesには、そのデータベースの最初のファイル (id = 1) のデータベースごとに 1 行が含まれます。つまり、システム テーブルは常に各データベースの fileid = 1 になります。

必要なのはこれだけです:

SELECT
   DB_NAME(database_id), physical_name
FROM
   sys.master_files
于 2011-05-19T16:27:55.837 に答える
9

これが役立つ場合があります。

declare @files table (
    db_name sysname,
    physical_name nvarchar(260)
)

insert into @files
    exec sp_MSforeachdb 'select "?", physical_name from ?.sys.database_files'

select db_name, physical_name 
    from @files
于 2011-05-19T16:13:27.943 に答える
3

これにはOrcaMDFを使用することもできます。

using (var file = new MdfFile(@"C:\Database.mdf"))
{
    var bootPage = file.GetBootPage();
    Console.WriteLine(bootPage.DatabaseName);
}

これにより、データベース サーバーにアタッチせずに、mdf のデータベース名をクエリできます。複数のファイルがある場合は、プライマリ データ ファイルに対してこれを行う必要があることに注意してください。免責事項 - 私は OrcaMDF の作成者です。

データ ディレクトリ内のすべてのファイルをループすると、それを sys.databases と結合して、どのファイルが一致しないかを簡単に確認できます。したがって、添付されていない mdf ファイルです。

編集: 私のブログに、より完全な例を投稿しました: http://improve.dk/archive/2011/05/19/checking-which-database-is-stored-in-a-deattached-mdf-file.aspx

于 2011-05-19T16:25:31.283 に答える
3
select db_name(database_id), * from sys.master_files

システムで認識されているすべてのデータベースのすべてのファイルを一覧表示します。

于 2011-05-19T16:56:28.027 に答える
1

ローテクソリューション...mdfファイルを別の場所に移動します。接続されている場合、SQLサーバーでは移動できません:)

コマンドプロンプトから

cd X:\TheDir\Where\MDF\File\Are
mkdir UnusedMdf
move *.mdf UnusedDBFiles
move *.ldf UnusedDBFiles

未使用のファイルはすべてUnusedDBFilesに移動されます。

于 2011-05-19T16:07:00.423 に答える