Wie hänge ich eine Datenbank in SQL Server an?

32

Einige häufig gestellte Fragen zum Anhängen von Datenbanken in SQL Server:

  • Was bedeutet es, eine Datenbank anzuhängen oder zu trennen?
  • Wie trenne ich eine Datenbank?
  • Wie hänge ich eine Datenbank an?
    • Was bedeutet es, das Protokoll anzuhängen und neu zu erstellen?
  • Wie mache ich das in SQL Server Express?
  • Wann kann ich das Abnehmen und Anbringen in Betracht ziehen?
  • Gibt es irgendwelche Risiken oder Warnungen?
  • Was ist mit dem Anhängen zwischen Versionen und Editionen von SQL Server? (Standard für Unternehmen? 2000 bis 2008? 2012 bis 2008?)
Mike Walsh
quelle

Antworten:

33

Was ist lösen oder anbringen und wie funktionieren sie?

Wir werden mit der Trennung beginnen. Wenn Sie eine Datenbank in SQL Server trennen, schalten Sie die Datenbank offline und entfernen sie aus der SQL Server-Instanz, von der Sie sie trennen. Die Datenbankdaten und Protokolldateien bleiben unverändert und bleiben in einem konsistenten Zustand, sodass Sie die Datenbank zu einem späteren Zeitpunkt oder an eine andere SQL Server-Instanz anfügen können. Mit Anhängen werden die Daten- und Protokolldateien aus einer Datenbank, die ordnungsgemäß getrennt wurde (oder von einer ordnungsgemäß heruntergefahrenen Instanz von SQL Server kopiert wurde), mit einer Instanz von SQL Server verbunden und die Datenbank online geschaltet.

Wie löse ich eine Datenbank?

Dies können Sie in T-SQL oder über die Benutzeroberfläche von SQL Server Management Studio ausführen.

In der GUI klicken Sie mit der rechten Maustaste auf die Datenbank, die Sie trennen möchten, wählen Sie All Tasksund klicken Sie auf Detach. Von dort aus gelangen Sie in den Dialog zum Trennen. Sie können festlegen, dass Verbindungen zuerst getrennt werden, um aktive Verbindungen und Rollback-Vorgänge, die während der Ausführung ausgeführt wurden, zu unterbrechen. Sie können auch festlegen, dass die Statistiken vor dem Trennen aktualisiert werden. Durchtrennen - Wählen Sie Trennen ...

In T-SQL:

-- You don't want to be in the database you are trying to detach
USE Master
GO

-- Optional step to drop all active connections and roll back their work
ALTER DATABASE DatabaseName
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

-- Perform the detach
EXEC sp_detach_db 'DatabaseName'
GO

Für die gespeicherte Systemprozedur sp_detach_db gibt es zwei Parameter, die Sie optional übergeben können:

  • @skipchecks- Akzeptable Eingabe ist 'True'oder 'False'wenn 'True'SQL Server die Statistiken aktualisiert, bevor die Verbindung getrennt wird. Wenn, False'wird es nicht. Wenn Sie hier nichts angeben, werden die Statistiken in SQL Server 2005 oder höher aktualisiert.
    • @keepfulltextindexfile- Die Standardeinstellung lautet hier 'True'- Wenn diese Option auf "true" gesetzt ist, werden die Volltextindex-Metadaten während der Trennung nicht gelöscht.

Um mehr über das Trennen und einige Details zu den Risiken zu erfahren, die ich unten hervorhole, ist der Books Online-Artikel für sp_detach_dbein guter Ausgangspunkt.

Wie hänge ich eine Datenbank an?

Sie können dies auch in T-SQL oder über die Benutzeroberfläche von SQL Server Management Studio tun.

( HINWEIS: Wenn Sie die Daten- und Protokolldateien aus einer Datenbank haben, die nicht ordnungsgemäß getrennt wurde, funktioniert Ihre Anlage möglicherweise nicht. Wenn die Trennung erfolgt, wird die Datenbank offline geschaltet und die Protokoll- und Datendateien werden in einen konsistenten Zustand versetzt. Dies gilt auch passiert, wenn ein Dienst sauber heruntergefahren wird. )

Klicken Sie in der GUI mit der rechten Maustaste auf den DatabasesOrdner der obersten Ebene für Ihre Instanz und wählen Sie Attach. Im nächsten Dialogfeld wählen Sie dann die Primärdatendatei (.MDF) der Datenbank aus, die Sie anhängen möchten, und stellen sicher, dass die anderen Dateien ausgewählt und die entsprechenden Speicherorte angegeben sind. Klicken Sie dann auf OK, um Ihre Datenbank anzuhängen.

In T-SQL erfolgt dies in SQL Server 2005 und in der Weiterleitung am besten über den CREATE DATABASEBefehl. Dies ist die Methode, die über SQL Server 2012 hinaus unterstützt wird. Wenn Sie sehen möchten, wie Sie sie verwenden sp_attach_db, können Sie dies in den Online-Artikeln der Bücher für [sp_attach_db][3]oder sehen[sp_attach_single_file_db][4]

Wenn Sie Ihre Protokolldatei und Datendateien zur Verfügung haben und diese konsistent sind, ist dies der T-SQL-Ansatz:

- Verwenden von Create Database und der FOR ATTACH-Klausel zum Anhängen

CREATE DATABASE DatabaseName 
    ON (FILENAME = 'FilePath\FileName.mdf'), -- Main Data File .mdf
    (FILENAME = 'FilePath\LogFileName.ldf'), -- Log file .ldf
     (FILENAME = 'FilePath\SecondaryDataFile.ndf)  -- Optional - any secondary data files
    FOR ATTACH 
GO 

Weitere Informationen zur Anweisung " Datenbank erstellen" finden Sie auch in Online-Büchern.

Wie kann ich in SQL Server Express eine Verbindung herstellen / trennen?

Es ist eigentlich das gleiche. Wenn Sie SQL Server Management Studio Express verwenden, können Sie das Dialogfeld zum Trennen / Anfügen in der oben beschriebenen GUI oder die oben beschriebenen T-SQL-Schritte durch SSMS Express verwenden. Kein Unterschied mit Express da.

Wenn Sie nicht über SSMS Express verfügen, können Sie es herunterladen ( hier ist die SQL Server 2012 Express-Version).

Von können Sie in eine SQLCMDSitzung eintreten und dieselben T-SQL-Konstrukte verwenden, die oben beschrieben wurden.

Wann sollte ich in Betracht ziehen, eine Trennung oder Befestigung vorzunehmen?

Zuerst ein Wort darüber, wofür das Trennen und Anhängen nicht verwendet werden soll: Sichern und Wiederherstellen Das Trennen und Anhängen ist keine Möglichkeit, Ihre Datenbank für Routinewiederherstellungszwecke zu sichern. Auf diese Weise werden keine Transaktionsprotokollsicherungen durchgeführt. Dadurch wird Ihre Datenbank in einen Zustand versetzt, in dem die Datenbankdateien versehentlich gelöscht werden können, und dies ist für diesen Zweck überhaupt keine gute Methode.

Das heißt, das Trennen und Anhängen ist für einige Anwendungsfälle gut (nicht erschöpfend, zögern Sie nicht, sie zu bearbeiten, um sie hinzuzufügen oder eine neue Antwort mit mehr zu erstellen):

  • Manchmal für Migrationen (obwohl ich Backup / Restore für diejenigen bevorzuge, wie in meiner Antwort hier beschrieben )
  • Wenn Sie eine Datenbank entfernen möchten, die nicht mehr aktiv verwendet wird, aber die Möglichkeit hat, bei Bedarf eine spätere Verbindung herzustellen.
  • In bestimmten Problembehandlungssituationen kann dies erforderlich sein
  • Sie haben nicht den Speicherplatz, um Daten und Protokolldateien in einer anderen Umgebung zu sichern oder wiederherzustellen (Sie sollten nie hier sein, aber ich habe ihn verwendet, um Entwicklerdatenbanken zeitweise in Umgebungen zu verschieben. Wollte oder brauchte nicht das Protokoll hat also ein Anhängen / Neuerstellen der Protokolldatei)

Risiken und Warnungen

Auch hier sind Bücher online eine gute Ressource hier , aber ich werde einige spezifische Überlegungen im Auge zu haben , rufe mit Abnehmen oder Anfügen eine Datenbank -

Ablösen

  • Sie schalten Ihre Datenbank offline. Es ist nicht mehr zugänglich. Dies sollte offensichtlich sein, aber es lohnt sich, darauf hinzuweisen. Aus diesem Grund ist es keine großartige Sicherungsoption.
  • Wenn Ihre Datenbank online ist, sperrt SQL Server die Dateien. Ich würde nicht empfehlen, dies zu versuchen, um zu beweisen, dass ich falsch liege, da möglicherweise eine andere Situation vorliegt. In der Regel können Sie jedoch keine Datenbankdatei (Daten, sekundäre Daten oder Protokolldateien) löschen, während SQL Server online ist. Das ist eine gute Sache. Wenn Sie sich lösen, haben Sie keinen solchen Schutz - dies kann eine schlechte Sache sein.
  • Wenn Sie mit Datenbankbeschädigungen zu tun haben und irgendwo einen Artikel finden, der einen ersten Schritt zum Trennen enthält - es ist falsch -, wenn Sie eine beschädigte Datenbank trennen , kann dies der Fall sein. Möglicherweise hängen Sie diese Datenbank nicht erneut an.
  • Das Ausschneiden und Einfügen Ihrer Produktionsdatenbankdateien im gesamten Netzwerk kann möglicherweise zu einer Beschädigung auf Dateiebene führen. Ein weiterer Grund ist das Sichern / Wiederherstellen bei Migrationen.
  • Dies kann dazu führen, dass ein Wartungsplan fehlschlägt. Die Situation ist, dass Sie wie ich einen Wartungsplan erstellt haben, um regelmäßige Sicherungen aller Datenbanken durchzuführen, ohne die bewährten Methoden zu überprüfen. Das funktioniert gut, also hör auf darüber nachzudenken. Jemand anderes beschließt dann, eine Datenbank zu verwenden, die nicht offline verwendet wird. Der Wartungsplan schlägt von diesem Zeitpunkt an fehl, bis Sie den Wartungsplan ändern, indem Sie im Dialogfeld "Datenbank (en)" die Option "Datenbanken ignorieren, deren Status nicht online ist" aktivieren. Beachten Sie, dass dies nicht nur für die Offlinedatenbank fehlschlägt. Der Wartungsplan schlägt an dem Punkt fehl, an dem versucht wird, die Offlinedatenbank zu sichern, sodass einige Onlinedatenbanken möglicherweise nicht gesichert werden. (anderer Autor für diesen Punkt also mit Argwohn behandeln)

Anhängen - So wie Sie keine Skripte aus dem Internet ausführen oder Pakete von Fremden am Flughafen annehmen sollten, sollten Sie auch keine Datenbank anhängen, die Sie von einer anderen Person erhalten haben, ohne einige Schritte zu unternehmen, um dies zu überprüfen. Diese Datenbank kann Code in Triggern, gespeicherten Prozeduren usw. enthalten, der Ihre Umgebung gefährden kann. Sie sollten eine Datenbank überprüfen, die Sie in einer sicheren und geschützten Umgebung anfügen möchten, nicht in Ihrem Produktionssystem.

Was ist mit verschiedenen Versionen oder Editionen von SQL Server?

Dies unterscheidet sich nicht von den Regeln zum Wiederherstellen von Datenbanken zwischen Versionen. Sie können in der Regel bis zur nächsten Version für 3 Versionen wiederherstellen (SQL Server 2008 bis SQL Server 2012 funktioniert beispielsweise. SQL Server 2000 bis SQL Server 2012 funktionieren nicht). Sie können nicht rückwärts über das Sichern / Wiederherstellen oder Trennen / Anhängen gehen - Sie müssten Objekte aus und die Einfügungen ausschreiben und dies manuell oder mit einem Tool tun, das dies tut. Bei Editionen können Sie im Allgemeinen zwischen den Haupt-SKUs von SQL Server wechseln. Beispielsweise können Sie eine Datenbank ohne zusätzlichen Arbeitsaufwand von Standard auf Enterprise verschieben. Wenn Sie Enterprise-Funktionen verwenden (z. B. Komprimierung oder Partitionierung), müssen Sie diese Funktionen deaktivieren, bevor Sie den Umzug durchführen. Sie können sich ein Bild von den Funktionen machen, die Sie verwenden.

Mike Walsh
quelle
@Mike - Hat das regelmäßige Trennen und Anhängen von Datenbanken Auswirkungen auf die Leistung? Ich stelle mir vor, dass der Puffercache für jede Datenbank ungültig ist, die (eindeutig) getrennt ist, aber sind Ihnen andere Auswirkungen bekannt?
Max Vernon
Ich habe eine Datenbank, auf der, wenn ich die SQL Server-Instanz stoppe und die 3 Dateien kopiere und sie dann an eine andere Instanz anhänge, die Datenbank in die Wiederherstellung übergeht (mir zweimal in derselben Datenbank passiert). Nach Ihrer Beschreibung sollte dies nicht passieren. Was sollte ich also an meiner Datenbank vermuten? Ist es in irgendeiner Weise beschädigt? Das Erstellen und Wiederherstellen von Backups dauert Äonen, und diese Funktion ist ein Lebensretter! Zumindest für Entwickler-DB-Sharing-Zwecke ...
NoOne