How can I backup a remote SQL Server database to a local drive?
我需要将数据库从远程服务器复制到本地服务器。 我尝试使用SQL Server Management Studio,但它只备份到远程服务器上的驱动器。
一些要点:
- 我无法以可以复制文件的方式访问远程服务器;
- 我没有权限设置我的服务器的UNC路径;
有关如何复制此数据库的任何想法? 我是否必须使用第三方工具?
在Microsoft SQL Server Management Studio中,您可以右键单击要备份的数据库,然后单击"任务" - >"生成脚本"。
这会弹出一个向导,您可以在其中设置以下内容,以便对数据库执行合适的备份,即使在远程服务器上也是如此:
- 选择要备份的数据库,然后点击下一步,
- 在它提供的选项中:
- 在2010年:在表格/视图选项下,将"脚本数据"和"脚本索引"更改为True并点击下一步,
- 2012年:在"常规"下,将"数据类型更改为脚本"从"仅模式"更改为"模式和数据"
- 在2014年:脚本数据的选项现在在"设置脚本选项"步骤中"隐藏",您必须单击"高级"并将"数据类型设置为脚本"设置为"架构和数据"值
- 在接下来的四个窗口中,点击"全选",然后点击下一步,
- 选择脚本到新的查询窗口
一旦完成它,你就可以在你面前准备一个备份脚本了。创建新的本地(或远程)数据库,并更改脚本中的第一个"USE"语句以使用新数据库。将脚本保存在安全的位置,然后继续对新的空数据库运行它。这应该会创建一个(几乎)重复的本地数据库,然后您可以根据需要进行备份。
如果您具有对远程数据库的完全访问权限,则可以选择在向导的第一个窗口中选中"脚本所有对象",然后在下一个窗口中将"脚本数据库"选项更改为True。但请注意,您需要执行全面搜索和将脚本中的数据库名称替换为新数据库,在这种情况下,您不必在运行脚本之前创建该数据库。这应该创建更准确的副本,但由于权限限制有时无法使用。
要仅复制数据和模式(不会复制存储过程,函数等),请使用SQL Server导入和导出向导,并在选择目标数据库时选择新建....
右键单击数据库>任务>导入数据。
选择数据源
- 数据源:SQL Server Native Client
- 服务器名称:远程服务器
- 验证:
- 数据库:数据库名称
选择目的地
- 数据源:SQL Server Native Client
- 服务器名称:本地服务器
- 验证:
-
数据库:
New...
剩下的就是直截了当。
首先,使用Everyone向计算机上的本地路径授予完全控制权限(如下所示)。 (或者,也可以专门为SQL Server代理帐户授予权限)。
其次,执行以下操作:
1 | BACKUP DATABASE [dev] TO DISK = N'\\myMachine\c\dev.bak' WITH COPY_ONLY, INIT; |
您无法创建从远程服务器到本地磁盘的备份 - 没有办法执行此操作。据我所知,也没有第三方工具可以做到这一点。
您所能做的就是在远程服务器计算机上创建备份,并让某人将其压缩并发送给您。
我知道这是迟到的答案,但我必须对大多数投票的答案发表评论,该答案说在SSMS中使用生成脚本选项。
问题是这个选项不一定以正确的执行顺序生成脚本,因为它不考虑依赖关系。
对于小型数据库,这不是问题,但对于较大的数据库,肯定是因为它需要手动重新排序该脚本。试试500对象数据库;)
不幸的是,在这种情况下唯一的解决方案是第三方工具
我成功地使用了来自ApexSQL(Diff和Data Diff)的比较工具来完成类似的任务,但是你不能错过任何其他已经提到过的,尤其是Red Gate。
您可以尝试SQLBackupAndFTP。它将创建脚本来创建数据库中的所有对象,并创建表中所有行的INSERT语句。在任何数据库中,您都可以运行此脚本文件,并将重新创建整个数据库。
请查看此博客,了解如何复制远程数据库:
从共享主机环境备份SQL Server 2008数据库
有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文件。
您可以使用复制数据库...右键单击远程数据库...选择任务并使用复制数据库...它将询问您有关源服务器和目标服务器的信息。你的源是远程的,目的地是你的本地sql服务器实例。
就这么简单
AppHarbor团队一直在努力解决这个问题,并开发了一个使用SQL服务器管理对象和SqlBulkCopy的临时解决方案。
查看他们关于它的博客文章,或直接查看代码。
他们只用AppHarbor进行了测试,但值得一试。
上面的答案是不正确的。即使有数据的SQL脚本也不是备份。备份是一个BAK文件,其中包含当前结构中的完整数据库,包括indizes。
当然,可以在本地系统上检索包含来自远程SQL Server数据库的所有数据和显示的完整备份的BAK文件。
这可以通过商业软件完成,直接将备份BAK文件保存到本地计算机,例如,这将直接从本地计算机上的远程SQL数据库创建备份。
正如Martin Smith所说,如果您无法访问机器或文件系统,则需要使用第三方工具(如Red Gate或Adept)对源系统和目标系统进行比较。 Red Gate的工具允许您复制对象和模式以及数据。
在满足以下条件的情况下,您可以从远程SQL Server实例备份到本地驱动器的任何方式:
现在,在指定backup命令时,请在指定磁盘选项时使用共享文件夹路径。
试试这个:
1)在计算机中共享具有完全权限的文件夹
2)在您的SQL服务器中:
控制面板 - >管理工具 - >服务 - >右键单击所有SQL服务
登录选项卡上的应该从您的域管理员开始
3)在sql server的维护向导中放置备份位置和文件夹( yourcomputername sharedfoldernam)
我在我们公司的sql server 2008的8台服务器上进行了远程备份
我很惊讶没有人提到Ola Hallengren提供的脚本化备份解决方案,它绝对允许您将数据库从远程服务器备份到网络上的UNC路径(我实际上是在我输入时使用它)从我没有远程访问权限的开发服务器备份数据库,而不是通过SSMS到我的开发PC上的共享。这自2008年开始提供,适用于SQL Server 2005至2014。
您需要确保您设置的共享具有足够的访问权限:在备份过程中,我倾向于允许对"Everyone"AD组进行完全读/写,因为我太懒了,无法找出任何更严格的限制但是这样个人选择。
它使用良好,文档齐全且非常灵活。我倾向于将procs和logging表放在他们自己的小实用程序数据库中然后启动它。如果所有内容都在您的AD域中而不是远程,因为它位于共址服务器或其他位置,这非常有效。
抱歉添加到一个非常老的线程但我在寻找其他东西时发现了这一点,并认为这对于寻找这个主题的人来说是一个值得的补充。
我可以这样做一次......要做到这一点,你必须在远程服务器上打开一个共享。那么你可以直接将备份放在共享本身上,而不是默认位置......
管理员通常会在一些共享文件夹中与我们共享备份。我试过,如果我把备份放在那里,那将是有效的。有效。
某些第三方备份程序允许使用特定网络权限设置文件传输。当SQL Server服务在受限帐户下运行且没有足够的网络权限时,它非常有用。尝试使用EMS SQL备份来解决此任务。
为此,我使用Redgate backup pro 7工具。您可以在其他位置的创建磁贴中从备份文件创建镜像。并且可以在网络上创建后自动复制备份文件。
如果使用SSMS下的"生成脚本",请单击"高级"按钮。在"为依赖对象生成脚本"选项下,单击"True"。通过单击,每个对象的任何依赖项也将按正确的顺序编写。
如果您在本地网络上,则可以在本地计算机上共享文件夹,并将其用作备份的目标文件夹。
例:
-
本地文件夹:
C:\MySharedFolder -> URL: \\MyMachine\MySharedFolder -
远程SQL Server:
Select your database -> Tasks -> Back Up -> Destination -> Add -> Apply '\\MyMachine\MySharedFolder'