24 Stimmen

Abrufen der Dateiliste einer SQL-Server-Datenbank, die offline ist

Ich habe einige Offline-Datenbanken auf einem SQL-Server. Ich würde gerne wissen, welche Dateien auf der Festplatte mit diesen Datenbanken verbunden sind. Ist es möglich, die Dateiliste der Offline-Datenbanken abzurufen, ohne sie vorher online zu stellen?

47voto

badbod99 Punkte 7228

So erhalten Sie eine Liste mit allen physische Dateipfade im Zusammenhang mit einer Offline-Datenbanken zusammen mit dem Datenbanknamen und dem Dateityp:

SELECT
'DB_NAME' = db.name,
'FILE_NAME' = mf.name,
'FILE_TYPE' = mf.type_desc,
'FILE_PATH' = mf.physical_name
FROM
sys.databases db
INNER JOIN sys.master_files mf
ON db.database_id = mf.database_id
WHERE
db.state = 6 -- OFFLINE

7voto

mike nelson Punkte 19634

Oder einfach

select * from sys.databases where state_desc='OFFLINE'

1 Stimmen

Das funktioniert, aber die Verwendung von state=6 Feld/Wert könnte ein prägnanterer Ansatz mit einer schnelleren Suchgeschwindigkeit für TINYINT anstelle von NVARCHAR(60) sein.

1 Stimmen

@TravisCrooks Glauben Sie, dass dies in dem Kontext, in dem wir uns hier befinden, einen Unterschied machen wird? Dies ist eine einmalige Aufgabe, und selbst wenn Sie ein Skript für die künftige Verwendung erstellen, wird die Millisekunden Sie könnte sparen wird keine Rolle spielen. Ich würde sogar argumentieren, dass die Verwendung des beschreibenden Zustandsnamens die bessere Wahl ist, weil niemand mehr nach dem Wert suchen muss. 6 bedeutet eigentlich, wenn sie in Zukunft auf dieses Skript zurückkommen :-)

1 Stimmen

@mikenelson Ich finde, ich sollte Ihre Antwort herunterstufen, weil sie den wichtigen ersten Teil der Frage des Auftraggebers nicht beantwortet: Abrufen der Dateiliste . Andererseits ist es eine hilfreiche Teilantwort für einige, also werde ich es nicht tun :-)

0voto

WonderWorker Punkte 7910

Auflisten aller verfügbaren, aber offline verfügbaren SQL-Server-Datenbankdateien

Die folgende Anweisung listet alle Dateien auf, die mit Offline-SQL-Server-Datenbanken verbunden sind

SELECT
    m.physical_name + '\' + m.name AS [file_path]
FROM
    sys.databases AS d 
    INNER JOIN sys.master_files AS m ON d.database_id = m.database_id
WHERE
    d.state_desc = 'OFFLINE'
    --AND m.type_desc = 'ROWS'
GROUP BY
    m.physical_name + '\' + m.name

_Hinweis: Entfernen Sie die Markierung in der Zeile AND m.type_desc = 'ROWS' (löschen Sie das --), um die Liste weiter zu filtern und nur Datenbankdateien einzuschließen. Andernfalls werden auch die Protokolldateien aufgelistet._

El GROUP BY Klausel soll verhindern, dass Einträge mehr als einmal vorkommen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X