我在网络上的两台不同机器上有两个 SQL Server 数据库实例。我们称它们为服务器 A 和 B。由于一些基础设施问题,我不得不对服务器 A 上的数据库进行完整备份,并将 A.bak 复制到 A 和 B 都可以访问的共享驱动器上。我想要的是恢复 B 上的数据库。
我的第一个问题是在服务器 B 上恢复备份,但备份位置没有显示我的共享驱动器。
我的下一个问题是服务器 B 的 C: 驱动器几乎没有剩余空间,并且有一些额外的分区具有更多空间并可以容纳我的备份文件,但我不确定在 B 上恢复数据库后数据会发生什么。备份数据会填满 C: 上的所有可用空间吗?
如果有人能解释一下在目标数据库服务器上启动恢复数据库后数据是如何布局的,那就太好了?
谢谢
答案1
如果我记得正确的话,已经有一段时间了,但是如果运行 SQL 的帐户没有权限(即本地用户帐户),SQL 将不会将网络共享识别为恢复位置。将备份复制到具有更多空间的本地分区。
使用 GUI 进行恢复时,您可以指定数据和日志文件将恢复到的位置。选择备份文件时,请参阅“选项”选项卡,它应该列出原始路径,并允许您更改目标路径。将它们移动到具有额外磁盘空间的新位置。或者,您可以使用 restore tsql 语句:
restore database yourdbname
from disk 'm:\sqlbackups\yourbackup.bak'
with norecovery,
move 'yourdbname_data' to
'f:\_sql\data\yourdbname_data.mdf',
move 'yourdbname_log' to
'f:\_sql\logs\yourdbname_log.ldf'
yourdbname_data 和 yourdbname_log 是文件列表中“逻辑名称”的名称。如果您有多个文件(至少应有 2 个),则对每一行重复移动语句。
答案2
如果已在 sp_configure 中启用了 xp_cmdshell,如这篇 MSDN 文章您可以使用它来挂载您的文件共享:
xp_cmdshell 'net use x: \\server\share /user:<username> <password>'
然后您将能够访问 Management Studio 中的文件共享。
答案3
您可以使用 T/SQL 并指定网络共享位置进行恢复。这确实要求运行 SQL Server 的 SQL 帐户具有网络位置的权限。只需指定备份文件的网络位置即可。
RESTORE DATABASE MyDatabase from DISK='\\NetworkServer\Share\Folder\file.bak'
如果需要更改物理文件的存储位置,请使用 MOVE 参数。
RESTORE DATABASE MyDatabase from DISK='\\NetworkServer\Share\Folder\file.bak'
WITH MOVE 'LogicalFile' TO 'D:\folder\file.mdf',
MOVE 'LogFile' TO 'E:\folder\file.ldf'