101

SQL Server上のすべてのデータベースのファイル(MDF / LDF)に関する情報を一覧表示することはできますか?

どのデータベースがローカルディスク上のどのファイルを使用しているかを示すリストを取得したいのですが。

私が試したこと:

  • exec sp_databasesすべてのデータベース
  • select * from sys.databasesには、各データベースに関する多くの情報が表示されますが、残念ながら、各データベースで使用されているファイルは表示されません。
  • select * from sys.database_filesデータベースのmdf/ldfファイルを表示しmasterますが、他のデータベースは表示しません
4

14 に答える 14

131

sys.master_filesを使用できます。

マスター データベースに格納されているデータベースのファイルごとに行が含まれます。これは、単一のシステム全体のビューです。

于 2012-03-09T07:28:14.633 に答える
92

データベースの場所を取得したい場合は、Get All DBs Locationをチェックできます。データベースの場所を取得し、データベース名を取得するために
使用できますsys.master_filessys.database

SELECT
    db.name AS DBName,
    type_desc AS FileType,
    Physical_Name AS Location
FROM
    sys.master_files mf
INNER JOIN 
    sys.databases db ON db.database_id = mf.database_id
于 2014-11-21T08:45:39.487 に答える
18

スクリプトを使用して各ファイルの空き領域を取得しています:

Create Table ##temp
(
    DatabaseName sysname,
    Name sysname,
    physical_name nvarchar(500),
    size decimal (18,2),
    FreeSpace decimal (18,2)
)   
Exec sp_msforeachdb '
Use [?];
Insert Into ##temp (DatabaseName, Name, physical_name, Size, FreeSpace)
    Select DB_NAME() AS [DatabaseName], Name,  physical_name,
    Cast(Cast(Round(cast(size as decimal) * 8.0/1024.0,2) as decimal(18,2)) as nvarchar) Size,
    Cast(Cast(Round(cast(size as decimal) * 8.0/1024.0,2) as decimal(18,2)) -
        Cast(FILEPROPERTY(name, ''SpaceUsed'') * 8.0/1024.0 as decimal(18,2)) as nvarchar) As FreeSpace
    From sys.database_files
'
Select * From ##temp
drop table ##temp

サイズは KB で表されます。

于 2012-03-09T12:02:00.340 に答える
4

次のSQLを実行します(同じデータベースに複数のmdf / ldfファイルがない場合にのみ機能します)

SELECT
    db.name AS DBName,
    (select mf.Physical_Name FROM sys.master_files mf where mf.type_desc = 'ROWS' and db.database_id = mf.database_id ) as DataFile,
    (select mf.Physical_Name FROM sys.master_files mf where mf.type_desc = 'LOG' and db.database_id = mf.database_id ) as LogFile
FROM sys.databases db

この出力を返します

DBName       DataFile                     LogFile
--------------------------------------------------------------------------------
master       C:\....\master.mdf           C:\....\mastlog.ldf
tempdb       C:\....\tempdb.mdf           C:\....\templog.ldf
model        C:\....\model.mdf            C:\....\modellog.ldf

および残りのデータベース

TempDB に複数の MDF がある場合 (私のように)、このスクリプトは失敗します。ただし、使用できます

WHERE db.database_id > 4

最後に、システム データベースを除くすべてのデータベースを返します。

于 2015-01-19T16:49:40.463 に答える
4

このクエリを作成しました:

SELECT 
    db.name AS                                   [Database Name], 
    mf.name AS                                   [Logical Name], 
    mf.type_desc AS                              [File Type], 
    mf.physical_name AS                          [Path], 
    CAST(
        (mf.Size * 8
        ) / 1024.0 AS DECIMAL(18, 1)) AS         [Initial Size (MB)], 
    'By '+IIF(
            mf.is_percent_growth = 1, CAST(mf.growth AS VARCHAR(10))+'%', CONVERT(VARCHAR(30), CAST(
        (mf.growth * 8
        ) / 1024.0 AS DECIMAL(18, 1)))+' MB') AS [Autogrowth], 
    IIF(mf.max_size = 0, 'No growth is allowed', IIF(mf.max_size = -1, 'Unlimited', CAST(
        (
                CAST(mf.max_size AS BIGINT) * 8
        ) / 1024 AS VARCHAR(30))+' MB')) AS      [MaximumSize]
FROM 
     sys.master_files AS mf
     INNER JOIN sys.databases AS db ON
            db.database_id = mf.database_id
于 2018-12-28T12:44:09.357 に答える