通过网络还原数据库备份

50

如何使用SQL Server 2005通过网络恢复数据库备份?我记得以前做过这个但是方法似乎有点奇怪。

10个回答

91

您有几个选项可以使用网络文件作为备份源

  1. 映射网络驱动器/路径,将文件托管在与MS-SQL服务器相同的用户下。
  2. 使用xp_cmdshell扩展存储过程从MS SQL内部映射网络驱动器(这种方式,命令 shell 将具有运行SSMS的用户帐户相同的特权)
-- allow changes to advanced options 
EXEC sp_configure 'show advanced options', 1
GO
-- Update currently configured values for advanced options.
RECONFIGURE
GO
-- To enable xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
-- Update currently configured values for advanced options.
RECONFIGURE
GO
EXEC xp_cmdshell 'NET USE Z: \\Srv\Path password1 /USER:Domain\UserName'

随后,在服务器管理工具中将可以看到Z驱动器,或者只是

RESTORE DATABASE DataBaseNameHere FROM DISK = 'Z:\BackNameHere.BAK'
GO

2
使用当前 SQL Server 服务用户调用 NET USE 可以解决该问题。这个答案非常有用。 - JB.
1
这很完美。它是我们问题的解决方案:完全访问 MSSQL,但没有文件服务器访问权限。需要一份拷贝。怎么办?这就是解决方案。 - David Betz
1
你需要像这样运行 EXEC sp_configure 'xp_cmdshell', 0 来禁用 xp_cmdshell 吗?(出于安全原因或其他原因)。 - Jim Aho
在管理工作室中生成Windows命令行外壳非常酷。我认为值得一提的是,该命令行外壳将具有与运行SSMS的用户帐户相同的特权 - Jim Aho
1
@JimAho 我认为,从MS SQL Server启动的命令行壳是一个很大的安全问题。但他们实现了它,以弥补功能不足或其他架构问题。其他SQL服务器不需要具有管理员访问权限或生成命令行壳来执行常规任务,例如还原备份... - TPAKTOPA
我无法让被接受的答案起作用,但这个答案确实有效。 - David P

23

数据库通常作为一个没有网络访问权限的帐户下的服务运行。如果是这种情况,那么你将无法直接通过网络还原备份。备份需要复制到本地机器上,或者数据库服务需要以具有正确网络访问权限的用户身份运行。


2
或者在网络访问之前执行 EXEC xp_cmdshell 'NET USE...;请参阅其他答案。 - JB.
1
https://www.mssqltips.com/sqlservertip/3499/make-network-path-visible-for-sql-server-backup-and-restore-in-ssms/ - Jasim Khan Afridi

10

你无法通过 SSMS 图形用户界面完成这个操作,但是你可以使用脚本来实现。从磁盘还原数据库 RESTORE DATABASE from DISK='\unc\path\filename' 如果你需要自动化这个过程,最好的方法是设置一个 SQL Server 作业,并将其作为能够访问文件位置的用户运行。


2
这不是真的。只要在打开“还原数据库...”对话框之前映射了网络驱动器,就可以通过网络恢复它。 - Jim Aho
1
这在SQL 2005或SQL 2008工具中并非如此。 - baldy

8
你可以使用 SP xp_cmdshell 来为 SQL Server 映射网络驱动器,之后它会在文件浏览窗口中显示出来。
EXEC xp_cmdshell 'NET USE Z: SERVERLOCATION PASSWORD /USER:DOMAIN\USERNAME'

更多信息请见:从网络驱动器恢复数据库

对我起作用了!


7

请确保在 "Services.msc" 中运行你的 SQL 服务 的用户是活动目录下的 "域用户",这将解决问题。


0

顺便提一下,如果您恰好在虚拟机上运行SQL,则通常最好只是在VM上临时设置一个新驱动器,以具有足够的空间将备份文件复制到,从该新本地副本进行还原,然后删除临时驱动器。

如果停止/启动SQL服务以更改其帐户是一个问题,则此方法非常有用。


0
在拥有备份的机器上创建共享驱动器,比如说服务器1将备份保存在文件夹“Backups”中。授予运行SQL Server的账户完全控制权限。在想要恢复的服务器上启动SSMS,选择“还原数据库”,并选择“从设备”选项。在“定位备份文件-“服务器””对话框中,清空“已选择路径”字段并在“文件名”字段中提供完整路径“\server\backups\db.bak”。至少在我从05迁移到08时它是有效的。这不是首选方法,因为任何网络故障都可能导致恢复出现问题。

0

我曾经不止一次地需要这样做,而我所知道的只有两个选项。将文件复制到 SQL Server 的本地位置,或在 SQL Server 上创建一个映射到包含备份文件的共享文件夹的网络驱动器。


0
此外,您需要确保 SQL Server 服务正在运行作为具有网络访问权限和备份文件所在共享目录的权限的用户。'Local System' 没有访问网络的权限。

0
EXEC sp_configure 'show advanced options', 1
GO

-- 更新高级选项的当前配置值。

RECONFIGURE
GO
-- To enable xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO

-- 更新高级选项的当前配置值。

RECONFIGURE
GO

--这应该在命令提示符(cmd)上运行。

NET USE Z: \\172.100.1.100\Shared Password /USER:administrator /Persistent:no

然后在 SQL Server 上

EXEC xp_cmdshell 'NET USE Z: \\172.100.1.100\Shared Password /USER:administrator /Persistent:no'

--之后,在服务器管理工具中将会看到驱动器Z:,或者只是

RESTORE DATABASE DB FROM DISK = 'Z:\DB.BAK'
WITH REPLACE

你能否将你的代码格式化,使其更加清晰易懂?https://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks - Gazihan Alankus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接