Vorgehensweise: Aktualisieren einer Datenbank durch Trennen und Anfügen (Transact-SQL)
Sicherheitshinweis |
---|
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 physische 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 2008 können Sie eine Benutzerdatenbank von SQL Server 2000 oder SQL Server 2005 durch Trennen und Anfügen aktualisieren. Nachdem Sie eine SQL Server 2005- oder SQL Server 2000-Datenbank in SQL Server 2008 angefügt haben, ist die Datenbank sofort verfügbar und wird automatisch aktualisiert.
Es gelten dabei jedoch folgende Einschränkungen:
Kopien der Datenbanken master, model oder msdb, die mit SQL Server 2000 oder SQL Server 2005 erstellt wurden, können 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 von SQL Server 2000 auf SQL Server 2008 aktualisiert werden, muss der Kompatibilitätsgrad der Datenbank auf 100 festgelegt sein. Informationen zum Festlegen des Datenbank-Kompatibilitätsgrads finden Sie unter sp_dbcmptlevel (Transact-SQL).
Wichtig 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).
Aktualisierungsoptionen für den Volltextindex
Hinweis |
---|
Nachdem Sie eine SQL Server 2005- oder SQL Server 2000-Datenbank in SQL Server 2008 angefügt haben, ist die Datenbank sofort verfügbar und wird automatisch aktualisiert. In der Datenbank enthaltene Volltextindizes werden bei der Aktualisierung je nach der Einstellung der Servereigenschaft upgrade_optionimportiert, zurückgesetzt oder neu erstellt. Wenn die Aktualisierungsoption auf Importieren (upgrade_option = 2) oder Neuerstellen (upgrade_option = 0) festgelegt ist, sind die Volltextindizes während der Aktualisierung 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 Aktualisierungsoption auf Importieren festgelegt ist und kein Volltextkatalog verfügbar ist, werden die zugehörigen Volltextindizes neu erstellt. Um die Einstellung der Servereigenschaft upgrade_option zu ändern, verwenden Sie sp_fulltext_service. |
Prozeduren
So aktualisieren Sie eine Datenbank durch Trennen und Anfügen
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.
Hinweis Diese gespeicherte Prozedur verfügt in SQL Server 2005 über neue Optionen. Weitere Informationen finden Sie unter sp_detach_db (Transact-SQL).
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.
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).
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.
Hinweis 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).
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).
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.
Datenbank-Kompatibilitätsgrad nach der Aktualisierung
Der Kompatibilitätsgrad der Datenbanken tempdb, model, msdb und Resource wird nach dem Upgrade auf jeweils 100 gesetzt. Die master-Systemdatenbank behält ihren Kompatibilitätsgrad vor dem Upgrade bei, es sei denn, dieser lag unter 80. War der Kompatibilitätsgrad von master vor dem Upgrade geringer als 80, wird er nach dem Upgrade auf 80 gesetzt.
War der Kompatibilitätsgrad einer Benutzerdatenbank vor dem Upgrade 80 oder 90, wird er nach dem Upgrade beibehalten. War der Kompatibilitätsgrad der aktualisierten Datenbank vor dem Upgrade 70, wird er auf 80 gesetzt, was dem niedrigsten unterstützten Kompatibilitätsgrad in SQL Server 2008 entspricht.
Hinweis |
---|
Neue Benutzerdatenbanken erben den Kompatibilitätsgrad der model-Datenbank. |
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.
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
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\MSSQL10.MSSQLSERVER\MSSQL\Data\ (dem Datenverzeichnis von SQL Server 2005).
Wichtig Platzieren Sie für eine Produktionsdatenbank die Datenbank und das Transaktionsprotokoll auf separaten Datenträgern.
Hinweis Wenn Sie Dateien über das Netzwerk auf einen Datenträger auf einem Remotecomputer kopieren, verwenden Sie den UNC-Namen (Universal Naming Convention) des Remotespeicherorts. 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.
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.
Hinweis Weitere Informationen finden Sie unter Abfrage-Editor-Fenster des Datenbankmoduls von 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\MSSQL10.MSSQLSERVER\MSSQL\Data\pubs.mdf') LOG ON (FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\pubs_log.ldf') FOR ATTACH; GO
Hinweis 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.
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