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

Aktualisiert: 05. Dezember 2005

ms189625.security(de-de,SQL.90).gifSicherheitshinweis:
Es empfiehlt sich nicht, Datenbanken aus unbekannten oder nicht vertrauenswürdigen Quellen anzufügen oder wiederherzustellen. Solche Datenbanken können bösartigen Code enthalten, mit dem möglicherweise unbeabsichtigter Transact-SQL-Code ausgeführt wird oder Fehler verursacht werden, indem das Schema oder die physikalische Datenbankstruktur geändert wird. Bevor Sie eine Datenbank aus einer unbekannten oder nicht vertrauenswürdigen Quelle verwenden, führen Sie in der Datenbank auf einem Nichtproduktionsserver DBCC CHECKDB aus, und überprüfen Sie auch den Code der Datenbank, z. B. gespeicherte Prozeduren oder anderen benutzerdefinierten Code.

In SQL Server 2005 können Sie eine Benutzerdatenbank aus SQL Server, Version 7.0, oder SQL Server 2000 durch Trennen und Anfügen aktualisieren. Es gelten dabei jedoch folgende Einschränkungen:

  • Sicherungen der Datenbanken master, model oder msdb, die mit SQL Server 7.0 oder SQL Server 2000 erstellt wurden, können in SQL Server 2005 nicht angefügt werden.
  • Protokolldateien aus SQL Server 7.0 mit Vorgängen zur Indexerstellung können in SQL Server 2000 oder SQL Server 2005 nicht angefügt werden.
ms189625.note(de-de,SQL.90).gifWichtig:
Datenbanksicherungen, die mit SQL Server 6.5 oder einer früheren Version erstellt wurden, weisen ein inkompatibles Format auf und können in SQL Server 2005 nicht angefügt werden.
  • 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).

Wenn die Schlüsselwörter APPLY, PIVOT, TABLESAMPLE oder UNPIVOT für Datenbanken verwendet werden, die auf SQL Server 2005 aktualisiert werden, muss der Kompatibilitätsgrad der Datenbank auf 90 festgelegt sein. Informationen zum Festlegen des Kompatibilitätsgrades der Datenbank finden Sie unter sp_dbcmptlevel (Transact-SQL).

ms189625.note(de-de,SQL.90).gifWichtig:
In SQL Server 2000 Service Pack 3 (SP3) und höheren Versionen von SQL Server wird durch Trenn- und Anfügevorgänge die datenbankübergreifende Besitzverkettung für die Datenbank deaktiviert, indem die entsprechende Option cross db ownership chaining auf 0 festgelegt wird. Informationen zum Aktivieren der Verkettung finden Sie unter cross db ownership chaining (Option).

Prozeduren

So aktualisieren Sie eine Datenbank durch Trennen und Anfügen

  1. Trennen Sie die Datenbank von der Instanz von SQL Server 7.0 oder SQL Server 2000 mithilfe der gespeicherten Prozedur sp_detach_db.

    Weitere Informationen finden Sie in der SQL Server-Onlinedokumentation für die entsprechende Version von SQL Server.

    ms189625.note(de-de,SQL.90).gifHinweis:
    Diese gespeicherte Prozedur verfügt in SQL Server 2005 über neue Optionen. Weitere Informationen finden Sie unter sp_detach_db (Transact-SQL).
  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. Bewahren Sie daher immer alle getrennten Protokolldateien auf, bis die Datenbank erfolgreich ohne sie angefügt wurde.

    ms189625.note(de-de,SQL.90).gifHinweis:
    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 2005 an. Verwenden Sie dazu die Anweisung CREATE DATABASE mit der Option FOR ATTACH oder FOR ATTACH_REBUILD_LOG.

    ms189625.note(de-de,SQL.90).gifHinweis:
    Informationen zum Anfügen einer SQL Server 2005-Datenbank mithilfe des Objekt-Explorers finden Sie unter Vorgehensweise: Anfügen einer Datenbank (SQL Server Management Studio).
  4. Wir empfehlen, DBCC UPDATEUSAGE für die aktualisierte Datenbank auszuführen.

    In früheren Versionen von SQL Server ist es möglich, dass für die Zeilen- und Seitenanzahl von Tabellen und Indizes falsche Werte entstehen. Deshalb können Datenbanken, die in Versionen vor SQL Server 2005 erstellt wurden, falsche Anzahlwerte enthalten. Nachdem Sie eine Datenbank auf SQL Server 2005 aktualisiert haben, empfiehlt es sich, DBCC UPDATEUSAGE auszuführen, um alle ungültigen Werte zu korrigieren. Die DBCC-Anweisung korrigiert die Anzahl der Zeilen, verwendeten Seiten, reservierten Seiten, Blattseiten und Datenseiten jeder Partition in Tabellen und Indizes. Weitere Informationen finden Sie unter DBCC UPDATEUSAGE (Transact-SQL).

  5. Wenn Sie eine Kopie der Datenbank erstellen (statt sie zu verschieben), haben Sie auch die Möglichkeit, die ursprüngliche Datenbank auf der Instanz von SQL Server 7.0 oder SQL Server 2000 erneut mit der gespeicherten Prozedur sp_attach_db oder sp_attach_single_file_db anzufügen.

    Weitere Informationen finden Sie in der SQL Server-Onlinedokumentation für die entsprechende Version von SQL Server.

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.

Beispiele

Im folgenden Beispiel wird die SQL Server 2000-Datenbank pubs auf eine SQL Server 2005-Datenbank aktualisiert. Dafür werden die Transact-SQL-Anweisungen zum Trennen und Anfügen der Datenbank verwendet.

  1. Stellen Sie in SQL Server 2000 Query Analyzer eine Verbindung mit einer Serverinstanz her, in der pubs angefügt ist, und trennen Sie die Datenbank mithilfe der gespeicherten Prozedur sp_detach_db.

    USE master;
    GO
    EXEC sp_detach_db @dbname = N'pubs';
    GO
    
  2. Kopieren Sie für dieses Beispiel mit einer Methode Ihrer Wahl die pubs-Dateien (pubs.mdf und pubs_log.ldf) aus C:\Programme\Microsoft SQL Server\MSSQL\Data\ (dem Standardspeicherort von pubs in SQL Server 2000) nach C:\Programme\Microsoft SQL Server\MSSQL.1\MSSQL\Data\ (dem Datenverzeichnis von SQL Server 2005).

    ms189625.note(de-de,SQL.90).gifWichtig:
    Platzieren Sie für eine Produktionsdatenbank die Datenbank und das Transaktionsprotokoll auf separaten Datenträgern.
    ms189625.note(de-de,SQL.90).gifHinweis:
    Wenn Sie Dateien über das Netzwerk auf einen Datenträger auf einem Remotecomputer kopieren, verwenden Sie den UNC-Namen (Universal Naming Convention) des Remotespeicherortes. Ein UNC-Name hat das Format \\Servername\Sharename\Path\Filename. Wie zum Schreiben von Dateien auf die lokale Festplatte müssen dem von SQL Server verwendeten Benutzerkonto die Berechtigungen zum Lesen einer Datei bzw. Schreiben in eine Datei auf dem Remotedatenträger erteilt werden.
  3. Fügen Sie die kopierte pubs-Datenbank und optional die Protokolldateien an eine Instanz von SQL Server 2005 an (in diesem Beispiel wird derselbe Datenbankname verwendet). Öffnen Sie in SQL Server Management Studio eine neue Abfrage im Abfrage-Editor, und stellen Sie eine Verbindung mit der Serverinstanz her, an die Sie die Datenbank anfügen möchten.

    ms189625.note(de-de,SQL.90).gifHinweis:
    Weitere Informationen finden Sie unter Transact-SQL-Abfrage in SQL Server Management Studio.

    Führen Sie die folgende CREATE DATABASE-Anweisung aus.

    USE master;
    GO
    CREATE DATABASE pubs ON PRIMARY 
       (FILENAME = 
          'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\pubs.mdf')
       LOG ON (FILENAME = 
          'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\pubs_log.ldf')
       FOR ATTACH;
    GO
    
    ms189625.note(de-de,SQL.90).gifHinweis:
    In SQL Server Management Studio wird eine neu angefügte Datenbank nicht sofort im Objekt-Explorer sichtbar. Klicken Sie zum Anzeigen der Datenbank auf das Fenster des Objekt-Explorers, und wählen Sie Ansicht > Aktualisieren aus. Wenn der Knoten Datenbanken erweitert wird, wird die neu angefügte Datenbank jetzt in der Liste der Datenbanken angezeigt.
  4. Optional können Sie die ursprüngliche pubs-Datenbank mithilfe der gespeicherten Prozedur sp_attach_db erneut an die Instanz von SQL Server 2000 anfügen. Geben Sie in Query Analyzer Folgendes ein:

    USE master;
    Go
    EXEC sp_attach_db @dbname = N'pubs', 
       @filename1 = 
          N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf', 
       @filename2 = 
          N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf';
    GO
    

Siehe auch

Aufgaben

Vorgehensweise: Anfügen einer Datenbank (SQL Server Management Studio)
Vorgehensweise: Aktualisieren auf SQL Server 2005 mit dem Assistenten zum Kopieren von Datenbanken

Konzepte

Trennen und Anfügen von Datenbanken
Sichern von Daten- und Protokolldateien

Andere Ressourcen

CREATE DATABASE (Transact-SQL)
Verwenden des Updateratgebers zur Vorbereitung auf Aktualisierungen

Hilfe und Informationen

Informationsquellen für SQL Server 2005