it-swarm.com.de

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

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 könnte ich das Abnehmen und Anbringen in Betracht ziehen?
  • Gibt es 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?)
32
Mike Walsh

Was ist Abnehmen oder Anbringen und wie funktionieren sie?

Wir beginnen mit dem Trennen. Wenn Sie eine Datenbank in SQL Server trennen, schalten Sie die Datenbank offline und entfernen sie aus der SQL Server-Instanz, von der aus Sie lösen es. Die Daten- und Protokolldateien der Datenbank bleiben erhalten und bleiben in einem konsistenten Zustand, sodass Sie die Datenbank zu einem späteren Zeitpunkt oder an eine andere SQL Server-Instanz anhängen können. Attach verbindet die Daten- und Protokolldateien einer Datenbank, die ordnungsgemäß getrennt wurde (oder von einer sauber heruntergefahrenen Instanz von SQL Server kopiert wurde), mit einer Instanz von SQL Server und bringt die Datenbank online.

Wie trenne ich eine Datenbank?

Sie können dies in T-SQL oder über die GUI von SQL Server Management Studio tun.

Klicken Sie in der GUI mit der rechten Maustaste auf die Datenbank, die Sie trennen möchten, wählen Sie All Tasks Und klicken Sie auf Detach. Von dort aus erhalten Sie den Dialog zum Trennen. Sie können festlegen, dass Verbindungen zuerst getrennt werden, um alle aktiven Verbindungen und Rollback-Arbeiten, die während der Ausführung ausgeführt wurden, zwangsweise zu trennen. Sie können die Statistiken auch vor dem Trennen aktualisieren. Detaching through - Choose Detach...

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 - Die akzeptable Eingabe ist 'True' Oder 'False'. Wenn 'True', Aktualisiert SQL Server die Statistiken vor dem Trennen. Wenn 'False', Wird es nicht. Wenn Sie hier nichts angeben, werden die Statistiken in SQL Server 2005 oder höher aktualisiert.
    • @keepfulltextindexfile - Der Standardwert hier ist 'True' - Wenn dies auf true gesetzt ist, werden die Volltextindex-Metadaten während des Trennens nicht gelöscht.

Um mehr über das Ablösen und einige Details zu den Risiken zu erfahren, die ich unten hervorhole, ist der Books Online-Artikel für sp_detach_db Ein guter Anfang.

Wie hänge ich eine Datenbank an?

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

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

In der GUI klicken Sie mit der rechten Maustaste auf den Ordner Databases der obersten Ebene für Ihre Instanz und wählen Attach aus. Im nächsten Dialogfeld wählen Sie dann die primäre Datendatei (.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 ist dies in SQL Server 2005 und weiter am besten mit dem Befehl CREATE DATABASE Zu tun. Dies ist die Methode, die über SQL Server 2012 hinaus unterstützt wird. Wenn Sie wissen möchten, wie sp_attach_db Verwendet wird, können Sie dies in den Online-Büchern für [sp_attach_db][3] Oder [sp_attach_single_file_db][4] Lesen.

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 Create Database finden Sie auch online in Büchern.

Wie trenne ich mich in SQL Server Express?

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

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

Sie können an einer SQLCMD -Sitzung teilnehmen und dieselben oben beschriebenen T-SQL-Konstrukte verwenden.

Wann sollte ich in Betracht ziehen, ein Abnehmen oder Anbringen durchzuführen?

Zuerst ein Wort darüber, wofür Trennen und Anhängen nicht verwendet werden soll: Sichern und Wiederherstellen Trennen und Anhängen ist keine Möglichkeit, Ihre Datenbank für die Routine zu sichern Wiederherstellungszwecke. 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 nicht geeignet.

Das Entfernen und Anhängen eignet sich jedoch für einige Anwendungsfälle (nicht erschöpfend, Sie können sie bearbeiten, um eine neue Antwort mit mehr hinzuzufügen oder zu erstellen):

  • Manchmal für Migrationen (obwohl ich Backup/Restore für diejenigen bevorzuge, wie in meiner Antwort beschrieben hier )
  • Wenn Sie eine Datenbank entfernen möchten, die nicht mehr aktiv verwendet wird, aber später nach Bedarf angehängt werden kann.
  • In bestimmten Situationen zur Fehlerbehebung kann dies erforderlich sein
  • Sie haben nicht den Speicherplatz zum Sichern oder Wiederherstellen von Daten und Protokolldateien in einer anderen Umgebung (Sie sollten nie hier sein, aber ich habe es verwendet, um Entwicklerdatenbanken manchmal in Umgebungen zu verschieben. Wollte oder brauchte nicht das Protokoll hat auch ein Anhängen/Wiederherstellen der Protokolldatei durchgeführt)

Risiken und Warnungen

Auch hier sind Online-Bücher eine gute Ressource hier , aber ich werde einige spezifische Überlegungen anstellen, die beim Trennen oder Anhängen einer Datenbank zu berücksichtigen sind -

Abnehmen

  • Sie schalten Ihre Datenbank offline. Es wird nicht mehr zugänglich sein. 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 mir das Gegenteil zu beweisen, da möglicherweise eine andere Situation vorliegt, aber Sie können eine Datenbankdatei (Daten, Sekundärdaten oder Protokolldatei) normalerweise nicht 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ädigung zu tun haben und irgendwo einen Artikel finden, der einen ersten Schritt zum Trennen enthält - , ist dies falsch - wenn Sie eine beschädigte Datenbank trennen, ist dies der Fall kann es sein. Möglicherweise hängen Sie diese Datenbank nicht erneut an.
  • Das Ausschneiden und Einfügen Ihrer Produktionsdatenbankdateien in Ihrem Netzwerk ist eine Möglichkeit, möglicherweise eine Beschädigung auf Dateiebene einzuführen. Ein weiterer Grund, warum ich bei Migrationen das Sichern/Wiederherstellen bevorzuge.
  • 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 Best Practice zu überprüfen. Dies funktioniert gut, so dass Sie aufhören, darüber nachzudenken. Jemand anderes beschließt dann, eine Datenbank zu verwenden, die er nicht offline verwendet. Der Wartungsplan schlägt ab diesem Zeitpunkt 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 Offline-Datenbank fehlschlägt. Der Wartungsplan schlägt an dem Punkt fehl, an dem versucht wird, die Offline-Datenbank zu sichern, sodass einige Online-Datenbanken möglicherweise nicht gesichert werden. (anderer Autor für diesen Punkt, also mit Argwohn behandeln)

Anhängen - Genau wie Sie keine Skripte aus dem Internet ausführen oder Pakete von Fremden am Flughafen akzeptieren sollten, sollten Sie keine Datenbank anhängen, aus der Sie stammen jemand anderes ohne einige Schritte, um es zu überprüfen. Diese Datenbank kann Code in Triggern, gespeicherten Prozeduren usw. enthalten, der Ihre Umgebung gefährden kann. Sie sollten eine Datenbank, die Sie anhängen möchten, in einer sicheren und Firewall-Umgebung überprüfen, nicht in Ihrem Produktionssystem.

Was ist mit verschiedenen Versionen oder Editionen von SQL Server?

Diese unterscheiden sich nicht von den Regeln zum Wiederherstellen von Datenbanken zwischen Versionen. Sie können im Allgemeinen bis zur nächsten Version für 3 Versionen wiederherstellen (SQL Server 2008 bis SQL Server 2012 funktionieren beispielsweise. SQL Server 2000 bis SQL Server 2012 funktionieren nicht). Sie können überhaupt nicht durch Sichern/Wiederherstellen oder Trennen/Anhängen rückwärts gehen - Sie müssten Objekte ausschreiben 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 Aufwand von Standard nach Enterprise verschieben. Wenn Sie Enterprise-Funktionen verwenden (z. B. Komprimierung oder Partitionierung), müssen Sie diese Funktionen jedoch deaktivieren, bevor Sie den Vorgang ausführen. Sie können sich ein Bild von den Funktionen machen, die Sie deaktivieren müssen, indem Sie hier suchen.

33
Mike Walsh