2010-08-02 11 views
0

Pour créer une nouvelle base de données et le remplir à partir d'une sauvegarde que je fais habituellement:comment restaurer une sauvegarde de serveur sql contenant des données de flux de fichiers en attribuant un nouveau nom de dossier aux données de flux de fichiers?

CREATE DATABASE MyDatabase -- I create an empty database 

-- I retrieve the filepath of mdf and ldf files 
DECLARE @FileData varchar(1000) 
DECLARE @FileLog varchar(1000) 

set @FileData = (select filename from MyDatabase.dbo.sysfiles where fileid = 1) 
set @FileLog = (select filename from MyDatabase.dbo.sysfiles where fileid = 2) 

-- I Restore the database from backup by substituting the mdf and ldf files 
RESTORE DATABASE MyDatabase 
FROM DISK = 'c:\Test\Test.bak' 
WITH REPLACE, 
MOVE 'MyApp_Data' TO @FileData, -- I forced the name to be MyApp_Data for simplicity 
MOVE 'MyApp_Log' TO @FileLog -- I forced the name to be MyApp_Log for simplicity 

Comment faire la même chose pour les données FILESTREAM aussi? Puis-je forcer la création de dossier pour les données de flux de fichiers ou dois-je le créer manuellement?

Pouvez-vous également commenter mon approche?

Répondre

2

Je pense que vous pouvez également utiliser l'option MOVE avec les données de flux de fichiers. Vous pouvez exécuter la commande suivante pour afficher la liste des fichiers dans votre fichier de sauvegarde. Cela aidera à identifier le fichier filestream. En ce qui concerne votre approche globale, je pense que vous pouvez faire plus que ce que vous devez faire. Vous n'avez pas besoin de créer une base de données avant de restaurer une sauvegarde. La commande RESTORE prendra en charge les étapes de création de base de données. Ainsi, votre commande RESTORE serait la même que votre utilisation, sauf que vous pouvez exclure l'option REPLACE. Vous pouvez spécifier les informations de votre fichier de destination dans l'option MOVE.

+0

Pouvez-vous suggérer un moyen d'insérer les données renvoyées par "Restaurer Filelistonly ..." dans une table temporaire afin que je puisse éviter d'utiliser l'approche décrite dans la question? Est-il possible de faire quelque chose comme sélectionnez * dans #TempTable de (RESTAURER FILELISTONLY DE DISQUE = 'c: \ Test \ Test.bak') - cela ne fonctionne pas de sorte que je peux utiliser dans T- SQL (= dans la requête de restauration) les données contenues dans la table temporaire? Quoi qu'il en soit, je vais poser une question dédiée à cela. – LaBracca