Procédure : restaurer une base de données en utilisant un nouvel emplacement et un nouveau nom (Transact-SQL)

Cette rubrique explique comment restaurer la sauvegarde complète d'une base de données à un nouvel emplacement en utilisant, si nécessaire, un nouveau nom. Cette procédure vous permet de déplacer une base de données ou de créer une copie d'une base de données sur la même instance de serveur ou sur une autre instance de serveur. Pour plus d'informations sur les points à prendre en considération pour déplacer une base de données, consultez Copie de bases de données avec la sauvegarde et la restauration.

Conditions préalables et recommandations

  • Pour restaurer une base de données chiffrée, vous devez avoir accès au certificat ou à la clé asymétrique qui a servi à chiffrer la base de données. Sans le certificat et la clé asymétrique, la base de données ne peut pas être restaurée. En conséquence, le certificat utilisé pour chiffrer la clé de chiffrement de base de données doit être conservé tant que la sauvegarde est utile. Pour plus d'informations, consultez Certificats et clés asymétriques SQL Server.

  • Pour des raisons de sécurité, nous vous recommandons de ne pas attacher ou restaurer des bases de données provenant de sources inconnues ou non approuvées. Ces bases de données peuvent contenir du code malveillant susceptible d'exécuter du code Transact-SQL indésirable ou de provoquer des erreurs en modifiant le schéma ou la structure physique des bases de données. Avant d'utiliser une base de données provenant d'une source inconnue ou non approuvée, exécutez DBCC CHECKDB sur la base de données sur un serveur qui n'est pas un serveur de production et examinez le code (par exemple les procédures stockées ou le code défini par l'utilisateur) dans la base de données.

Niveau de compatibilité des bases de données après une mise à niveau

Les niveaux de compatibilité des bases de données tempdb, model, msdb et Resource sont définis à 100 après la mise à niveau. La base de données système master conserve le niveau de compatibilité qu'elle avait avant la mise à niveau, sauf si ce niveau était inférieur à 80. Si le niveau de compatibilité de master était inférieur à 80 avant la mise à niveau, il est défini à 80 après la mise à niveau.

Si le niveau de compatibilité d'une base de données utilisateur était à 80 ou 90 avant la mise à niveau, il reste le même après la mise à niveau. Si le niveau de compatibilité était à 70 ou moins avant la mise à niveau, dans la base de données mise à niveau, le niveau de compatibilité est défini à 80, ce qui correspond au niveau de compatibilité le plus bas pris en charge dans SQL Server 2008.

Notes

Les nouvelles bases de données utilisateur héritent du niveau de compatibilité de la base de données model.

Procédures

Pour restaurer une base de données en utilisant un nouvel emplacement et un nouveau nom

  1. Déterminez éventuellement les noms logiques et physiques des fichiers dans le jeu de sauvegarde qui contient la sauvegarde complète de la base de données que vous souhaitez restaurer. Cette instruction retourne une liste des fichiers journaux et des fichiers de base de données contenus dans le jeu de sauvegarde. La syntaxe de base est la suivante :

    RESTORE FILELISTONLY FROM <backup_device> WITH FILE = backup_set_file_number

    Notes

    Vous pouvez obtenir le backup_set_file_number d'un jeu de sauvegarde en utilisant l'instruction RESTORE HEADERONLY.

    Cette instruction prend également en charge plusieurs options WITH. Pour plus d'informations, consultez RESTORE FILELISTONLY (Transact-SQL).

  2. Utilisez l'instruction RESTORE DATABASE pour restaurer la sauvegarde complète de la base de données. Par défaut, les fichiers de données et les fichiers journaux sont restaurés à leur emplacement d'origine. Pour déplacer une base de données, utilisez l'option MOVE pour déplacer chacun des fichiers de la base de données et éviter des collisions avec les fichiers existants.

    La syntaxe Transact-SQL de base pour restaurer la base de données en utilisant un nouvel emplacement et un nouveau nom est :

    RESTORE DATABASE new_database_name

    FROM backup_device [ ,...n ]

    [ WITH

       {

            [ RECOVERY | NORECOVERY ]

       [ , ] [ FILE ={ backup_set_file_number | @backup_set_file_number } ]

       [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' [ ,...n ]

       }

    ;

    Notes

    Lorsque vous préparez le déplacement d'une base de données vers un autre disque, vous devez vérifier que l'espace y est suffisant et identifier les collisions potentielles avec des fichiers existants. Cela suppose d'utiliser une instruction RESTORE VERIFYONLY spécifiant les mêmes paramètres MOVE que ceux que vous envisagez d'utiliser dans votre instruction RESTORE DATABASE.

    Le tableau suivant décrit les arguments de cette instruction RESTORE en termes de restauration d'une base de données à un nouvel emplacement. Pour plus d'informations sur ces arguments, consultez RESTORE (Transact-SQL).

    • new_database_name
      Nouveau nom de la base de données.

      Notes

      Si vous restaurez la base de données vers une autre instance de serveur, vous pouvez conserver son nom d'origine au lieu d'en utiliser un nouveau.

    • backup_device [ ,...n ]
      Spécifie une liste séparée par des virgules de 1 à 64 unités de sauvegarde à partir desquelles la sauvegarde de la base de données sera restaurée. Vous pouvez spécifier une unité de sauvegarde physique ou une unité de sauvegarde logique correspondante, si celle-ci est définie. Pour spécifier une unité de sauvegarde physique, utilisez l'option DISK ou TAPE :

      { DISK | TAPE } **=**physical_backup_device_name

      Pour plus d'informations, consultez Unités de sauvegarde.

    • { RECOVERY | NORECOVERY }
      Si la base de données utilise le mode de récupération complète, vous devrez peut-être appliquer des sauvegardes du journal des transactions après avoir restauré la base de données. Dans ce cas, spécifiez l'option NORECOVERY.

      Sinon, utilisez l'option RECOVERY, qui est la valeur par défaut.

    • FILE = { backup_set_file_number | @backup_set_file_number }
      Identifie le jeu de sauvegarde à restaurer. Ainsi, la valeur 1 de backup_set_file_number peut indiquer le premier jeu de sauvegarde sur le support de sauvegarde, et la valeur 2 le second jeu. Vous pouvez obtenir le backup_set_file_number d'un jeu de sauvegarde en utilisant l'instruction RESTORE HEADERONLY.

      Lorsque cette option n'est pas spécifiée, le comportement par défaut consiste à utiliser le premier jeu de sauvegarde de l'unité de sauvegarde.

      Pour plus d'informations, consultez « Spécification d'un jeu de sauvegarde » dans Arguments RESTORE (Transact-SQL).

    • MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' [ ,...n ]
      Spécifie que les données ou le fichier journal spécifiés par logical_file_name_in_backup seront restaurés à l'emplacement spécifié par operating_system_file_name. Spécifiez une instruction MOVE pour chaque fichier logique du jeu de sauvegarde que vous voulez restaurer à un nouvel emplacement.

      Option

      Description

      logical_file_name_in_backup

      Indique le nom logique d'un fichier de données ou d'un fichier journal du jeu de sauvegarde. Le nom de fichier logique d'un fichier de données ou journal dans un jeu de sauvegarde correspond au nom logique qu'il portait dans la base de données au moment de la création du jeu de sauvegarde.

      RemarqueRemarque
      Utilisez RESTORE FILELISTONLY pour obtenir une liste des fichiers logiques contenus dans le jeu de sauvegarde.

      operating_system_file_name

      Indique un nouvel emplacement pour le fichier spécifié dans logical_file_name_in_backup. Le fichier sera restauré à cet emplacement.

      Éventuellement, operating_system_file_name spécifie un nouveau nom de fichier pour le fichier restauré. Cette option est nécessaire si vous créez une copie d'une base de données existante sur la même instance de serveur.

      n

      Est un espace réservé indiquant que vous pouvez spécifier des instructions MOVE supplémentaires.

Notes

Après avoir restauré une base de données SQL Server 2005 ou SQL Server 2000 dans SQL Server 2008, la base de données est immédiatement disponible et est ensuite automatiquement mise à niveau. Si la base de données comprend des index de recherche en texte intégral, la mise à niveau les importe, les réinitialise ou les reconstruit, selon le paramètre de la propriété de serveur upgrade_option. Si l'option de mise à niveau a la valeur Importer (upgrade_option = 2) ou Reconstruire (upgrade_option = 0), les index de recherche en texte intégral ne seront pas disponibles pendant la mise à niveau. Selon le volume de données indexé, l'importation peut prendre plusieurs heures et la reconstruction jusqu'à dix fois plus longtemps. Notez également que lorsque l'option de mise à niveau est Importer, les index de recherche en texte intégral associés sont reconstruits si aucun catalogue de texte intégral n'est disponible. Pour modifier le paramètre de la propriété de serveur upgrade_option, utilisez sp_fulltext_service.

Exemple

Description

Cet exemple crée une nouvelle base de données nommée MyAdvWorks. MyAdvWorks est une copie de la base de données AdventureWorks2008R2 existante qui comprend deux fichiers : AdventureWorks2008R2_Data et AdventureWorks2008R2_Log. Cette base de données utilise le mode de récupération simple. La base de données AdventureWorks2008R2 existe déjà sur l'instance de serveur, de sorte que les fichiers de la sauvegarde doivent être restaurés à un nouvel emplacement. L'instruction RESTORE FILELISTONLY permet de déterminer le nombre et le nom des fichiers de la base de données en cours de restauration. La sauvegarde de la base de données est la première sauvegarde définie sur l'unité de sauvegarde.

Notes

Pour voir un exemple de création d'une sauvegarde complète de la base de données AdventureWorks2008R2, consultez Procédure : créer une sauvegarde complète de base de données (Transact-SQL).

Notes

Les exemples de sauvegarde et de restauration du journal des transactions, notamment les restaurations dans le temps, utilisent la base de données MyAdvWorks_FullRM qui est créée à partir de AdventureWorks2008R2, comme dans l'exemple MyAdvWorks suivant. Toutefois, la base de données MyAdvWorks_FullRM ainsi obtenue doit être modifiée pour utiliser le mode de récupération complète : ALTER DATABASE MyAdvWorks_FullRM SET RECOVERY FULL.

Code

USE master
GO
-- First determine the number and names of the files in the backup.
-- AdventureWorks2008R2_Backup is the name of the backup device.
RESTORE FILELISTONLY
   FROM AdventureWorks2008R2_Backup
-- Restore the files for MyAdvWorks.
RESTORE DATABASE MyAdvWorks
   FROM AdventureWorks2008R2_Backup
   WITH RECOVERY,
   MOVE 'AdventureWorks2008R2_Data' TO 'D:\MyData\MyAdvWorks_Data.mdf', 
   MOVE 'AdventureWorks2008R2_Log' TO 'F:\MyLog\MyAdvWorks_Log.ldf'
GO