Sql server 2005 在SQLServer2005中重命名数据库数据文件

Sql server 2005 在SQLServer2005中重命名数据库数据文件,sql-server-2005,ssms,Sql Server 2005,Ssms,我需要重命名数据库数据文件。这是否可以通过SQLServerManagementStudio实现 仅供参考,我没有对基础框的权限 编辑:我还需要更改文件的位置。您可以使用sp\u detach\u db使数据库脱机。找到文件并重命名它们,移动它们。然后使用sp_attach_db从新位置重新连接它们。反正我就是这样做的 致以最良好的祝愿, 堂 对数据库进行完整备份 放下它 还原它,在“还原”对话框中指定不同的文件名和路径 您可以在对基础文件系统没有权限的情况下执行此操作,因为您没有移动物理文件,

我需要重命名数据库数据文件。这是否可以通过SQLServerManagementStudio实现

仅供参考,我没有对基础框的权限


编辑:我还需要更改文件的位置。

您可以使用sp\u detach\u db使数据库脱机。找到文件并重命名它们,移动它们。然后使用sp_attach_db从新位置重新连接它们。反正我就是这样做的

致以最良好的祝愿, 堂

  • 对数据库进行完整备份
  • 放下它
  • 还原它,在“还原”对话框中指定不同的文件名和路径
  • 您可以在对基础文件系统没有权限的情况下执行此操作,因为您没有移动物理文件,而是要求SQL Server代表您生成一个新文件,并从备份中将数据复制到该文件中

    要设置新的文件名和路径,请转到“还原”对话框的“选项”选项卡。您甚至会看到一个文件夹浏览对话框,其中显示的是SQL Server的文件系统视图,而不是您的文件系统视图

    此过程所需的最低权限:

    • db_backupoperator
      数据库中的角色
    • dbcreator
      服务器中的角色

    是和否。您可以更改数据库文件对象文件名:

    ALTER DATABASE <dbname> MODIFY FILE (NAME=<logicalname>, FILENAME=<newfilename>);
    
    alterdatabasemodifyfile(NAME=,FILENAME=);
    
    这将更新主目录,以便在下一次数据库打开事件中首先查找新文件名。但在Transact-SQL中没有直接的方法重命名/移动文件


    您可以使用xp_cmdshell重命名文件,也可以部署启用外部访问的CLR程序集,以执行文件重命名/移动操作。

    是的,您可以这样做,只要您有权分离和重新连接数据库,并且只要找到物理重命名磁盘上文件的方法:

    1) 发出这些命令

    ALTER DATABASE yourdatabase
    MODIFY FILE (NAME = logical_file_name, FILENAME = 'your-new-file-on-disk.mdf' )
    
    (正如DGR在一篇评论中指出的:“磁盘上的新文件.mdf”必须是磁盘上的完整文件名,包括路径)

    2) 分离数据库

    3) 重命名磁盘上的文件

    4) 重新连接数据库

    尝试:

    ALTER DATABASE <DBName> 
    MODIFY FILE (NAME = logical_file_name, FILENAME = 'new-file-on-disk.mdf' )
    
    ALTER数据库
    修改文件(名称=逻辑文件名,文件名='磁盘上的新文件.mdf')
    

    这只会更改SQL Server文件名的内部定义,不会更改操作系统文件系统中文件的实际名称

    以文本模式在SSMS中运行此命令,以获取T-SQL脚本和DOS命令,这些命令将重命名所有.ndf文件。它假定您希望文件的名称与文件组的名称相同,减去我喜欢在文件组上使用的“FG_u2;”前缀

    干杯

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

    脚本名称:重命名文件名02.sql

    用途:重命名数据库中的多个文件名

    更改历史记录:
    2010年3月19日下午4:15-gmilner:已创建

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

    不计较

    声明@DATABASE_NAME VARCHAR(64) 设置@DATABASE\u NAME='YOUR\u DATABASE\u NAME\u HERE'

    打印“--------------------------------------------------------------” 打印“在单独的SSMS窗口中运行这些” 打印“--------------------------------------------------------------”

    --创建ALTER数据库文件以更改sys中的文件名

    /* 注意:“这只会更改SQL Server文件名的内部定义, 它不会更改操作系统文件系统中文件的实际名称。” */

    挑选 “alterdatabase”+@DATABASE_NAME+CHAR(13)+ '修改文件(名称='+[NAME]+','+CHAR(13)+'文件名=''''+ /*下面的行仅从整个(旧)文件名中删除路径 因此,新文件将映射到与旧文件相同的位置/ 子字符串(物理名称,1,PATINDEX(“%”+反向(子字符串(反向(物理名称),1,CHARINDEX(“\”,反向(物理名称))-1))+“%”,物理名称)-1+ @数据库名称+''''+
    替换([名称],'FG_','')+'.ndf'');'/注意:所有文件组都以“FG”开头,但文件不应以“FG”开头/ +CHAR(13)/在每个命令之间放置一个空行*/ 从sys.master_文件 其中database\u id=DB\u id(@database\u NAME) 和物理名称,如“%.ndf”

    --现在我们需要DOS批处理命令来重命名实际文件。 --我们在盒子本身上以管理员的身份运行它们

    打印“--------------------------------------------------------------” 打印“现在,分离数据库,然后…” 打印“以管理员身份在DOS批处理中运行这些” 打印“--------------------------------------------------------------”

    选择“重命名”+物理名称+ '" "' + @数据库名称+“”+
    替换([名称],'FG','')+'.ndf','/*注意:所有文件组都以“FG”开头,但文件不应以“FG”开头*/

    从sys.master_文件 其中database\u id=DB\u id(@database\u NAME) 和物理名称,如“%.ndf”

    打印“--------------------------------------------------------------” 打印“DOS批处理运行后,重新连接数据库” 打印“--------------------------------------------------------------”

    抵消

    使用右键单击Management Studio中的数据库时出现的上下文菜单中的“重命名”选项时要小心。此选项不会更改数据库文件名。要更改数据和日志文件的逻辑文件名,您也可以使用Management Studio界面,但遗憾的是,有时它不起作用

    让我们好好做吧。。。它应该始终有效。

  • 分离数据库: 使用Management Studio,右键单击数据库>转到“任务”>“分离”,单击确定分离数据库(注意:数据库无法分离) /**********************************************************************

    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
    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
    
    USE master;  
    GO  
    ALTER DATABASE TESTDB
    Modify Name = Northwind ;  
    GO 
    
    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' );
    
    ALTER DATABASE Northwind SET ONLINE;