【问题标题】:Rename database data file in SQL Server 2005在 SQL Server 2005 中重命名数据库数据文件
【发布时间】:2010-02-03 16:39:49
【问题描述】:

我需要重命名数据库数据文件。这可以通过 SQL Server Management Studio 实现吗?

仅供参考,我没有对底层框的权限。

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

【问题讨论】:

    标签: sql-server-2005 ssms


    【解决方案1】:

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

    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) 再次重新附加数据库

    【讨论】:

    • 谢谢。根据我的经验,'your-new-file-on-disk.mdf' 必须是完整路径。
    • @DGGenuine: 是 - 新文件所在的完整文件名(包括路径)
    • NAME 可以是:db 或 db_log。不要使用撇号
    【解决方案2】:
    1. 对数据库进行完整备份。
    2. 放下它。
    3. 恢复它,在恢复对话框中指定不同的文件名和路径。

    您可以在没有基础文件系统权限的情况下执行此操作,因为您没有移动物理文件,而是要求 SQL Server 代表您生成一个新文件并将数据从备份复制到其中。

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

    此过程所需的最低权限:

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

    【讨论】:

      【解决方案3】:

      试试:

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

      这只会改变 SQL Server 对文件名的内部定义,不会改变 OS 文件系统中文件的实际名称。

      【讨论】:

      • 逻辑文件名不需要引号。
      【解决方案4】:

      您可以使用 sp_detach_db 使数据库脱机。找到文件并重命名它们,移动它们。然后使用 sp_attach_db 从新位置重新附加它们。反正我就是这么干的。

      最好的问候, 不要

      【讨论】:

      • 我很确定工作室有 gui 能力来做这些事情,虽然我没有亲自使用它们。我只是在查询窗口中执行存储过程。
      【解决方案5】:

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

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

      这将更新主目录,以便在下一次数据库打开事件时查找新文件名。但是在 Transact-SQL 中没有直接重命名/移动文件的方法。

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

      【讨论】:

        【解决方案6】:

        在 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

        【讨论】:

          【解决方案7】:

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

          让我们好好做吧……它应该总是有效的。

          1. 分离数据库: 使用 Management Studio,右键单击数据库 > 转到“任务”>“分离”,单击“确定”分离数据库(注意:数据库不能用于分离它)
          2. 重命名物理文件: 分离数据库后,物理文件将被解锁,您可以使用 Windows 资源管理器重命名它们:
          3. 使用新名称附加数据库:为其使用 T SQL:

            使用 [主] 创建数据库 [SqlAndMe] ON ( 文件名 = N'C:\...\NewName.mdf'), (文件名 = N'C:\...\NewName_log.LDF') 附上

          4. 重命名逻辑文件名:执行这个 T SQL:

            使用 [新名称] ALTER DATABASE [新名称] 修改文件(NAME=N'OldName',NEWNAME=N'NewName') ALTER DATABASE [新名称] 修改文件(NAME=N'OldName_log',NEWNAME=N'NewName_log') 选择名称,物理名称 FROM [新名称].sys.database_files

          应该可以了!

          【讨论】:

            【解决方案8】:

            下面是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 来完成。

            【讨论】:

              【解决方案9】:

              重命名数据库后,如果我们还想更改数据和日志文件名,我们可以使用以下步骤:

              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;  
              

              【讨论】:

                猜你喜欢
                • 2016-01-11
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-01-13
                • 1970-01-01
                • 1970-01-01
                • 2015-08-20
                相关资源
                最近更新 更多