将SQL Server 2008数据库文件移动到新文件夹位置

将SQL Server 2008数据库文件移动到新文件夹位置,sql,sql-server-2008,Sql,Sql Server 2008,逻辑名称 myu数据 我的日志 路径: C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA 文件名: my.MDF my_1.LDF 将这些文件移动到新位置的sql脚本是什么:D:\DATA 数据库处于活动状态,因此我需要关闭现有连接。您忘记提到数据库的名称(是“

逻辑名称

  • myu数据
  • 我的日志
路径:

  • C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA
  • C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA
文件名:

  • my.MDF
  • my_1.LDF
将这些文件移动到新位置的sql脚本是什么:
D:\DATA


数据库处于活动状态,因此我需要关闭现有连接。

您忘记提到数据库的名称(是“我的”吗?)

现在,您必须手动将文件从其当前位置移动到D:\Data\(如果在“修改文件”命令中更改了它们,请记住手动重命名它们)。。。然后,您可以使数据库重新联机:

ALTER DATABASE my SET ONLINE;

ALTER DATABASE my SET MULTI_USER;

这假定SQL Server服务帐户对D:\Data\文件夹具有足够的权限。否则,您将在“设置联机”命令中收到错误。

您可以在SQL Server Management Studio中使用“分离/附加”选项


选中此项:

要添加文件所需的权限,请向以下本地用户添加并授予权限:SQLServerMSSQLUser$COMPUTERNAME$INSTANCENAME,其中,COMPUTERNAMEINSTANCENAME必须分别替换为计算机名和MSSQL实例名

这是一个完整的过程,用于将数据库和登录从一个目标转移到一个新的目标,为登录编写脚本,并在目标上重新定位数据文件和日志文件。一切都使用元脚本

很抱歉非现场程序,但脚本非常长。您必须:
-使用原始SID和哈希密码进行脚本登录
-使用元脚本创建备份数据库的脚本
-再次使用元脚本创建脚本以通过重定位参数恢复数据库
-在源实例和目标实例上运行生成的脚本。

请参阅上面链接的详细信息并下载脚本。
补充ALTER数据库过程的一些注意事项:

1) 您可以获得数据库的完整列表,其中包含MDF和LDF文件的逻辑名称和完整路径:

   USE master SELECT name, physical_name FROM sys.master_files
2) 您可以使用CMD move命令手动移动文件:

移动“源”“目标”

例如:

md "D:\MSSQLData"
Move "C:\test\SYSADMIT-DB.mdf" "D:\MSSQLData\SYSADMIT-DB_Data.mdf"
Move "C:\test\SYSADMIT-DB_log.ldf" "D:\MSSQLData\SYSADMIT-DB_log.ldf"
3) 您应该更改创建新数据库的默认数据库路径。默认路径是从Windows注册表获得的

您还可以使用T-SQL进行更改,例如,将默认目标设置为:D:\MSSQLData

USE [master]

GO

EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultData', REG_SZ, N'D:\MSSQLData'

GO

EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog', REG_SZ, N'D:\MSSQLData'

GO

摘自:

如果要更改数据库文件的逻辑名称,可以使用
alterdatabase my MODIFY FILE(name=,NewName=)。您必须在数据库联机的情况下执行此操作(例如,在
设置为联机
之后,但在
设置多用户
之前)。这对我很有用,但请记住,当时只打开一个连接(我的意思是同时关闭服务器资源管理器)。谢谢在我修复了目标文件夹的权限后,这在SQL Server 2012上对我有效。以下文章帮助我获得权限:。谢谢你能详细说明这个过程而不是仅仅链接到场外的答案吗?上面添加了一些详细信息:):)我无法让SQLServerMSSQLSQUSER$COMPUTERNAME$INSTANCENAME为我工作。我正在使用SQLServer2012。我找不到正确的帐户。我觉得自己很脏,但我给了每个人完全的控制权。我认为SQL Server应该让这变得更容易,这样我就更有可能做正确的事情了-(这有点晚了,但是对于其他看到这一点的人,请尝试使用“NT Service\MSSQLSERVER”向SQL服务本身授予权限。这在我的默认SQL实例中很有效。非常简单而且非常高效。您只需关闭所有活动连接(SQL server提供自动执行此操作)就这样。Thank.sp_attach_db在SQL 2005中被弃用。“避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。”更多信息,请参阅
USE [master]

GO

EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultData', REG_SZ, N'D:\MSSQLData'

GO

EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog', REG_SZ, N'D:\MSSQLData'

GO