代码之家  ›  专栏  ›  技术社区  ›  Jason

在SQL Server 2005中重命名数据库数据文件

  •  24
  • Jason  · 技术社区  · 14 年前

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

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

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

    9 回复  |  直到 7 年前
        1
  •  32
  •   marc_s    13 年前

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

    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
  •  2
  •   Christian Hayter    14 年前
    1. 对数据库进行完整备份。
    2. 放下它。
    3. 还原它,在还原对话框中指定不同的文件名和路径。

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

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

    此过程所需的最小权限:

    • db_backupoperator 数据库中的角色
    • dbcreator 服务器中的角色
        3
  •  2
  •   Yada    10 年前

    尝试:

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

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

        4
  •  1
  •   Don Dickinson    14 年前

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

    最好的问候, 大学教师

        5
  •  1
  •   Remus Rusanu    14 年前

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

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

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

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

        6
  •  0
  •   gdmlner    14 年前

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

    喝彩。

    < PRE> /*************************************************************

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

    目的:重命名数据库中的多个文件名。

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

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

    将nocount设置为on

    声明@database_name varchar(64) 设置@database_name='您的\数据库名称\此处'。

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

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

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

    选择 'alter database'+@database_name+char(13)+ '修改文件(name='+[name]+','+char(13)+'文件名''''+ /*下面的行仅从整个(旧)文件名中剥离路径 因此新文件映射到与旧文件相同的位置/ 子字符串(物理\u name,1,patindex('%'+reverse(子字符串(物理\u name),1,charindex('\',reverse(物理\u name))-1))+'%,物理\u name)-1)+ @数据库名称+'+
    替换([名称]、'fg‘、''+'.ndf'');'/ 注意:所有文件组都以'fg'开头,但文件不应。< EM > +char(13)/>em>在每个命令之间输入一个空行*/ 从sys.master_文件 其中database_id=db_id(@database_name) 物理名称,如“%.ndf”;。

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

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

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

    从sys.master_文件 其中database_id=db_id(@database_name) 物理名称,如“%.ndf”;。

    打印“————————————————————————————————————————————————————————————————————————” 打印“运行DOS批处理后,重新附加数据库” 打印“—————————————————————————————————————————————————————————————————————————”

    设置nocount关闭

    ———————————————————————————————————————————————————————————————————————————————————————————————————————————————— 打印“运行DOS批处理后,重新附加数据库” 打印“————————————————————————————————————————————————————————————————————————”

    设置零计数

        7
  •  0
  •   paweln66    11 年前

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

    让_s正确地完成它……它应该总是有效的。

    1. 分离数据库: 使用Management Studio,右键单击数据库>转到__tasks__>__detach_,单击确定以分离数据库(注意:数据库不能用于分离它)。
    2. 重命名物理文件: 分离数据库后,物理文件将被解锁,您可以使用Windows资源管理器重命名它们:
    3. 使用新名称附加数据库: for it use t sql:。

      使用[硕士] 在上创建数据库[sqlandme] (文件名=n_C:\226;_ newname.mdf__), (文件名=n__C:\__ \newname_log.ldf_trade) 用于附加

    4. 重命名逻辑文件名: Execute this t sql:。

      使用[新名称] 更改数据库[新名称] 修改文件(name=n_ oldname_,newname=n__newname_) 更改数据库[新名称] 修改文件(name=n_ 选择名称,物理名称 来自[newname].sys.database\u文件

    它应该能工作!

    当右键单击ManagementStudio中的数据库时,将显示。此选项不会更改数据库文件名。更改数据和日志文件的逻辑文件名 您也可以使用Management Studio界面,但不幸的是,有时它不起作用。 .

    让我们好好地做…它应该一直有效。

    1. 分离数据库: 使用Management Studio,右键单击数据库>转到__tasks__>__detach_,单击确定以分离数据库(注意:数据库不能用于分离它)
    2. 重命名物理文件: 分离数据库后,物理文件将被解锁,您可以使用Windows资源管理器重命名它们: enter image description here
    3. 正在使用新名称附加数据库: 对于它,使用T SQL:

      使用[硕士] 在上创建数据库[sqlandme] (文件名=n_C:\226;_ newname.mdf__), (文件名=n__C:\__ \newname_log.ldf_trade) 为附

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

      使用[新名称] 更改数据库[新名称] 修改文件(name=n_ oldname_,newname=n__newname_) 更改数据库[新名称] 修改文件(name=n_ 选择名称,物理名称 来自[newname].sys.database\u文件

    它应该能工作!

        8
  •  0
  •   William Jockusch    8 年前

    下面是一些Marc_答案的示例代码:

    在将数据库测试重命名为testsimple之后,我想重命名它的文件。 以下内容适用于日志文件。(对于主文件,name=part变成了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查找的文件,但实际上它没有重命名这些文件。所以我必须通过窗户才能做到。

        9
  •  0
  •   Darjan Bogdan    7 年前

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

    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' );
    

    三。

    在Windows服务器中更改文件名

    4。

    ALTER DATABASE Northwind SET ONLINE;