Ist es möglich, Informationen zu den Dateien (MDF / LDF) aller Datenbanken auf einem SQL Server aufzulisten?
Ich möchte eine Liste erhalten, aus der hervorgeht, welche Datenbank welche Dateien auf der lokalen Festplatte verwendet.
Was ich versucht habe:
exec sp_databases
alle Datenbankenselect * from sys.databases
zeigt viele Informationen zu jeder Datenbank an - aber leider werden nicht die von jeder Datenbank verwendeten Dateien angezeigt.select * from sys.database_files
zeigt die mdf / ldf-Dateien dermaster
Datenbank - aber nicht die anderen Datenbanken
DB_NAME(database_id)
anstatt sich mitsys.databases
Wenn Sie den Speicherort der Datenbank abrufen möchten, können Sie den Speicherort aller DBs abrufen aktivieren .
Sie können verwenden,
sys.master_files
um den Speicherort der Datenbank abzurufen undsys.databse
den Datenbanknamen abzurufenquelle
Ich verwende ein Skript, um leeren Speicherplatz in jeder Datei zu erhalten:
Die Größe wird in KB angegeben.
quelle
Use [?]
soll tun? Es gibt einen Fehler, dass diese gespeicherte Prozedur nicht gefunden werden kann. Beim Entfernen werden die Systemdatenbanken nur mehrmals angezeigt.Ich habe diese Abfrage erstellt:
quelle
Sie können dies auch versuchen.
quelle
Ausführen der folgenden SQL (funktioniert nur, wenn Sie nicht mehrere MDF / LDF-Dateien für dieselbe Datenbank haben)
gibt diese Ausgabe zurück
und Rest der Datenbanken
Wenn Ihre TempDBs mehrere MDFs haben (wie meine), schlägt dieses Skript fehl. Sie können jedoch verwenden
am Ende und es werden alle Datenbanken außer Systemdatenbanken zurückgegeben.
quelle
Mit diesem Skript können Sie alle verwendeten Datenbanknamen und Dateien anzeigen (mit Ausnahme der Systemdatenbanken).
quelle
Dieses Skript listet das meiste auf, wonach Sie suchen, und kann hoffentlich an Ihre Bedürfnisse angepasst werden. Beachten Sie, dass dort eine permanente Tabelle erstellt wird. Möglicherweise möchten Sie diese ändern. Es ist eine Teilmenge eines größeren Skripts, das auch Sicherungs- und Auftragsinformationen auf verschiedenen Servern zusammenfasst.
quelle
LogVolumeFreeSpaceMB
in meinem Fall 44756 für alle Dateien immer die gleiche Menge angezeigt wird. Ist es möglich, den tatsächlichen freien Speicherplatz zu erhalten? Oder ist das die Anzahl des maximalen freien Speicherplatzes auf dem Laufwerk, auf dem sich die LDF befindet?Die Abfrage schlägt fehl, wenn mehrere Datendateien (z. B. ".ndf" -Dateitypen) in einer der Datenbanken verwendet werden.
Hier ist eine Version Ihrer Abfrage, die Joins anstelle der Unterabfragen verwendet.
Prost!
quelle
Das folgende Skript kann verwendet werden, um folgende Informationen abzurufen: 1. DB-Größeninfo 2. FileSpaceInfo 3. AutoGrowth 4. Wiederherstellungsmodell 5. Log_reuse_backup-Informationen
quelle
Ich füge nur meine 2 Cent hinzu.
Wenn Sie speziell danach suchen, den gesamten freien Speicherplatz nur in Datendateien oder nur in Protokolldateien in allen Datenbanken zu finden, können Sie die Spalte "data_space_id" verwenden. 1 steht für Datendateien und 0 für Protokolldateien.
CODE:
quelle
Wenn Sie Ihre Datenbank umbenennen, benennt MS SQL Server die zugrunde liegenden Dateien nicht um.
Die folgende Abfrage gibt Ihnen den aktuellen Namen der Datenbank und den Namen der logischen Datei (möglicherweise der ursprüngliche Name der Datenbank, als sie erstellt wurde) sowie die entsprechenden physischen Dateinamen.
Hinweis: Deaktivieren Sie die letzte Zeile, um nur die tatsächlichen Datendateien anzuzeigen
Referenz:
https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-master-files-transact-sql?view=sql-server-ver15
https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-databases-transact-sql?view=sql-server-ver15
quelle
Sie können Folgendes verwenden:
quelle