【发布时间】:2010-02-03 16:39:49
【问题描述】:
我需要重命名数据库数据文件。这可以通过 SQL Server Management Studio 实现吗?
仅供参考,我没有对底层框的权限。
编辑:我还需要更改文件的位置。
【问题讨论】:
标签: sql-server-2005 ssms
我需要重命名数据库数据文件。这可以通过 SQL Server Management Studio 实现吗?
仅供参考,我没有对底层框的权限。
编辑:我还需要更改文件的位置。
【问题讨论】:
标签: sql-server-2005 ssms
是的,您可以这样做,只要您有权分离和重新附加数据库,并且只要您找到一种方法来物理重命名磁盘上的文件:
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) 再次重新附加数据库
【讨论】:
您可以在没有基础文件系统权限的情况下执行此操作,因为您没有移动物理文件,而是要求 SQL Server 代表您生成一个新文件并将数据从备份复制到其中。
要设置新的文件名和路径,请转到“恢复”对话框的“选项”选项卡。您甚至会看到一个文件夹浏览对话框,显示 SQL Server 的文件系统视图,而不是您的。
此过程所需的最低权限:
db_backupoperator 数据库中的角色dbcreator 服务器中的角色【讨论】:
试试:
ALTER DATABASE <DBName>
MODIFY FILE (NAME = logical_file_name, FILENAME = 'new-file-on-disk.mdf' )
这只会改变 SQL Server 对文件名的内部定义,不会改变 OS 文件系统中文件的实际名称。
【讨论】:
您可以使用 sp_detach_db 使数据库脱机。找到文件并重命名它们,移动它们。然后使用 sp_attach_db 从新位置重新附加它们。反正我就是这么干的。
最好的问候, 不要
【讨论】:
是和否。您可以更改数据库文件对象文件名:
ALTER DATABASE <dbname> MODIFY FILE (NAME=<logicalname>, FILENAME=<newfilename>);
这将更新主目录,以便在下一次数据库打开事件时查找新文件名。但是在 Transact-SQL 中没有直接重命名/移动文件的方法。
您可以使用 xp_cmdshell 重命名文件,也可以部署启用了 EXTERNAL_ACCESS 的 CLR 程序集,该程序集可以执行文件重命名/移动操作。
【讨论】:
在 SSMS 中以文本模式运行此程序,以获得 T-SQL 脚本和 DOS 命令,这些命令将重命名所有 .ndf 文件。它假定您希望您的文件与文件组命名相同,减去我喜欢在文件组上使用的“FG_”前缀。
干杯。
/************************************************* ************************脚本名称:重命名文件名 02.sql
目的:重命名数据库上的多个文件名。
更改历史记录:
2010 年 3 月 19 日下午 4:15 - gmilner:创建。
**************************************************** ***********************/
设置编号
声明@DATABASE_NAME VARCHAR(64) SET @DATABASE_NAME = 'YOUR_DATABASE_NAME_HERE'
打印'---------------------------------------------- -------------------------------------------' 打印“在单独的 SSMS 窗口中运行这些” 打印 ' - - - - - - - - - - - - - - - - - - - - - - - - ----------------------------------------'
-- 创建 ALTER DATABASE 文件以更改 sys 中的文件名
/* 注意:“这只会改变 SQL Server 的文件名内部定义, 它不会更改 OS 文件系统中文件的实际名称。” */
选择
'改变数据库'+ @DATABASE_NAME + CHAR(13) +
' 修改文件 (NAME = ' + [name] + ', ' + CHAR(13) + ' FILENAME = ''' +
/* 下面的行仅从整个(旧)文件名中删除路径
因此新文件映射到与旧文件相同的位置 /
SUBSTRING(physical_name,1,PATINDEX('%'+REVERSE(SUBSTRING(REVERSE(physical_name),1,CHARINDEX('\',REVERSE(physical_name))-1))+'%',physical_name)-1) +
@DATABASE_NAME + '_' +
替换([名称],'FG_','')+'.ndf'');' / 注意:所有文件组都以 'FG' 开头,但文件不应该。 /
+ CHAR(13) / 在每个命令之间插入一个空行 */
FROM sys.master_files
WHERE database_id = DB_ID(@DATABASE_NAME)
AND 物理名称 LIKE '%.ndf';
-- 现在我们需要 DOS BATCH 命令来重命名实际文件。 -- 我们在盒子本身上以管理员身份运行它们
打印'---------------------------------------------- -------------------------------------------' 打印“现在,分离数据库,然后……” 打印'以管理员身份在 DOS 批处理中运行这些' 打印 ' - - - - - - - - - - - - - - - - - - - - - - - - ----------------------------------------'
SELECT '重命名“' + 物理名称 +
'" "' +
@DATABASE_NAME + '' +
REPLACE([name],'FG','') + '.ndf";' /* 注意:所有文件组都以 'FG' 开头,但文件不应该。 */
来自 sys.master_files WHERE database_id = DB_ID(@DATABASE_NAME) AND 物理名称 LIKE '%.ndf';
打印'---------------------------------------------- -------------------------------------------' 打印 'DOS 批处理运行后,重新连接数据库' 打印 ' - - - - - - - - - - - - - - - - - - - - - - - - ----------------------------------------'
设置 NOCOUNT OFF
【讨论】:
在使用右键单击 Management Studio 中的数据库时出现的上下文菜单中的重命名选项时要小心。此选项不会更改数据库文件名。要更改 DATA 和 LOG 文件的逻辑文件名您也可以使用 Management Studio 界面,但遗憾的是有时它不起作用。
让我们好好做吧……它应该总是有效的。
使用新名称附加数据库:为其使用 T SQL:
使用 [主] 创建数据库 [SqlAndMe] ON ( 文件名 = N'C:\...\NewName.mdf'), (文件名 = N'C:\...\NewName_log.LDF') 附上
重命名逻辑文件名:执行这个 T SQL:
使用 [新名称] ALTER DATABASE [新名称] 修改文件(NAME=N'OldName',NEWNAME=N'NewName') ALTER DATABASE [新名称] 修改文件(NAME=N'OldName_log',NEWNAME=N'NewName_log') 选择名称,物理名称 FROM [新名称].sys.database_files
应该可以了!
【讨论】:
下面是marc_s答案的一些示例代码:
将我的数据库 Test 重命名为 TestSimple 后,我想重命名它的文件。 以下适用于日志文件。 (对于主文件,NAME = 部分变成了测试,我用我想要的路径替换了那个文件。)
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 来完成。
【讨论】:
重命名数据库后,如果我们还想更改数据和日志文件名,我们可以使用以下步骤:
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;
【讨论】: