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

时间:2010-10-15 12:28:17

标签: sql sql-server backup

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

有些观点:

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

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

23 个答案:

答案 0 :(得分:170)

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

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

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

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

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

答案 1 :(得分:43)

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

右键单击数据库&gt;任务&gt;导入数据。

选择数据源

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

选择目的地

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

其余的都很直接。

答案 2 :(得分:32)

首先,使用Everyone向计算机上的本地路径授予完全控制权限(如下所示)。 (或者grant permissions specifically到SQL Server代理帐户)。

其次,执行以下操作:

BACKUP DATABASE [dev] TO  DISK = N'\\myMachine\c\dev.bak' WITH COPY_ONLY, INIT;

答案 3 :(得分:27)

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

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

答案 4 :(得分:17)

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

问题在于,此选项不一定以正确的执行顺序生成脚本,因为它不考虑依赖项。

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

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

我成功地使用了来自ApexSQL(差异和数据差异)的比较工具来完成类似的任务,但是你不能错过任何其他已经提到过的,特别是Red Gate。

答案 5 :(得分:13)

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

答案 6 :(得分:7)

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

Backup a SQL Server 2008 Database From a Shared Hosting Environment

答案 7 :(得分:6)

有99%的解决方案可以将bak文件从远程sql server下载到本地pc。我在帖子http://www.ok.unsode.com/post/2015/06/27/remote-sql-backup-to-local-pc

中对此进行了描述

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

  • 执行sql脚本生成bak文件

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

  • 重复上一个。尽可能多的时间,你有bak文件

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

它,你的本地电脑上有你的bak文件。

答案 8 :(得分:5)

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

就这么简单

答案 9 :(得分:3)

AppHarbor团队一直在努力解决这个问题,并使用SQL服务器管理对象和SqlBulkCopy开发了一个临时解决方案。

查看their blog post,或转发straight to the code

他们只用AppHarbor进行了测试,但可能值得一试。

答案 10 :(得分:3)

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

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

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

答案 11 :(得分:1)

试试这个:

1)在计算机上共享具有完全权限的文件夹

2)在您的SQL服务器中: 控制面板 - &gt;管理工具 - &gt;服务 - &gt;右键单击所有SQL服务

登录选项卡上的

应该从您的域管理员

开始

3)在sql server的维护向导中放置备份位置和文件夹(\ yourcomputername \ sharedfoldernam)

我在我们公司的sql server 2008的8台服务器上进行了远程备份

答案 12 :(得分:1)

我知道这是一篇较旧的文章,但是对于它的价值,我发现“最简单”的解决方案是仅右键单击数据库,然后选择“任务”->“导出数据层应用程序”。可能只有此选项才可用,因为服务器托管在Azure上(从我以前使用过Azure的内容来看,.bacpac格式在那很普遍)。

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

请记住,出口可能需要很长的时间。我大约花了两个小时才能完成出口。不过,导入零件要快得多。

答案 13 :(得分:1)

我很惊讶没有人提到Ola Hallengren提供的脚本化备份解决方案,绝对 允许您将数据库从远程服务器备份到您的UNC路径网络是免费的(我实际上正在使用它来打开我从没有远程访问的开发服务器的数据库,除了通过SSMS到我的开发PC上的共享)。这自2008年开始提供,适用于SQL Server 2005至2014.

您需要确保您设置的共享具有足够的访问权限:我倾向于在备份过程中允许对“Everyone”AD组进行完全读/写,因为我太懒了,无法找到更多内容限制但这是个人选择。

它使用良好,文档齐全且非常灵活。我倾向于将procs和logging表放在他们自己的小实用程序数据库中然后启动它。如果所有内容都在您的AD域中而不是远程,因为它位于共存的服务器或某物上,这非常有效。

为添加到一个非常老的线程而道歉但我在寻找其他东西时遇到了这个问题,并认为对于寻找这个主题的人来说这是一个值得的补充。

答案 14 :(得分:1)

如果符合以下条件,您可以从远程SQL Server实例备份到本地驱动器:

  1. 您的本地驱动器上有一个共享文件夹。
  2. 可以从SQL Server框访问共享文件夹。
  3. 现在,在指定backup命令时,请在指定磁盘选项时使用共享文件夹路径。

答案 15 :(得分:1)

正如Martin Smith所说,如果您无法访问机器或文件系统,则需要使用第三方工具(如Red Gate或Adept)对源系统和目标系统进行比较。 Red Gate的工具允许您复制对象和模式以及数据。

答案 16 :(得分:0)

某些第三方备份程序允许使用特定网络权限设置文件传输。当SQL Server服务在受限帐户下运行且没有足够的网络权限时,它非常有用。尝试使用EMS SQL Backup解决此任务。

答案 17 :(得分:0)

我为此目的使用Redgate backup pro 7工具。您可以在其他位置的创建磁贴中从备份文件创建镜像。并且可以在网络上创建并在主机存储上自动复制备份文件。

答案 18 :(得分:0)

如果使用SSMS下的“生成脚本”,请单击“高级”按钮。在“为依赖对象生成脚本”选项下,单击“True”。通过单击,每个对象的任何依赖关系也将按正确的顺序编写。

答案 19 :(得分:0)

我可以这样做一次......要做到这一点,你必须在远程服务器上打开一个共享。那么您可以直接将备份放在共享本身上,而不是默认位置......

通常,admin会在一些共享文件夹中获取备份并与我们共享。我试过,如果我把备份放在那里,那将是有效的。它奏效了。

答案 20 :(得分:0)

对于2019年,如果您需要实际的本地备份,建议使用https://github.com/Domysee/Pather.CSharp。是的,它是脚本,但是您可以对其进行调整以包括所需的任何内容,其中可以包含所有数据。我写了一个bash脚本来在Linux机器上使用它进行每日自动备份。查看我的要旨:

https://gist.github.com/tjmoses/45ee6b3046be280c9daa23b0f610f407

答案 21 :(得分:0)

创建一个具有“所有人”的读/写权限的本地共享文件夹

连接到目标数据库,开始备份并指向如下所示的共享

\ mymachine \ shared_folder \ mybackup.bak

(在Windows域环境中尝试过)

答案 22 :(得分:-1)

如果您在本地网络上,则可以在本地计算机上共享文件夹,并将其用作备份的目标文件夹。

示例:

  • 本地文件夹:

    C:\MySharedFolder -> URL: \\MyMachine\MySharedFolder

  • 远程SQL Server:

    Select your database -> Tasks -> Back Up -> Destination -> Add -> Apply '\\MyMachine\MySharedFolder'