it-swarm.com.de

Wie in eine andere Datenbank in SQL Server wiederherstellen?

Ich habe eine Sicherung von Database1 vor einer Woche. Die Sicherung erfolgt wöchentlich im Scheduler und ich erhalte eine .bak - Datei. Jetzt möchte ich mit einigen Daten fummeln, damit ich sie in einer anderen Datenbank wiederherstellen kann - Database2 .

Ich habe diese Frage gesehen: Wiederherstellen der SQL Server-Datenbank in demselben PC mit unterschiedlichem Namen und der empfohlene Schritt ist, die ursprüngliche Datenbank umzubenennen, aber ich habe diese Option nicht, da ich auf dem Produktionsserver bin und ich kann es nicht wirklich tun.

Gibt es eine andere Möglichkeit, es auf Database2 Oder zumindest, wiederherzustellen, wie kann ich die Daten dieser .bak-Datei durchsuchen?

vielen Dank.

ps: die zweite antwort vom obigen link sah vielversprechend aus, endet aber immer wieder mit fehler:

Wiederherstellungs-Dateiliste wird abnormal beendet

209
LocustHorde

Sie können eine neue Datenbank erstellen und dann den "Wiederherstellungsassistenten" verwenden, indem Sie die Option "Überschreiben" aktivieren.

Inhalt anzeigen;

RESTORE FILELISTONLY FROM DISK='c:\your.bak'

notieren Sie sich die logischen Namen der .mdf & .ldf aus den Ergebnissen, dann;

RESTORE DATABASE MyTempCopy FROM DISK='c:\your.bak'
WITH 
   MOVE 'LogicalNameForTheMDF' TO 'c:\MyTempCopy.mdf',
   MOVE 'LogicalNameForTheLDF' TO 'c:\MyTempCopy_log.ldf'

So erstellen Sie die Datenbank MyTempCopy mit dem Inhalt von your.bak.

Beispiel (stellt eine Sicherung einer Datenbank mit dem Namen "creditline" in "MyTempCopy" wieder her;

RESTORE FILELISTONLY FROM DISK='e:\mssql\backup\creditline.bak'

>LogicalName
>--------------
>CreditLine
>CreditLine_log

RESTORE DATABASE MyTempCopy FROM DISK='e:\mssql\backup\creditline.bak'
WITH 
   MOVE 'CreditLine' TO 'e:\mssql\MyTempCopy.mdf',
   MOVE 'CreditLine_log' TO 'e:\mssql\MyTempCopy_log.ldf'

>RESTORE DATABASE successfully processed 186 pages in 0.010 seconds (144.970 MB/sec).
285
Alex K.

SQL Server 2008 R2:

Führen Sie für eine vorhandene Datenbank, die Sie wiederherstellen möchten, die folgenden Schritte aus:

  1. Klicken Sie in der Symbolleiste auf die Schaltfläche Aktivitätsüberwachung.
  2. Klicken Sie auf Prozesse. Filtern Sie nach der Datenbank, die Sie wiederherstellen möchten. Beenden Sie alle laufenden Prozesse, indem Sie mit der rechten Maustaste auf jeden Prozess klicken und "Prozess beenden" auswählen.
  3. Klicken Sie mit der rechten Maustaste auf die Datenbank, die Sie wiederherstellen möchten, und wählen Sie Aufgaben -> Wiederherstellen -> Aus Datenbank.
  4. Aktivieren Sie das Optionsfeld "Vom Gerät:".
  5. Wählen Sie ... und wählen Sie die Sicherungsdatei der anderen Datenbank, aus der Sie wiederherstellen möchten.
  6. Wählen Sie den Sicherungssatz aus, aus dem Sie wiederherstellen möchten, indem Sie das Kontrollkästchen links neben dem Sicherungssatz aktivieren.
  7. Wähle Optionen".
  8. Wählen Sie Vorhandene Datenbank überschreiben (WITH REPLACE).
  9. Wichtig: Ändern Sie den "Wiederherstellen als" -Zeilendatendateinamen in den Dateinamen der vorhandenen Datenbank, die Sie überschreiben möchten, oder geben Sie ihm einfach einen neuen Namen.
  10. Machen Sie dasselbe mit der Protokolldatei Dateiname.
  11. Vergewissern Sie sich im Aktivitätsmonitor, dass keine neuen Prozesse erstellt wurden. Wenn sie es wären, töte sie.
  12. OK klicken.
64
Daniel Byrne

Für SQL Server 2012 mit SQL Server Management Studio fand ich diese Schritte von der Microsoft-Seite hilfreich, um eine andere Datenbankdatei und einen anderen Namen wiederherzustellen: (ref: http://technet.Microsoft.com/en-us /library/ms175510.aspx )

Hinweis Schritte 4 und 7 müssen unbedingt eingestellt werden, damit die vorhandene Datenbank nicht überschrieben wird.


So stellen Sie eine Datenbank an einem neuen Speicherort wieder her und benennen Sie die Datenbank optional um

  1. Stellen Sie eine Verbindung zur entsprechenden Instanz des SQL Server-Datenbankmoduls her, und klicken Sie dann im Objekt-Explorer auf den Servernamen, um die Serverstruktur zu erweitern.
  2. Klicken Sie mit der rechten Maustaste auf Datenbanken , und klicken Sie dann auf Datenbank wiederherstellen . Das Dialogfeld Datenbank wiederherstellen wird geöffnet.
  3. Verwenden Sie auf der Seite Allgemein den Abschnitt Quelle , um die Quelle und anzugeben Speicherort der wiederherzustellenden Sicherungssätze. Wählen Sie eine der folgenden Optionen:

    • Datenbank

      • Wählen Sie die wiederherzustellende Datenbank aus der Dropdown-Liste aus. Die Liste enthält nur Datenbanken, die gemäß dem msdb Sicherungsverlauf gesichert wurden.

        Hinweis Wenn die Sicherung von einem anderen Server stammt, verfügt der Zielserver nicht über die Sicherungsverlaufsinformationen für die angegebene Datenbank. Wählen Sie in diesem Fall Gerät, um die wiederherzustellende Datei oder das wiederherzustellende Gerät manuell anzugeben.

    • Gerät

      • Klicken Sie auf die Schaltfläche zum Durchsuchen (...), um das Dialogfeld Sicherungsgeräte auswählen zu öffnen. Wählen Sie im Feld Sicherungsmedientyp einen der aufgeführten Gerätetypen aus. Um ein oder mehrere Geräte für das Feld Sicherungsmedium auszuwählen, klicken Sie auf Hinzufügen . Nachdem Sie die gewünschten Geräte zum Listenfeld Sicherungsmedien hinzugefügt haben, klicken Sie auf [~ # ~] ok [~ # ~] , um zur Seite Allgemein zurückzukehren. Wählen Sie im Listenfeld Quelle: Gerät: Datenbank den Namen der Datenbank aus, die wiederhergestellt werden soll.

        Hinweis Diese Liste ist nur verfügbar, wenn Gerät ausgewählt ist. Nur Datenbanken mit Sicherungen auf dem ausgewählten Gerät sind verfügbar.

  4. Im Abschnitt Ziel wird das Feld Datenbank automatisch mit dem Namen gefüllt der wiederherzustellenden Datenbank. Um den Namen der Datenbank zu ändern, geben Sie den neuen Namen in das Feld Datenbank ein.
  5. Übernehmen Sie im Feld Wiederherstellen in den Standardwert Für die zuletzt erstellte Sicherung oder klicken Sie auf Timeline , um das Dialogfeld Backup Timeline manuell aufzurufen Wählen Sie einen Zeitpunkt aus, zu dem die Wiederherstellungsaktion beendet werden soll.
  6. Wählen Sie im Raster Zu wiederherstellende Sicherungssätze die wiederherzustellenden Sicherungen aus. In diesem Raster werden die für den angegebenen Speicherort verfügbaren Sicherungen angezeigt. Standardmäßig wird ein Wiederherstellungsplan vorgeschlagen. Um den vorgeschlagenen Wiederherstellungsplan zu überschreiben, können Sie die Auswahl im Raster ändern. Sicherungen, die von der Wiederherstellung einer früheren Sicherung abhängen, werden automatisch abgewählt, wenn die frühere Sicherung abgewählt wird.
  7. Um den neuen Speicherort der Datenbankdateien anzugeben, wählen Sie die Seite Dateien und klicken Sie dann auf Alle Dateien in Ordner verschieben . Geben Sie einen neuen Speicherort für den Ordner Datendatei und Protokolldatei an. Alternativ können Sie dieselben Ordner beibehalten und einfach die Namen der Datenbank und der Protokolldatei umbenennen.
40
Rots

Tatsächlich ist es nicht erforderlich, die Datenbank in nativen SQL Server-Begriffen wiederherzustellen, da Sie "mit einigen Daten fummeln" und "die Daten dieser .bak-Datei durchsuchen" möchten.

Sie können ApexSQL Restore - ein SQL Server-Tool verwenden, das sowohl native als auch native Anhänge anfügt komprimierte SQL-Datenbanksicherungen und Transaktionsprotokollsicherungen als Live-Datenbanken , auf die über SQL Server Management Studio, Visual Studio oder ein anderes Tool von Drittanbietern zugegriffen werden kann. Sie können einzelne oder mehrere vollständige, differenzielle und Transaktionsprotokollsicherungen anhängen

Darüber hinaus denke ich, dass Sie die Arbeit erledigen können, während sich das Tool im voll funktionsfähigen Testmodus befindet (14 Tage).

Haftungsausschluss: Ich arbeite als Product Support Engineer bei ApexSQL

34
Ivan Stankovic

Hier ist, was ich aus verschiedenen Beiträgen zusammengeschustert habe, um eine Datenbank mithilfe von Sicherung und Wiederherstellung mit Verschieben zu kopieren, um den physischen Speicherort zu reparieren, und zusätzlichen SQL-Code, um den logischen Namen zu fixieren.

/**
 * Creates (or resets) a Database to a copy of the template database using backup and restore.
 *
 * Usage: Update the @NewDatabase value to the database name to create or reset.
 */

DECLARE @NewDatabase SYSNAME = 'new_db';

-- Set up
USE tempdb;

DECLARE @TemplateBackups SYSNAME = 'TemplateBackups';
DECLARE @TemplateDatabase SYSNAME = 'template_db';
DECLARE @TemplateDatabaseLog SYSNAME = @TemplateDatabase + '_log';

-- Create a backup of the template database
BACKUP DATABASE @TemplateDatabase TO DISK = @TemplateBackups WITH CHECKSUM, COPY_ONLY, FORMAT, INIT, STATS = 100;

-- Get the backup file list as a table variable
DECLARE @BackupFiles TABLE(LogicalName nvarchar(128),PhysicalName nvarchar(260),Type char(1),FileGroupName nvarchar(128),Size numeric(20,0),MaxSize numeric(20,0),FileId tinyint,CreateLSN numeric(25,0),DropLSN numeric(25, 0),UniqueID uniqueidentifier,ReadOnlyLSN numeric(25,0),ReadWriteLSN numeric(25,0),BackupSizeInBytes bigint,SourceBlockSize int,FileGroupId int,LogGroupGUID uniqueidentifier,DifferentialBaseLSN numeric(25,0),DifferentialBaseGUID uniqueidentifier,IsReadOnly bit,IsPresent bit,TDEThumbprint varbinary(32));
INSERT @BackupFiles EXEC('RESTORE FILELISTONLY FROM DISK = ''' + @TemplateBackups + '''');

-- Create  the backup file list as a table variable
DECLARE @NewDatabaseData VARCHAR(MAX);
DECLARE @NewDatabaseLog VARCHAR(MAX);

SELECT @NewDatabaseData = PhysicalName FROM @BackupFiles WHERE Type = 'D';
SELECT @NewDatabaseLog = PhysicalName FROM @BackupFiles WHERE Type = 'L';

SET @NewDatabaseData = REPLACE(@NewDatabaseData, @TemplateDatabase, @NewDatabase);
SET @NewDatabaseLog = REPLACE(@NewDatabaseLog, @TemplateDatabase, @NewDatabase);

RESTORE DATABASE @NewDatabase FROM DISK = @TemplateBackups WITH CHECKSUM, RECOVERY, REPLACE, STATS = 100,
   MOVE @TemplateDatabase TO @NewDatabaseData,
   MOVE @TemplateDatabaseLog TO @NewDatabaseLog;

-- Change Logical File Name
DECLARE @SQL_SCRIPT VARCHAR(MAX)='
    ALTER DATABASE [{NewDatabase}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    ALTER DATABASE [{NewDatabase}] MODIFY FILE (NAME=N''{TemplateDatabase}'', NEWNAME=N''{NewDatabase}'');
    ALTER DATABASE [{NewDatabase}] MODIFY FILE (NAME=N''{TemplateDatabase}_log'', NEWNAME=N''{NewDatabase}_log'');
    ALTER DATABASE [{NewDatabase}] SET MULTI_USER WITH ROLLBACK IMMEDIATE;
    SELECT name AS logical_name, physical_name FROM SYS.MASTER_FILES WHERE database_id = DB_ID(N''{NewDatabase}'');
';
SET @SQL_SCRIPT = REPLACE(@SQL_SCRIPT, '{TemplateDatabase}', @TemplateDatabase);
SET @SQL_SCRIPT = REPLACE(@SQL_SCRIPT, '{NewDatabase}', @NewDatabase);
EXECUTE (@SQL_SCRIPT);
7
Nathan Niesen

Es ist tatsächlich ein bisschen einfacher als das Wiederherstellen auf demselben Server. Grundsätzlich gehen Sie einfach die "Datenbank wiederherstellen" -Optionen durch. Hier ist ein Tutorial für Sie:

http://www.techrepublic.com/blog/window-on-windows/how-do-i-restore-a-sql-server-database-to-a-new-server/454

Vor allem, da es sich um eine Wiederherstellung außerhalb der Produktionsphase handelt, können Sie sie problemlos ausprobieren, ohne sich über die Details Gedanken machen zu müssen. Platzieren Sie Ihre SQL-Dateien auf Ihrem neuen Server an der gewünschten Stelle und geben Sie den gewünschten Namen ein, und schon können Sie loslegen.

3
IAmTimCorey

Wenn keine Datenbank vorhanden ist, verwende ich den folgenden Code:

ALTER PROCEDURE [dbo].[RestoreBackupToNewDB]    
         @pathToBackup  varchar(500),--where to take backup from
         @pathToRestoreFolder  varchar(500), -- where to put the restored db files 
         @newDBName varchar(100)
    AS
    BEGIN

            SET NOCOUNT ON
            DECLARE @fileListTable TABLE (
            [LogicalName]           NVARCHAR(128),
            [PhysicalName]          NVARCHAR(260),
            [Type]                  CHAR(1),
            [FileGroupName]         NVARCHAR(128),
            [Size]                  NUMERIC(20,0),
            [MaxSize]               NUMERIC(20,0),
            [FileID]                BIGINT,
            [CreateLSN]             NUMERIC(25,0),
            [DropLSN]               NUMERIC(25,0),
            [UniqueID]              UNIQUEIDENTIFIER,
            [ReadOnlyLSN]           NUMERIC(25,0),
            [ReadWriteLSN]          NUMERIC(25,0),
            [BackupSizeInBytes]     BIGINT,
            [SourceBlockSize]       INT,
            [FileGroupID]           INT,
            [LogGroupGUID]          UNIQUEIDENTIFIER,
            [DifferentialBaseLSN]   NUMERIC(25,0),
            [DifferentialBaseGUID]  UNIQUEIDENTIFIER,
            [IsReadOnly]            BIT,
            [IsPresent]             BIT,
            [TDEThumbprint]         VARBINARY(32) -- remove this column if using SQL 2005
            )
            INSERT INTO @fileListTable EXEC('RESTORE FILELISTONLY FROM DISK ='''+ @pathToBackup+'''')
            DECLARE @restoreDatabaseFilePath NVARCHAR(500)
            DECLARE @restoreLogFilePath NVARCHAR(500)
            DECLARE @databaseLogicName NVARCHAR(500)
            DECLARE @logLogicName NVARCHAR(500)
            DECLARE @pathSalt uniqueidentifier = NEWID()

            SET @databaseLogicName = (SELECT LogicalName FROM @fileListTable WHERE [Type]='D') 
            SET @logLogicName = (SELECT LogicalName FROM @fileListTable WHERE [Type]='L')           
            SET @restoreDatabaseFilePath= @pathToRestoreFolder + @databaseLogicName + convert(nvarchar(50), @pathSalt) + '.mdf'
            SET @restoreLogFilePath= @pathToRestoreFolder + @logLogicName + convert(nvarchar(50), @pathSalt) + '.ldf'

            RESTORE DATABASE @newDBName FROM [email protected]     
            WITH 
               MOVE @databaseLogicName TO @restoreDatabaseFilePath,
               MOVE @logLogicName TO @restoreLogFilePath

            SET NOCOUNT OFF
    END
2
  • Ich habe den gleichen Fehler wie in diesem Thema, wenn ich eine neue Datenbank mithilfe einer alten Datenbank wiederherstelle. (Verwendung von .bak gibt den gleichen Fehler)

  • Ich änderte den Namen der alten Datenbank durch den Namen der neuen Datenbank (das gleiche Bild). Es funktionierte.

enter image description here

1
Nguyen Duc Hai

Hier erfahren Sie, wie Sie eine Sicherung als zusätzliche Datenbank mit einem eindeutigen Datenbanknamen wiederherstellen.

Für SQL 2005 funktioniert dies sehr schnell. Ich bin sicher, dass neuere Versionen genauso funktionieren werden.

Zunächst müssen Sie Ihre ursprüngliche Datenbank nicht offline schalten. Aber aus Sicherheitsgründen mag ich. In meinem Beispiel werde ich einen Klon meiner "Abrechnungs" -Datenbank bereitstellen, der den Namen "Abrechnungsklon" erhält.

1) Erstellen Sie eine gute Sicherungskopie der Abrechnungsdatenbank

2) Aus Sicherheitsgründen habe ich das Original folgendermaßen offline geschaltet:

3) Öffnen Sie ein neues Abfragefenster

**WICHTIG! Lassen Sie dieses Abfragefenster geöffnet, bis Sie fertig sind! Sie müssen die Datenbank aus diesem Fenster wiederherstellen!

Geben Sie nun den folgenden Code ein:

-- 1) free up all USER databases
USE master;
GO
-- 2) kick all other users out:
ALTER DATABASE billing SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
-- 3) prevent sessions from re-establishing connection:
ALTER DATABASE billing SET OFFLINE;

3) Klicken Sie anschließend in Management Studio im Objekt-Explorer auf "Datenbanken" und wählen Sie "Datenbank wiederherstellen".

4) Geben Sie einen neuen Namen in das Feld "Zur Datenbank" ein. I.E. Abrechnungsklon

5) Klicken Sie unter Quelle für Wiederherstellung auf "Vom Gerät" und dann auf die Schaltfläche ... navigieren

6) Klicken Sie auf Hinzufügen und navigieren Sie zu Ihrer Sicherung

7) Aktivieren Sie das Kontrollkästchen "Wiederherstellen" (Wählen Sie die wiederherzustellenden Sicherungssätze aus.)

8) Wählen Sie als nächstes die Seite OPTIONEN in der oberen LH Ecke

9) Bearbeiten Sie nun die Datenbankdateinamen in RESTORE AS. Tun Sie dies sowohl für die Datenbank als auch für das Protokoll. I.E. billingclone.mdf und billingclone_log.ldf

10) Klicken Sie jetzt auf OK und warten Sie, bis die Aufgabe abgeschlossen ist.

11) Klicken Sie auf Aktualisieren in Ihrem Objekt-Explorer und Sie werden Ihre neue Datenbank sehen

12) Jetzt können Sie Ihre Rechnungsdatenbank wieder online stellen. Verwenden Sie dasselbe Abfragefenster, in dem Sie die Abrechnung offline geschaltet haben. Verwenden Sie diesen Befehl:

-- 1) free up all USER databases
USE master; GO
-- 2) restore access to all users:
ALTER DATABASE billing SET MULTI_USER WITH ROLLBACK IMMEDIATE;GO
-- 3) put the db back online:
ALTER DATABASE billing SET ONLINE;

getan!

1
gim