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

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

一些要点:

  • 我不能以复制文件的方式访问远程服务器;
  • 我没有权限设置一个UNC路径到我的服务器;

知道如何复制这个数据库吗?我是否需要使用第三方工具?

300550 次浏览

不能创建一个备份从远程服务器到本地磁盘-没有办法做到这一点。据我所知,也没有第三方工具可以做到这一点。

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

正如Martin Smith所说,如果您无法访问计算机或文件系统,那么您将需要使用第三方工具,如Red Gate或Adept来对源系统和目标系统进行比较。Red Gate的工具将允许您复制对象、模式和数据。

看看这个博客如何复制远程数据库:

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

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

查看他们的博客,或者去直接进入代码

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

在Microsoft SQL Server Management Studio中,您可以右键单击要备份的数据库,然后单击Tasks -> Generate Scripts。

这会弹出一个向导,你可以在其中设置以下内容,以便对你的数据库即使是在远程服务器上进行像样的备份:

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

一旦它完成了自己的工作,就会有一个备份脚本摆在你面前。创建一个新的本地(或远程)数据库,并更改脚本中的第一个'USE'语句以使用您的新数据库。将脚本保存在一个安全的地方,然后在新的空数据库上运行它。这将创建一个(几乎)重复的本地数据库,然后可以根据需要进行备份。

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

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

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

通常管理员会将备份文件保存在某个共享文件夹中与我们共享。我试过了,如果我把备份放在那里。它工作。

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

就是这么简单

只要满足以下条件,您就可以从远程SQL Server实例将备份备份到本地驱动器:

  1. 您在本地驱动器上有一个共享文件夹。
  2. 可以从SQL Server框中访问共享文件夹。

现在,在指定备份命令时,在指定磁盘选项时使用共享文件夹路径。

我知道这是一个晚的答案,但我必须对大多数投票的答案做出评论,说要在SSMS中使用生成脚本选项。

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

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

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

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

如果您使用SSMS下的Generate Scripts,请单击Advanced按钮。在“为依赖对象生成脚本”选项下,单击“True”。通过单击,每个对象的任何依赖关系也将以适当的顺序编写出来。

试试这个吧:

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

2)在你的SQL server: 控制面板->管理工具->服务->右键单击所有SQL服务

登录选项卡应以您的域管理员开始

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

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

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

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

这可以用商业软件来完成,直接将备份BAK文件保存到本地机器,例如这一个将直接从本地机器上的远程SQL db创建备份。

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

我很惊讶,没有人提到由Ola Hallengren提供的脚本备份解决方案,它绝对允许你从远程服务器备份一个DB到网络上的UNC路径免费(我实际上是在使用它,因为我从一个开发服务器备份一个DB,我没有远程访问权限,除了通过SSMS到我的开发PC上的共享)。自2008年以来,它已经可用,并在SQL Server 2005上工作到2014年。

您需要确保您设置的共享有足够的访问权限:在备份过程中,我倾向于允许对“Everyone”AD组进行完整的读/写,因为我太懒了,不想考虑任何更严格的限制,但这是个人选择。

它被很好地使用,有很好的文档记录,而且非常灵活。我倾向于把procs和日志记录表放在它们自己的小实用程序数据库中,然后启动它。只要所有东西都在您的AD域中,而不是远程的,因为它在一个位于同一位置的服务器上或其他东西上,这是非常有效的。

很抱歉添加到一个非常古老的线程,但我在寻找其他东西时偶然发现了这个,并认为这对任何寻找这个主题的人来说都是一个有价值的添加。

我使用Redgate backup pro 7工具来实现这个目的。您可以创建镜像从备份文件在创建瓷砖在其他位置。在网络和主机存储上创建备份文件后,可以自动复制备份文件。

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

右键单击“数据库>任务>导入数据”。

选择数据源

  • 数据源: SQL Server本机客户端
  • 服务器名称:远程服务器
  • 身份验证:
  • 数据库: db名称

选择目的地

  • 数据源: SQL Server本机客户端
  • 服务器名称:本地服务器
  • 身份验证:
  • 数据库: New...

剩下的就很简单了。

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

通常是这样的:

  • 执行SQL脚本生成bak文件

  • 执行SQL脚本将每个bak文件插入到字段类型为varbinary的临时表中,并选择这一行下载数据

  • 重复上一页。你有多少bak文件就有多少步

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

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

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

其次,执行以下步骤:

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

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

例子:

  • < p >本地文件夹:

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

  • 远程SQL Server:

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

对于2019年,如果你想要一个实际的本地备份,我建议使用mssql-scripter。是的,它是脚本,但你可以调整它,包括任何你想要的,这可以包括所有的数据。我写了一个bash脚本,在linux机器上使用它进行自动每日备份。查看我的要点:

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

创建一个本地共享文件夹,具有“everyone”读写权限

连接到目标数据库,开始备份并像下面那样指向共享

\ mymachine \ shared_folder \ mybackup.bak

(Windows域环境试用)

我知道这是一个旧的帖子,但对于它的价值,我发现“最简单”的解决方案是右键单击数据库,并选择“任务”->“导出数据层应用程序”。这个选项可能只是因为服务器托管在Azure上(根据我过去使用Azure的记忆,.bacpac格式在那里非常常见)。

完成此操作后,您可以右键单击本地服务器“Databases”列表,并使用“Import data -tier Application”,使用.bacpac文件将数据获取到本地机器。

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

使用SQL Server 2019中的存储过程

CREATE PROCEDURE [dbo].[BackupDB]
@backupPath nchar(200),
@dbname nchar(50)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @backupDate as nchar(10)
SELECT @backupDate = CONVERT(VARCHAR(10),GETDATE(),112)
IF DB_ID(TRIM(@dbname)) IS NOT NULL
BEGIN
SET @backupPath = TRIM(@backupPath) + TRIM(@dbname) + '_' + TRIM(@backupDate) + '.BAK'
BACKUP DATABASE @dbname TO DISK = @backupPath
END
END
GO