我需要将数据库从远程服务器复制到本地服务器。我尝试使用SQL Server Management Studio,但它仅备份到远程服务器上的驱动器。
一些要点:
- 我无法以可以复制文件的方式访问远程服务器;
- 我无权设置服务器的UNC路径;
关于如何复制此数据库的任何想法?我需要使用第三方工具吗?
Generate and Publish Scripts
option 生成了脚本。我得到了所有的表和模式。但是我没有得到表的任何数据。我怎样才能解决这个问题。
我需要将数据库从远程服务器复制到本地服务器。我尝试使用SQL Server Management Studio,但它仅备份到远程服务器上的驱动器。
一些要点:
关于如何复制此数据库的任何想法?我需要使用第三方工具吗?
Generate and Publish Scripts
option 生成了脚本。我得到了所有的表和模式。但是我没有得到表的任何数据。我怎样才能解决这个问题。
Answers:
在Microsoft SQL Server Management Studio中,您可以右键单击要备份的数据库,然后单击任务->生成脚本。
这会弹出一个向导,您可以在其中设置以下内容,以便即使在远程服务器上也可以执行数据库的体面备份:
完成任务后,您将准备好一个备份脚本。创建一个新的本地(或远程)数据库,并在脚本中更改第一个“ USE”语句以使用您的新数据库。将脚本保存在安全的地方,然后继续对新的空数据库运行脚本。这将为您创建一个(几乎)重复的本地数据库,然后您可以根据需要进行备份。
如果您具有对远程数据库的完全访问权限,则可以选择在向导的第一个窗口中检查“脚本所有对象”,然后在下一个窗口中将“脚本数据库”选项更改为True。请注意,您需要对脚本中的数据库名称执行完整搜索并将其替换为新数据库,在这种情况下,您无需在运行脚本之前创建数据库。这样可以创建更准确的副本,但由于权限限制,有时无法使用。
首先,使用“所有人”将完全控制权限授予您计算机上的本地路径(如下所示)。(或另选地授予对SQL Server代理帐户的权限)。
其次,执行以下操作:
BACKUP DATABASE [dev] TO DISK = N'\\myMachine\c\dev.bak' WITH COPY_ONLY, INIT;
若要仅复制数据和架构(不复制存储过程,函数等),请使用SQL Server导入和导出向导,然后在选择目标数据库时选择“ 新建...”。
右键单击数据库>任务>导入数据。
选择数据源
选择目的地
New...
其余的很简单。
您无法创建从远程服务器到本地磁盘的备份-只是无法执行此操作。据我所知,也没有第三方工具可以执行此操作。
您所能做的就是在远程服务器计算机上创建备份,然后请有人将其压缩并发送给您。
我知道这是较晚的答案,但我必须对大多数投票的答案作出评论,说要在SSMS中使用“生成脚本”选项。
问题在于此选项不一定按正确的执行顺序生成脚本,因为它没有考虑依赖关系。
对于小型数据库,这不是问题,但是对于大型数据库,这当然是因为它需要手动重新排序该脚本。在500对象数据库上尝试一下;)
不幸的是,在这种情况下,唯一的解决方案是第三方工具。
我成功地使用了ApexSQL的比较工具(Diff和Data Diff)来完成类似的任务,但是您在这里提到的其他任何工具都不会出错,尤其是Red Gate。
您可以尝试SQLBackupAndFTP。它将创建脚本以创建数据库中的所有对象,并为表中的所有行创建INSERT语句。在任何数据库中,您都可以运行此脚本文件,然后将重新创建整个数据库。
在此博客中获得有关如何复制远程数据库的描述:
有99%的解决方案可将bak文件从远程sql服务器获取到您的本地pc。我在我的帖子http://www.ok.unsode.com/post/2015/06/27/remote-sql-backup-to-local-pc中描述了它
通常,它将如下所示:
执行sql脚本以生成bak文件
执行sql脚本以将每个bak文件插入具有varbinary字段类型的temp表中,并选择此行并下载数据
重复上一个 处理bak文件的时间
执行sql脚本以删除所有临时资源
就是这样,您在本地PC上有bak文件。
您可以使用复制数据库...右键单击远程数据库...选择任务并使用复制数据库...它将询问您有关源服务器和目标服务器的信息。您的源是远程的,目标是您的SQL Server的本地实例。
就这么简单
上面的答案是不正确的。即使有数据的SQL脚本也不是备份。备份是一个BAK文件,在其当前结构中包含完整数据库(包括indize)。
当然,可以在本地系统上检索包含所有数据的完整备份的BAK文件,以及来自远程SQL Server数据库的本地化文件。
可以使用商业软件完成此操作,以将备份BAK文件直接保存到本地计算机,例如,该文件将直接从本地计算机上的远程SQL数据库创建备份。
在满足以下条件的情况下,您可以采用一种从远程SQL Server实例向本地驱动器进行备份的方式:
现在,当指定备份命令时,在指定磁盘选项时使用共享文件夹路径。
我感到惊讶的是,没有人提到Ola Hallengren提供的脚本化备份解决方案,它绝对可以让您免费将数据库从远程服务器备份到网络上的UNC路径(我在键入时实际上正在使用它)从我没有远程访问权限的开发服务器(除了通过SSMS备份到我的开发PC上的共享)备份数据库)。自2008年以来一直可用,并且在SQL Server 2005到2014年之前均可使用。
您需要确保所设置的共享具有足够的访问权限:在备份过程中,我倾向于允许对“每个人” AD组进行完全读/写操作,因为我懒得找出任何限制性更高的内容,但这个人选择。
它被很好地使用,有据可查且非常灵活。我倾向于将proc和日志记录表放在他们自己的小实用程序数据库中,然后启动它。如果所有内容都位于您的AD域中,并且不是位于同一位置的服务器之类的东西上,那么它就不是远程的,这很好。
很抱歉添加到一个非常旧的线程,但是我在寻找其他内容时碰到了这一点,并认为这对于任何寻找此主题的人来说都是值得的。
对于2019年,如果您想要实际的本地备份,我建议使用mssql-scripter。是的,它是脚本,但是您可以对其进行调整以包括所需的任何内容,其中可以包含所有数据。我写了一个bash脚本来在Linux机器上使用它进行每日自动备份。查看我的要点:
https://gist.github.com/tjmoses/45ee6b3046be280c9daa23b0f610f407
一些第三方备份程序允许设置具有特定网络权限的文件传输。当SQL Server服务在受限帐户下运行且没有足够的网络权限时,它非常有用。尝试使用EMS SQL Backup解决此任务。
为此,我使用Redgate Backup Pro 7工具。您可以在其他位置的创建磁贴中从备份文件创建镜像。并且可以在网络和主机存储上创建后自动复制备份文件。
创建具有“所有人”的读/写权限的本地共享文件夹
连接到目标数据库,开始备份并指向共享,如下所示
\ mymachine \ shared_folder \ mybackup.bak
(在Windows域环境中尝试)
我知道这是一篇较旧的文章,但是对于它的价值,我发现“最简单”的解决方案是仅右键单击数据库,然后选择“任务”->“导出数据层应用程序”。此选项可能仅因为服务器托管在Azure上才可用(从我以前记得使用Azure的情况来看,.bacpac格式在那很普遍)。
完成后,您可以右键单击本地服务器的“数据库”列表,然后使用“导入数据层应用程序”使用.bacpac文件将数据获取到本地计算机。
请记住,出口可能需要很长时间。我大约花了两个小时才能完成出口。不过,导入零件要快得多。