Comment restaurer une base de données différente dans sql server?

j'ai une copie de sauvegarde de Database1 d'il y a une semaine. La sauvegarde se fait toutes les semaines dans le scheduler et je reçois un fichier .bak . Maintenant je veux bricoler avec quelques données donc je dois le restaurer à une base de données différente- Database2 .

j'ai vu cette question: restaurer la base de données du serveur SQL dans le même pc avec le nom différent et l'étape recommandée est de renommer la base de données originale, mais je ne suis pas cette option comme je suis dans le serveur de production et je ne peux pas vraiment le faire.

Existe-t-il un autre moyen de le restaurer à Database2 , ou du moins, Comment puis-je parcourir les données de cela .le dossier bak?

merci.

ps: la deuxième réponse du lien ci-dessus semble prometteuse mais elle se termine toujours par une erreur:

Restaurer la liste de Fichiers est terminé anormalement

182
demandé sur Community 2011-06-07 19:04:11

9 réponses

vous pouvez créer une nouvelle base de données puis utiliser le "restaure Wizard" en activant l'option Overwrite ou;

voir le contenu;

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

notez les noms logiques du .MDF. & ldf à partir des résultats, alors;

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

pour créer la base de données MyTempCopy avec le contenu de your.bak .

Exemple (restaure une sauvegarde d'une base de données appelée "creditline' à 'MyTempCopy';

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).
252
répondu Alex K. 2016-02-01 15:48:34

SQL Server 2008 R2:

pour une base de données existante que vous souhaitez "restaurer: à partir d'une sauvegarde d'une base de données différente suivre les étapes suivantes:

  1. de la barre d'Outils, cliquez sur le bouton "Moniteur d'activité".
  2. cliquez sur processus. Filtre par la base de données que vous voulez restaurer. Tuer tous les processus en cours d'exécution par un clic droit sur chaque processus et en sélectionnant "tuer le processus".
  3. clic droit sur la base de données vous souhaitez restaurer, et sélectionner Tasks-- > Restore-- > à partir de la base de données.
  4. sélectionnez le bouton radio" From Device:".
  5. sélectionner ... et choisissez le fichier de sauvegarde de la base de données que vous souhaitez restaurer à partir d'.
  6. sélectionnez le jeu de sauvegarde que vous souhaitez restaurer en sélectionnant la case à gauche du jeu de sauvegarde.
  7. Sélectionnez"Options".
  8. sélectionnez Remplacer la base de données existante (avec REMPLACER) Important:
  9. changez le nom du fichier de données" restaurer Sous " au nom du fichier de la base de données existante que vous souhaitez écraser ou juste lui donner un nouveau nom.
  10. faites la même chose avec le nom du fichier journal.
  11. vérifier à partir de l'écran du moniteur d'activité qu'aucun nouveau processus n'a été généré. Si elles l'étaient, les tuer.
  12. cliquez sur OK.
60
répondu Daniel Byrne 2017-09-22 19:34:39

pour SQL Server 2012, en utilisant Sql Server Management Studio, j'ai trouvé ces étapes de la page Microsoft utiles pour restaurer à un fichier de base de données différent et le nom: (réf: http://technet.microsoft.com/en-us/library/ms175510.aspx )

Note les étapes 4 et 7 sont importantes à définir afin de ne pas écraser la base de données existante.


Pour restaurer une base de données à un nouvel emplacement, et éventuellement renommer la base de données

  1. connectez-vous à L'instance appropriée du moteur de base de données SQL Server, puis dans L'Explorateur D'objets, cliquez sur le nom du serveur pour étendre le serveur de l'arborescence.
  2. clic droit bases de données , puis cliquez sur restaurer la base de données . La boîte de dialogue restaurer la base de données ouvre la boîte.
  3. sur la page General , utilisez la section Source pour préciser la source et l'emplacement des ensembles de sauvegarde à restaurer. Sélectionnez l'une des options suivantes:

    • base de données

      • sélectionnez la base de données à restaurer dans la liste déroulante. La liste ne contient que des bases de données qui ont été soutenus selon le la base de données msdb historique de sauvegarde.

        Note si la sauvegarde est prise à partir d'un autre serveur, le serveur de destination n'aura pas les informations d'historique de sauvegarde pour la base de données spécifiée. Dans ce cas, sélectionner un Périphérique manuellement spécifiez le fichier ou le périphérique à restaurer.

    • dispositif

      • Cliquez sur le bouton (...) pour ouvrir la boîte de dialogue sélectionner les périphériques de sauvegarde . Dans la boîte Type de média de sauvegarde , sélectionnez l'une des options suivantes: les types d'appareils énumérés. Pour sélectionner un ou plusieurs dispositifs support de Sauvegarde , cliquez sur Ajouter . Après avoir ajouté les périphériques que vous voulez à la liste Backup media boîte, cliquez sur OK pour retourner à la Général de la page. Dans la boîte de liste Source: Device: Database , sélectionnez le nom de la base de données qui doit être restaurée.

        Note cette liste n'est disponible que lorsque L'appareil est sélectionné. Seules les bases de données de sauvegarde sur le périphérique sélectionné être disponible.

  4. dans la section Destination , la case base de données est automatiquement remplie avec le nom de la base de données à restaurer. Pour modifier le nom de la base de données, entrez le nouveau nom dans la Base de données .
  5. dans le restaurer à boîte, laisser la valeur par défaut comme à la dernière sauvegarde prise ou cliquez sur Timeline pour accéder à la sauvegarde Timeline boîte de dialogue pour sélectionner manuellement un point dans le temps l'action de récupération.
  6. dans les paramètres de sauvegarde pour restaurer la grille , sélectionnez les sauvegardes à restaurer. Cette grille affiche les sauvegardes disponibles pour l' emplacement. Par défaut, un plan de rétablissement est suggéré. Pour remplacer la plan de récupération suggéré, vous pouvez modifier les sélections dans la grille. Les sauvegardes qui dépendent de la restauration d'une sauvegarde antérieure sont désélectionné automatiquement lorsque la sauvegarde précédente est désélectionnée.
  7. pour spécifier le nouvel emplacement des fichiers de la base de données, sélectionnez la page fichiers , puis cliquez sur déplacer tous les fichiers dans le dossier . Fournir un nouvel emplacement pour les fichiers de données et dossier . Vous pouvez aussi garder les mêmes dossiers et il suffit de renommer la base de données et les noms de fichier journal.
37
répondu Rots 2014-01-16 02:22:00

en fait, il n'est pas nécessaire de restaurer la base de données en termes de Serveur SQL natif, puisque vous" voulez bricoler avec quelques données "et" parcourir les données de cela .bak fichier"

vous pouvez utiliser restauration ApexSQL - un outil de Serveur SQL qui attache des sauvegardes de base de données SQL natives et nativement compressées et des sauvegardes de journal de transaction comme bases de données en direct , accessible via la gestion de serveur SQL Studio, Visual Studio ou tout autre outil tiers. Il permet d'attacher des sauvegardes complètes, différentielles et de journal des transactions simples ou multiples

de plus, je pense que vous pouvez faire le travail pendant que l'outil est en mode d'essai entièrement fonctionnel (14 jours)

clause de non-responsabilité: je travaille comme ingénieur de support produit chez ApexSQL

34
répondu Ivan Stankovic 2014-01-24 18:25:04

voici ce que j'ai bricolé ensemble à partir de divers postes pour copier une base de données en utilisant la sauvegarde et restaurer avec move pour fixer l'emplacement physique et sql supplémentaire pour fixer le nom logique.

/**
 * 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
répondu NateN 2015-05-07 14:50:14

c'est en fait un peu plus simple que de restaurer sur le même serveur. En gros, il vous suffit de parcourir les options "restaurer la base de données". Voici un tutoriel pour vous:

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

D'autant plus qu'il s'agit d'une restauration de non-production, vous pouvez vous sentir à l'aise juste l'essayer sans vous soucier des détails trop beaucoup. Il suffit de mettre vos fichiers SQL où vous les voulez sur votre nouveau serveur et lui donner quel que soit le nom que vous voulez et vous êtes bon à aller.

3
répondu IAmTimCorey 2011-06-07 15:08:49

S'il n'existe pas de base de données, j'utilise le code suivant:

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 DISK=@pathToBackup     
            WITH 
               MOVE @databaseLogicName TO @restoreDatabaseFilePath,
               MOVE @logLogicName TO @restoreLogFilePath

            SET NOCOUNT OFF
    END
2
répondu Konstantin Chernov 2017-02-02 00:25:09

Voici comment restaurer une sauvegarde en tant que db supplémentaire avec un nom de db unique.

pour SQL 2005 cela fonctionne très rapidement. Je suis sûr que les nouvelles versions fonctionneront de la même façon.

tout d'abord, vous ne devez pas prendre votre db d'origine déconnecté. Mais pour des raisons de sécurité, j'aime ça. Dans mon exemple, je vais monter un clone de ma base de données "billingclone" et il s'appellera "billingclone".

1) Faire une bonne sauvegarde de la base de données de facturation

2) pour des raisons de sécurité, j'ai pris l'original hors ligne comme suit:

3) Ouvrir une nouvelle fenêtre de requête

* * IMPORTANT! Gardez cette fenêtre de requête ouverte jusqu'à ce que vous ayez terminé! Vous devez restaurer le db à partir de cette fenêtre!

entrez maintenant le code suivant:

-- 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) Ensuite, dans Studio de gestion, rt cliquez sur Bases de données dans L'Explorateur D'objets, choisissez "Restaurer La base de données"

4) entrez un nouveau nom dans le champ" to Database". I. E. billingclone

5) Dans source pour restaurer, cliquez sur "From Device" et cliquez sur le ... le bouton "naviguer

6) Cliquez sur Ajouter et naviguer vers votre sauvegarde

7) cochez la case à côté de restaurer (sélectionnez les paramètres de sauvegarde pour restaurer)

8) Sélectionnez ensuite la page OPTIONS dans le coin supérieur LH

9) éditez maintenant les noms de fichiers de la base de données dans RESTORE AS. Pour ce faire la db et le journal. I. E. billingclone.mdf et billingclone_log.ldf

10) appuyez maintenant sur OK et attendez que la tâche soit terminée.

11) rafraîchissez votre explorateur D'objets et vous verrez votre nouveau db

12) Maintenant vous pouvez remettre votre base de données de facturation en ligne. Utilisez la même fenêtre de requête que vous avez utilisé pour désactiver la facturation. Utilisez cette commande:

-- 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;

fait!

1
répondu gim 2017-01-24 04:42:20
  • j'ai la même erreur que ce sujet lorsque je restaure une nouvelle base de données en utilisant une ancienne base de données. (utiliser. bak donne la même erreur)

  • j'ai changé le nom de l'ancienne base de données par le nom de la nouvelle base de données (même image). Il a travaillé.

enter image description here

1
répondu Nguyen Duc Hai 2018-07-27 23:48:52