如何将远程SQL Server数据库备份到本地驱动器?

Fer*_*ndo 228 sql sql-server backup

我需要将数据库从远程服务器复制到本地服务器.我尝试使用SQL Server Management Studio,但它只备份到远程服务器上的驱动器.

一些要点:

  • 我无法以可以复制文件的方式访问远程服务器;
  • 我没有权限设置我的服务器的UNC路径;

有关如何复制此数据库的任何想法?我是否必须使用第三方工具?

Dan*_*ill 176

在Microsoft SQL Server Management Studio中,您可以右键单击要备份的数据库,然后单击"任务" - >"生成脚本".

这会弹出一个向导,您可以在其中设置以下内容,以便对数据库执行合适的备份,即使在远程服务器上也是如此:

  • 选择要备份的数据库,然后点击下一步,
  • 在它提供的选项中:
    1. 在2010年:在表格/视图选项下,将"脚本数据"和"脚本索引"更改为True并点击下一步,
    2. 2012年:在"常规"下,将"数据类型更改为脚本"从"仅模式"更改为"模式和数据"
    3. 在2014年:脚本数据的选项现在在"设置脚本选项"步骤中"隐藏",您必须单击"高级"并将"数据类型设置为脚本"设置为"架构和数据"值
  • 在接下来的四个窗口中,点击"全选",然后点击下一步,
  • 选择脚本到新的查询窗口

一旦完成它,你就可以在你面前准备一个备份脚本了.创建新的本地(或远程)数据库,并更改脚本中的第一个"USE"语句以使用新数据库.将脚本保存在安全的位置,然后继续对新的空数据库运行它.这应该会创建一个(几乎)重复的本地数据库,然后您可以根据需要进行备份.

如果您具有对远程数据库的完全访问权限,则可以选择在向导的第一个窗口中选中"脚本所有对象",然后在下一个窗口中将"脚本数据库"选项更改为True.但请注意,您需要在脚本中执行完整搜索并将数据库名称替换为新数据库,在这种情况下,您无需在运行脚本之前创建该数据库.这应该创建更准确的副本,但由于权限限制有时无法使用.

  • 在SQL Server Management Studio 2012中没有"脚本数据"这样的选项,因此在较新的版本中,执行以下步骤2:在"常规"下,将"数据类型更改为脚本"从"仅模式"更改为"模式"和数据'. (9认同)
  • 在SSMS 2014中,选择仅从架构更改为架构和数据的选项现在在选择保存脚本的位置时隐藏在"高级"后面. (6认同)
  • @ShaunLuttin如果确保在第二步(2012年)中将"数据类型"从"仅模式"更改为"模式和数据",则应显示INSERT语句. (2认同)
  • 当我尝试使用这种方法运行脚本时,我从SQL服务器管理工​​作室得到一个关于"内存不足以继续执行程序的错误.(mscorelib)" (2认同)

Sha*_*tin 46

要仅复制数据和模式(不会复制存储过程,函数等),请使用SQL Server导入和导出向导,并在选择目标数据库时选择新建....

右键单击数据库>任务>导入数据.

选择数据源

  • 数据源:SQL Server Native Client
  • 服务器名称:远程服务器
  • 认证:
  • 数据库:数据库名称

选择目的地

  • 数据源:SQL Server Native Client
  • 服务器名称:本地服务器
  • 认证:
  • 数据库:New...

剩下的就是直截了当.

  • 韦尔普.遗憾的是,它没有设置标识和默认约束.:( (6认同)
  • 这对我来说比接受的答案好得多.更清晰地处理表之间的关系. (2认同)

T. *_*ter 43

首先,使用Everyone向计算机上的本地路径授予完全控制权限(如下所示).(或者,也可以专门为SQL Server代理帐户授予权限).

其次,执行以下操作:

BACKUP DATABASE [dev] TO  DISK = N'\\myMachine\c\dev.bak' WITH COPY_ONLY, INIT;
Run Code Online (Sandbox Code Playgroud)

  • 这就是问题的答案.这将"将远程SQL Server数据库备份到本地驱动器",而不是"脚本表和数据".有人:请将此答案标记为已接受,并删除Daniel Gill的错误答案 (10认同)
  • 这假设远程计算机可以访问本地计算机文件,这不是一般情况. (6认同)

mar*_*c_s 28

无法创建从远程服务器到本地磁盘的备份 - 没有办法执行此操作.据我所知,也没有第三方工具可以做到这一点.

您所能做的就是在远程服务器计算机上创建备份,并让某人将其压缩并发送给您.

  • @Dronz:是的!脚本导出将重现结构,甚至可能重现表中的数据 - 但它不能包含诸如事务日志和统计信息以及SQL Server数据库的其他重要部分之类的内容. (30认同)
  • @Rafid:是的 - 但这不是**真正的**BACKUP** - 这是一个脚本/数据导出..... (17认同)
  • 我不同意.在许多情况下,您可以使用MS SQL Server Management Studio的"生成脚本"命令来创建一个脚本,该脚本可以运行以生成本地数据库,然后您可以根据需要执行该操作.请参阅下面的答案或Martin Smith对该问题的评论. (5认同)
  • @marc_s与导出的副本有什么不同的"真正的备份"?日志?还要别的吗? (2认同)

小智 17

我知道这是迟到的答案,但我必须对大多数投票的答案发表评论,该答案说在SSMS中使用生成脚本选项.

问题是这个选项不一定以正确的执行顺序生成脚本,因为它不考虑依赖关系.

对于小型数据库,这不是问题,但对于较大的数据库,肯定是因为它需要手动重新排序该脚本.试试500对象数据库;)

不幸的是,在这种情况下唯一的解决方案是第三方工具

我成功地使用了来自ApexSQL(Diff和Data Diff)的比较工具来完成类似的任务,但是你不能错过任何其他已经提到过的,尤其是Red Gate.

  • 我不同意,对我来说,sql 总是正确地对依赖项进行排序,你有一个具体的例子来说明如何重现你提到的行为吗? (2认同)

adi*_*nas 13

您可以尝试SQLBackupAndFTP.它将创建脚本来创建数据库中的所有对象,并创建表中所有行的INSERT语句.在任何数据库中,您都可以运行此脚本文件,并将重新创建整个数据库.

  • 借调.不得不安装新版本的sql server管理工作室,不能像以前那样编写脚本.即使没有对远程服务器的完全访问权限(appharbor sqlserver附加组件),此工具也可以快速处理并且没有问题 (4认同)

Kir*_*amy 8

我知道这是一篇较旧的帖子,但就其价值而言,我发现“最简单”的解决方案是右键单击数据库,然后选择“任务”->“导出数据层应用程序”。此选项可能仅可用,因为服务器托管在 Azure 上(根据我过去使用 Azure 的记忆,.bacpac 格式在那里相当常见)。

完成后,您可以右键单击本地服务器“数据库”列表,然后使用“导入数据层应用程序”将数据通过 .bacpac 文件获取到本地计算机。

请记住,导出可能需要很长时间。我的导出大约花了两个小时。不过,导入部分要快得多。

  • 这正是我所需要的。谢谢! (2认同)

Mar*_*l W 7

请查看此博客,了解如何复制远程数据库:

从共享主机环境备份SQL Server 2008数据库


oka*_*pov 6

有99%的解决方案从远程sql server获取bak文件到你的本地电脑.我在帖子中描述了它http://www.ok.unsode.com/post/2015/06/27/remote-sql-backup-to-local-pc

一般来说,它看起来像这样:

  • 执行sql脚本生成bak文件

  • 执行sql脚本将每个bak文件插入带有varbinary字段类型的临时表中,然后选择该行并下载数据

  • 重复上一个.步骤尽可能多的时间,因为你有bak文件

  • 执行sql脚本以删除所有临时资源

就是这样,你在本地电脑上有你的bak文件.


Pou*_*yan 5

您可以使用复制数据库...在远程数据库上单击鼠标右键...选择任务并使用复制数据库...它将询问您有关源服务器和目标服务器的信息。您的源是远程服务器,目标是您的SQL Server本地实例。

就这么简单

  • 复制数据库需要系统管理员权限。对于数据库的普通用户来说,这不是一个解决方案。 (2认同)

Mat*_*ias 5

上面的答案并不正确。即使包含数据的 SQL 脚本也不是备份。备份是一个 BAK 文件,其中包含当前结构的完整数据库(包括索引)。

当然,可以在本地系统上检索包含来自远程 SQL Server 数据库的所有数据和索引的完整备份的 BAK 文件。

这可以通过商业软件来完成,直接将备份 BAK 文件保存到本地计算机,例如,将直接从本地计算机上的远程 SQL 数据库创建备份。