Renommer le fichier de données de la base de données dans SQL Server 2005
je dois renommer un fichier de données de bases de données. Est-ce possible via SQL Server Management Studio?
pour info, je n'ai pas les permissions de la boîte sous-jacente.
Edit: j'ai aussi besoin de changer l'emplacement du fichier.
9 réponses
Oui, vous pouvez le faire, aussi longtemps que vous avez le droit de détacher et rattacher la base de données, et aussi longtemps que vous trouverez un moyen de physique de renommer les fichiers sur le disque:
1) émet ces commandes
ALTER DATABASE yourdatabase
MODIFY FILE (NAME = logical_file_name, FILENAME = 'your-new-file-on-disk.mdf' )
(comme DGGenuine souligné dans un commentaire: "votre nouveau fichier sur le disque.mdf " doit être un nom de fichier complet - y compris le chemin d'accès sur votre disque dur)
2) détachez la base de données
3) renommer les fichiers sur le disque
4) re-attacher la base de données
- faire une sauvegarde complète de la base de données.
- laisse tomber.
- le restaurer, en spécifiant différents noms de fichiers et chemins dans la boîte de dialogue Restaurer.
vous pouvez le faire sans permissions sur le système de fichiers sous-jacent, parce que vous ne déplacez pas un fichier physique autour, vous demandez à SQL Server de générer un nouveau fichier en votre nom et de copier des données à partir de la sauvegarde.
pour définir les nouveaux noms de fichiers et chemins, allez dans L'onglet Options le dialogue Restaurer. Vous obtenez même un dialogue de recherche de dossier qui vous montre la vue du serveur de SQL du système de fichiers, pas le vôtre.
autorisations Minimales requises pour cette procédure:
db_backupoperator
rôle dans la base de donnéesdbcreator
rôle dans le serveur
Essaie:
ALTER DATABASE <DBName>
MODIFY FILE (NAME = logical_file_name, FILENAME = 'new-file-on-disk.mdf' )
cela ne modifiera que la définition interne de SQL Server du nom du fichier, cela ne changera pas le nom réel du fichier dans le système de fichiers OS.
vous pouvez utiliser sp_detach_db pour désactiver la base de données. trouver les fichiers et les renommer,les déplacer. ensuite, utilisez sp_attach_db pour les rattacher à un nouvel emplacement. c'est la façon dont je le fais quand même.
cordialement, don
Oui et non. Vous pouvez modifier le nom du fichier objet de la base de données:
ALTER DATABASE <dbname> MODIFY FILE (NAME=<logicalname>, FILENAME=<newfilename>);
ceci mettra à jour le catalogue principal de sorte qu'au premier prochain événement d'ouverture de la base de données le nouveau nom de fichier sera recherché. Mais il n'y a aucun moyen direct de renommer/déplacer le fichier dans Transact-SQL.
Vous pouvez utiliser xp_cmdshell pour renommer le fichier, ou vous pouvez déployer un assemblage CLR avec EXTERNAL_ACCESS activé qui peut faire l'opération de renommage/déplacement du fichier.
exécutez ceci dans SSMS en mode texte pour obtenir un script T-SQL et des commandes DOS qui vont renommer tous vos .fichiers ndf. Il suppose que vous voulez que vos fichiers soient nommés de la même façon que vos groupes de fichiers moins un préfixe " FG_ " que j'aime utiliser sur mes groupes de fichiers.
Cheers.
/**********************************************************************SCRIPT NAME: Rename FileNames 02.sql
PURPOSE: Rename multiple filenames on the database.
Change History:
03/19/2010 4:15 PM - gmilner: Created.**********************************************************************/
SET NOCOUNT ON
DECLARE @DATABASE_NAME VARCHAR(64) SET @DATABASE_NAME = 'YOUR_DATABASE_NAME_HERE'
PRINT '----------------------------------------------------------------------------' PRINT ' RUN THESE IN A SEPARATE SSMS WINDOW' PRINT '----------------------------------------------------------------------------'
-- create the ALTER DATABASE files to change the file names in the sys
/* NOTE: "This will only alter SQL Server's internal definition of the filename, it will not change the actual name of the file in the OS file system." */
SELECT 'ALTER DATABASE '+ @DATABASE_NAME + CHAR(13) + ' MODIFY FILE (NAME = ' + [name] + ', ' + CHAR(13) + ' FILENAME = ''' + /* the line below strips the path only from the whole (old) filename so the new files are mapped to the same place as the old / SUBSTRING(physical_name,1,PATINDEX('%'+REVERSE(SUBSTRING(REVERSE(physical_name),1,CHARINDEX('\',REVERSE(physical_name))-1))+'%' ,physical_name)-1) + @DATABASE_NAME + '_' +
REPLACE([name],'FG_','') + '.ndf'');' / NOTE: all filegroups start with 'FG' but files should not. / + CHAR(13) / put in a blank line between each command */ FROM sys.master_files WHERE database_id = DB_ID(@DATABASE_NAME) AND physical_name LIKE '%.ndf';-- Now we need DOS BATCH commandS to rename the actual files. -- We run them as Administrator on the box itself
PRINT '----------------------------------------------------------------------------' PRINT ' NOW, DETACH THE DATABASE AND THEN ... ' PRINT ' RUN THESE IN A DOS BATCH AS ADMINISTRATOR' PRINT '----------------------------------------------------------------------------'
SELECT 'rename "' + physical_name + '" "' + @DATABASE_NAME + '' +
REPLACE([name],'FG','') + '.ndf";' /* NOTE: all filegroups start with 'FG' but files should not. */FROM sys.master_files WHERE database_id = DB_ID(@DATABASE_NAME) AND physical_name LIKE '%.ndf';
PRINT '----------------------------------------------------------------------------' PRINT ' AFTER THE DOS BATCH IS RUN, REATTACH THE DATABASE' PRINT '----------------------------------------------------------------------------'
SET NOCOUNT OFF
attention lorsque vous utilisez L'option Renommer du menu contextuel qui apparaissent lorsque vous faites un clic droit sur la base de données dans Management Studio. Cette option ne change pas les noms des fichiers de la base de données. Pour modifier les noms de fichiers logiques pour les données et les fichiers LOG Vous pouvez également utiliser une interface de gestion de Studio mais malheureusement parfois elle ne fonctionne pas.
faisons-le correctement... ça devrait toujours marcher.
- détacher base de données: En utilisant le Studio de gestion, droit-cliquez sur la base de données > allez à "Tâches" > "détacher", cliquez sur OK pour détacher une base de données (note: que la base de données ne peut pas être utilisée pour la détacher)
- renommer les fichiers physiques: une fois la base de données déconnectée, les fichiers physiques sont déverrouillés et vous pouvez les renommer en utilisant Windows Explorer:
Fixation de la base de données avec un Nouveau Nom: Pour utiliser T SQL:
utiliser [maître] CRÉER Base de données [SqlAndMe] ON (Nom de fichier = N’C:\...\NewName.MDF’), (Nom de fichier = N’C:\...\NewName_log.LDF’) POUR JOINDRE
renommer Logical file names: Exécuter ce T-SQL:
utiliser [nouveau nom] ALTER DATABASE [Nouveau_nom] Modifier le fichier (NAME=N'Oldname’, NEWNAME=N'NewName’) ALTER DATABASE [Nouveau_nom] Modifier le fichier (NAME=N'Oldname_log’, NEWNAME = N'Newname_log’) Sélectionnez Nom, physical_name DE [NewName].sys.database_files
Ça devrait fonctionner!
Voici un exemple de code pour la réponse de marc_s:
après avoir renommé mon Test de base de données, pour TestSimple, j'ai voulu renommer ses fichiers. La suite travaillé pour le fichier journal. (Pour le fichier principal, le nom = partie est devenu Test, et j'ai substitué le chemin que je voulais pour ce fichier.)
USE [master]
ALTER DATABASE [TestSimple] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE [TestSimple]
MODIFY FILE (NAME = Test_log, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\TestSimple_log.ldf' )
GO
ALTER DATABASE TestSimple SET MULTI_USER
GO
ce qui précède a changé ce que les fichiers que SSMS recherche, mais il n'est pas réellement renommer les fichiers. J'ai donc dû le faire via Windows.
après avoir renommé la base de données, si nous voulons aussi changer le nom des données et du fichier journal, nous pourrions utiliser l'étape suivante:
1.
USE master;
GO
ALTER DATABASE TESTDB
Modify Name = Northwind ;
GO
2.
ALTER DATABASE Northwind SET OFFLINE;
ALTER DATABASE Northwind MODIFY FILE ( NAME = TESTDB, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\Northwind.mdf' );
ALTER DATABASE Northwind MODIFY FILE ( NAME = TESTDB_log, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\Northwind_log.ldf' );
3.
Modifier le nom de fichier dans windows server
4.
ALTER DATABASE Northwind SET ONLINE;