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

Gilt für:SQL Server

In diesem Thema wird beschrieben, wie Sie Trennen und Anfügen von Vorgängen zum Upgrade einer Datenbank in SQL Server verwenden. Nach dem Anfügen an SQL Server ist die Datenbank sofort verfügbar und wird automatisch aktualisiert. Dadurch wird verhindert, dass die Datenbank mit einer älteren Version des Datenbankmoduls 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.

In diesem Thema

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 Instanz von SQL Server 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-Editor-Fenster ausgeführt, das mit der Serverinstanz verbunden ist, an die angefügt wird.

  1. Trennen Sie die Datenbank, indem Sie die folgenden Transact-SQL-Anweisungen ausführen:

    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, die zum Lesen oder Schreiben in eine Datei auf dem Remotedatenträger erforderlich sind, dem Benutzerkonto gewährt werden, das von der SQL Server-Instanz verwendet wird.

  3. Fügen Sie die verschobene Datenbank und optional ihr Protokoll an, indem Sie die folgende Transact-SQL-Anweisung ausführen:

    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 im Objekt-Explorer nicht sofort 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 Kompatibilitätsebene 90 war, bevor Sie sie an eine Instanz von SQL Server 2019 (15.x) anfügen, wird nach dem Upgrade die Kompatibilitätsstufe auf 100 festgelegt, was die niedrigste unterstützte Kompatibilitätsstufe in SQL Server 2019 (15.x) ist. 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 höhere Versionen verwenden den AES-Verschlüsselungsalgorithmus, um den Dienstmasterschlüssel (SMK) und den Datenbankmasterschlüssel (DMK) zu schützen. 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.