Переименуйте файл данных базы данных в SQL Server 2005

Я должен переименовать файл данных баз данных. Действительно ли это возможно через Studio управления SQL Server?

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

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

24
задан Jon Seigel 3 May 2010 в 15:22
поделиться

6 ответов

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

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) повторно подключите базу данных снова

33
ответ дан 28 November 2019 в 23:42
поделиться

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

С уважением, дон

1
ответ дан 28 November 2019 в 23:42
поделиться

Попробуйте:

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

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

2
ответ дан 28 November 2019 в 23:42
поделиться

Я бы пошел и за одного, и за двух. Создайте базовый класс, который можно использовать для большинства событий, а затем извлеките из этого класса события, которые нуждаются в другом. Если вы посмотрите на библиотеки .NET, это то, как они были построены.

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

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

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

Для установки новых имен файлов и путей перейдите на вкладку "Параметры" диалогового окна "Восстановление". Вы даже получаете диалоговое окно обзора папок, в котором отображается представление файловой системы SQL Server, а не ваше.

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

  • db _ backupoperator роль в базе данных
  • dbcreator роль в сервере
-121--1530505-

Да и номер Можно изменить имя файла файла базы данных:

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

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

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

1
ответ дан 28 November 2019 в 23:42
поделиться
  1. Сделайте полную резервную копию базы данных.
  2. Брось.
  3. Восстановите ее, указав различные имена файлов и пути в диалоге восстановления.

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

Чтобы установить новые имена файлов и пути к ним, перейдите на вкладку "Опции" диалогового окна "Восстановление". Вы даже получите диалог просмотра папок, который покажет вам вид файловой системы SQL-сервера, а не вашей.

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

  • роль db_backupoperator в базе данных
  • роль dbcreator в сервере
2
ответ дан 28 November 2019 в 23:42
поделиться

Запустите это в 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

0
ответ дан 28 November 2019 в 23:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: