Переименовать файл данных базы данных в SQL Server 2005 - PullRequest
24 голосов
/ 03 февраля 2010

Мне нужно переименовать файл данных базы данных. Это возможно через SQL Server Management Studio?

К вашему сведению, у меня нет разрешений на базовый блок.

Редактировать: мне также нужно изменить местоположение файла.

Ответы [ 9 ]

33 голосов
/ 03 февраля 2010

Да, вы можете сделать это, если у вас есть право отсоединить и повторно присоединить базу данных, и если вы найдете способ физически переименовать файлы на диске:

1) выдает эти команды

ALTER DATABASE yourdatabase
MODIFY FILE (NAME = logical_file_name, FILENAME = 'your-new-file-on-disk.mdf' )

(как указал DGGenuine в комментарии: 'your-new-file-on-disk.mdf' должен быть полным именем файла - включая путь - на вашем диске)

2) отключить базу данных

3) переименовать файлы на диске

4) заново присоединить базу данных

2 голосов
/ 03 февраля 2010

Попробуйте:

ALTER DATABASE <DBName> 
MODIFY FILE (NAME = logical_file_name, FILENAME = 'new-file-on-disk.mdf' )

Это только изменит внутреннее определение имени файла в SQL Server, но не изменит фактическое имя файла в файловой системе ОС.

2 голосов
/ 03 февраля 2010
  1. Создание полной резервной копии базы данных.
  2. Брось.
  3. Восстановите его, указав различные имена файлов и пути в диалоговом окне восстановления.

Вы можете сделать это без каких-либо разрешений в базовой файловой системе, поскольку вы не перемещаете физический файл, а просите SQL Server создать новый файл от вашего имени и скопировать в него данные из резервной копии. *

Чтобы задать новые имена файлов и пути, перейдите на вкладку «Параметры» диалогового окна «Восстановление». Вы даже получаете диалоговое окно просмотра папок, которое показывает вам представление файловой системы SQL Server, а не ваше.

Минимальные разрешения, необходимые для этой процедуры:

  • db_backupoperator роль в базе данных
  • dbcreator роль на сервере
1 голос
/ 03 февраля 2010

Да и Нет. Вы можете изменить имя файла объекта файла базы данных:

ALTER DATABASE <dbname> MODIFY FILE (NAME=<logicalname>, FILENAME=<newfilename>);

Это обновит основной каталог, так что при первом следующем событии открытия базы данных будет найдено новое имя файла. Но прямого способа переименовать / переместить файл в Transact-SQL нет.

Однако вы можете использовать xp_cmdshell для переименования файла или развернуть сборку CLR с включенной EXTERNAL_ACCESS, которая может выполнять операцию переименования / перемещения файла.

1 голос
/ 03 февраля 2010

вы можете использовать sp_detach_db для перевода базы данных в автономный режим. найдите файлы и переименуйте их, переместите их как угодно. затем используйте sp_attach_db, чтобы присоединить их из нового места. вот как я это делаю в любом случае.

С наилучшими пожеланиями, дон

0 голосов
/ 07 сентября 2017

После того, как мы переименуем базу данных ,, если мы хотим изменить данные и имя файла журнала, мы можем использовать следующий шаг:

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.

Изменить имя файла на сервере Windows

4.

ALTER DATABASE Northwind SET ONLINE;  
0 голосов
/ 17 февраля 2016

Вот пример кода для ответа marc_s:

После переименования моей базы данных Test в TestSimple я захотел переименовать ее файлы. Следующее работало для файла журнала. (Для основного файла часть NAME = стала Test, и я заменил требуемый путь для этого файла.)

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

Вышеизложенное изменило, какие файлы ищет SSMS, но фактически не переименовывает файлы. Поэтому я должен был сделать это через Windows.

0 голосов
/ 20 августа 2013

Будьте осторожны, когда используете опцию Переименовать из контекстного меню , которое появляется при щелчке правой кнопкой мыши по базе данных в Management Studio. Эта опция не меняет имена файлов базы данных. Чтобы изменить логические имена файлов для файлов DATA и LOG , вы также можете использовать интерфейс Management Studio, но, к сожалению, иногда он не работает .

Давайте сделаем это правильно ... это должно работать всегда.

  1. Отсоединение базы данных: Используя Management Studio, щелкните правой кнопкой мыши на базе данных> перейдите в «Задачи»> «Отсоединить», нажмите OK, чтобы отсоединить базу данных (обратите внимание: БД не может быть использована для ее отключения)
  2. Переименовать физические файлы: Как только база данных отсоединена, физические файлы разблокированы, и вы можете переименовать их с помощью проводника Windows: enter image description here
  3. Присоединение базы данных с новым именем: Для этого используйте T SQL:

    USE [master] СОЗДАТЬ БАЗУ ДАННЫХ [SqlAndMe] ВКЛ (FILENAME = N’C: \… \ NewName.mdf ’), (FILENAME = N’C: \… \ NewName_log.LDF ’) ДЛЯ ПРИЛОЖЕНИЯ

  4. Переименовать логические имена файлов: Выполнить этот T SQL:

    USE [NewName] ALTER DATABASE [NewName] ИЗМЕНИТЬ ФАЙЛ (NAME = N’OldName ’, NEWNAME = N’NewName’) ALTER DATABASE [NewName] MODIFY FILE (NAME = N’OldName_log ’, NEWNAME = N’NewName_log’) ВЫБЕРИТЕ имя, физическое_имя FROM [NewName] .sys.database_files

Должно работать!

0 голосов
/ 20 марта 2010

Запустите это в SSMS в текстовом режиме, чтобы получить скрипт T-SQL и команды DOS, которые переименуют все ваши файлы .ndf. Предполагается, что вы хотите, чтобы ваши файлы назывались так же, как ваши файловые группы, за исключением префикса 'FG_', который я хотел бы использовать в своих файловых группах.

Приветствия.

/**********************************************************************

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...