Aktualisieren einer Datenbank durch Trennen und Anfügen (Transact-SQL)

Gilt für: SQL Server

In diesem Thema wird beschrieben, wie Sie Trenn- und Anfügevorgänge verwenden, um eine Datenbank in SQL Server zu aktualisieren. Nach dem Anfügen an SQL Server ist die Datenbank sofort verfügbar und wird automatisch aktualisiert. Dies verhindert, dass die Datenbank mit einer älteren Version der Datenbank-Engine verwendet wird. Die Aktualisierung der Metadaten besitzt jedoch keine Auswirkungen auf die Einstellung Datenbank-Kompatibilitätsgrad einer Datenbank. Weitere Informationen finden Sie unter Datenbank-Kompatibilitätsgrad nach dem Upgrade weiter unten in diesem Thema.

Inhalt

Vorbereitungen

Einschränkungen

  • Die Systemdatenbanken können nicht angefügt werden.

  • Durch das Anfügen und Trennen wird die datenbankübergreifende Besitzverkettung für die Datenbank deaktiviert, da deren Option datenbankübergreifende Besitzverkettung auf 0 festgelegt wird. Informationen zum Aktivieren der Verkettung finden Sie unter Datenbankübergreifende Besitzverkettung (Serverkonfigurationsoption).

  • Wenn Sie eine replizierte Datenbank anfügen, die nicht getrennt, sondern kopiert wurde:

    • Wenn Sie die Datenbank an eine aktualisierte Version derselben Serverinstanz anfügen, müssen Sie sp_vupgrade_replication ausführen, um die Replikation zu aktualisieren, nachdem der Anfügevorgang abgeschlossen wurde. Weitere Informationen finden Sie unter sp_vupgrade_replication (Transact-SQL).

    • Wenn Sie die Datenbank an eine andere Serverinstanz anfügen, müssen Sie (unabhängig von der Version) sp_removedbreplication ausführen, um die Replikation zu entfernen, nachdem der Anfügevorgang abgeschlossen wurde. Weitere Informationen finden Sie unter sp_removedbreplication (Transact-SQL).

Empfehlungen

Vom Anfügen oder Wiederherstellen von Datenbanken aus unbekannten oder nicht vertrauenswürdigen Quellen wird abgeraten. Solche Datenbanken können schädlichen Code enthalten, der möglicherweise unbeabsichtigten Transact-SQL -Code ausführt oder Fehler verursacht, indem er das Schema oder die physische Datenbankstruktur ändert. Bevor Sie eine Datenbank aus einer unbekannten oder nicht vertrauenswürdigen Quelle verwenden, führen Sie auf einem Nichtproduktionsserver DBCC CHECKDB für die Datenbank aus. Überprüfen Sie außerdem den Code in der Datenbank, z.B. gespeicherte Prozeduren oder anderen benutzerdefinierten Code.

So aktualisieren Sie eine Datenbank durch Trennen und Anfügen

  1. Trennen Sie die Datenbank. Weitere Informationen finden Sie unter Trennen einer Datenbank.

  2. Optional können Sie die getrennte(n) Datenbankdatei(en) und die Protokolldatei(en) verschieben.

    Sie sollten die Protokolldateien zusammen mit den Datendateien verschieben, auch wenn Sie neue Protokolldateien erstellen möchten. In manchen Fällen sind zum erneuten Anfügen der Datenbank die vorhandenen Protokolldateien erforderlich. Deshalb sollten Sie immer alle getrennten Protokolldateien behalten, bis die Datenbank ohne sie erfolgreich angefügt wurde.

    Hinweis

    Wenn Sie versuchen, die Datenbank ohne Angabe der Protokolldatei anzufügen, wird die Protokolldatei an ihrem ursprünglichen Speicherort gesucht. Ist die ursprüngliche Kopie des Protokolls an diesem Speicherort noch vorhanden, wird diese Kopie angefügt. Wenn Sie die Verwendung der ursprünglichen Protokolldatei verhindern möchten, geben Sie entweder den Pfad der neuen Protokolldatei an, oder entfernen Sie die ursprüngliche Kopie der Protokolldatei (nachdem Sie sie an einen neuen Speicherort kopiert haben).

  3. Fügen Sie die kopierten Dateien an die SQL Server-Instanz an. Weitere Informationen finden Sie unter Attach a Database.

Beispiel

Im folgenden Beispiel wird eine Kopie einer Datenbank aus einer früheren Version von SQL Server aktualisiert. Die Transact SQL-Anweisungen werden in einem Abfrage-Editorfenster ausgeführt, das mit der Serverinstanz verbunden ist, an die es angefügt ist.

  1. Führen Sie die folgenden Transact SQL-Anweisungen aus, um die Datenbank zu trennen:

    USE master;  
    GO  
    EXEC sp_detach_db @dbname = N'MyDatabase';  
    GO  
    
  2. Kopieren Sie die Daten- und Protokolldateien an den neuen Speicherort, indem Sie die von Ihnen bevorzugte Vorgehensweise verwenden.

    Wichtig

    Für eine Produktionsdatenbank sollten Sie die Datenbank und das Transaktionsprotokoll vorzugsweise auf getrennten Datenträgern platzieren. Da beide zu unterschiedlichen Anforderungen an E/A und Dateiwachstum führen, gilt es als bewährte Methode, sie getrennt zu halten.

    Um Dateien im Netzwerk auf einen Datenträger auf einem Remotecomputer zu kopieren, verwenden Sie den UNC-Namen (Universal Naming Convention) des Remotespeicherorts. Ein UNC nimmt das Format \\Servername\Sharename\Path\Filename an. Wie beim Schreiben von Dateien auf die lokale Festplatte müssen die entsprechenden Berechtigungen für das Lesen oder Schreiben einer Datei auf dem Remotedatenträger dem von der SQL Server-Instanz verwendeten Benutzerkonto erteilt werden.

  3. Führen Sie die folgende Transact SQL-Anweisung aus, um die verschobene Datenbank und optional das zugehörige Protokoll anzufügen:

    USE master;  
    GO  
    CREATE DATABASE MyDatabase   
        ON (FILENAME = 'C:\MySQLServer\MyDatabase.mdf'),  
        (FILENAME = 'C:\MySQLServer\Database.ldf')  
        FOR ATTACH;  
    GO  
    

    In SQL Server Management Studio ist eine neu angefügte Datenbank nicht sofort im Objekt-Explorer sichtbar. Um die Datenbank anzuzeigen, klicken Sie im Objekt-Explorer im Menü Ansicht auf Aktualisieren. Wenn der Datenbanken -Knoten im Objekt-Explorer erweitert wird, wird nun die neu angefügte Datenbank in der Liste der Datenbanken angezeigt.

Nachverfolgung: Nach dem Aktualisieren einer SQL Server-Datenbank

Wenn die Datenbank Volltextindizes aufweist, werden diese beim Upgrade entweder importiert, zurückgesetzt oder neu erstellt, je nach der Einstellung der Servereigenschaft upgrade_option . Wenn die Upgradeoption auf „Importieren“ (upgrade_option = 2) oder „Neu erstellen“ (upgrade_option = 0) festgelegt ist, sind die Volltextindizes während des Upgrades nicht verfügbar. Je nach Menge der indizierten Daten kann der Importvorgang mehrere Stunden dauern; die Neuerstellung sogar bis zu zehnmal länger. Wenn die Upgradeoption auf Importieren festgelegt ist und kein Volltextkatalog verfügbar ist, werden die zugehörigen Volltextindizes neu erstellt. Verwenden Sie sp_fulltext_service , um die Einstellung der Servereigenschaft upgrade_optionzu ändern.

Datenbank-Kompatibilitätsgrad nach dem Upgrade

Nach dem Upgrade verbleibt der Datenbank-Kompatibilitätsgrad auf dem Kompatibilitätsgrad vor dem Upgrade, es sei denn, der vorherige Kompatibilitätsgrad wird in der neuen Version nicht unterstützt. In diesem Fall wird der Datenbank-Kompatibilitätsgrad, für den ein Upgrade durchgeführt wurde, auf den niedrigsten unterstützten Kompatibilitätsgrad festgelegt.

Wenn Sie beispielsweise eine Datenbank anfügen, die vor dem Anfügen an eine SQL Server-Instanz 2019 (15.x) den Kompatibilitätsgrad 90 hatte, wird der Kompatibilitätsgrad nach dem Upgrade auf 100 festgelegt, also auf den niedrigsten in SQL Server 2019 (15.x) unterstützten Kompatibilitätsgrad. Weitere Informationen finden Sie unter ALTER DATABASE-Kompatibilitätsgrad (Transact-SQL).

Verwalten von Metadaten auf der aktualisierten Serverinstanz

Wenn Sie eine Datenbank an eine andere Serverinstanz anfügen, müssen Sie möglicherweise einen Teil oder auch alle Metadaten für die Datenbank (z. B. Anmeldenamen, Aufträge und Berechtigungen) auf der anderen Serverinstanz erneut erstellen, um Benutzern und Anwendungen ein konsistentes Verhalten bereitzustellen. Weitere Informationen finden Sie unter Verwalten von Metadaten beim Bereitstellen einer Datenbank auf einer anderen Serverinstanz (SQL Server).

Die Verschlüsselung des Diensthauptschlüssels und Datenbank-Hauptschlüssels wird von 3DES in AES geändert.

SQL Server 2012 (11.x) und neuere Versionen schützen den Diensthauptschlüssel (Service Master Key, SMK) und den Datenbank-Hauptschlüssel (Database Master Key, DMK) mithilfe des AES-Verschlüsselungsalgorithmus. AES ist ein neuerer Verschlüsselungsalgorithmus als der in früheren Versionen verwendete 3DES-Algorithmus. Wird eine Datenbank zum ersten Mal an eine neue Instanz von SQL Serverangefügt oder wiederhergestellt, ist noch keine Kopie des Datenbank-Hauptschlüssels (verschlüsselt vom Diensthauptschlüssel) auf dem Server gespeichert. Der Datenbank-Hauptschlüssel (Database Master Key, DMK) muss mithilfe der OPEN MASTER KEY-Anweisung entschlüsselt werden. Nachdem der Datenbank-Hauptschlüssel entschlüsselt wurde, können Sie für die Zukunft die automatische Entschlüsselung aktivieren, indem Sie die ALTER MASTER KEY REGENERATE-Anweisung verwenden. Auf diese Weise können Sie eine Kopie des mit dem Diensthauptschlüssel (Service Master Key, SMK) verschlüsselten Datenbank-Hauptschlüssels für den Server bereitstellen. Wenn eine Datenbank von einer früheren Version aktualisiert wurde, sollte der DMK neu generiert werden, damit er den neueren AES-Algorithmus verwendet. Weitere Informationen zum Neugenerieren des DMK finden Sie unter ALTER MASTER KEY (Transact-SQL). Die zum Neugenerieren des DMK zum Upgrade auf AES erforderliche Zeit hängt von der Anzahl der Objekte ab, die durch den DMK geschützt werden. Der DMK muss nur einmal auf AES aktualisiert und neu generiert werden. Dies hat keine Auswirkungen auf zukünftige Neugenerierungen im Rahmen einer Schlüsselrotationsstrategie.