这篇文章解释了SSDT 2017中的转移数据库任务。阅读本文后,你将能够在同一服务器或不同服务器之间转移数据库。
环境设置和用例
我在工作站上创建了两个不同的名为SQL Server 2019的实例。SQL01实例是源实例,因为我们要复制在SQL01上创建的数据库。SQL02是一个目标实例。我已经在SQL01上恢复了一个名为StackOverFlow2010的数据库。我们正在把它从源服务器复制到目标服务器。数据库复制过程将是离线的。
配置集成服务包
我已经在我的工作站上下载了SSDT 2017(SQL Server data tools for visual studio 2017)。我已经写了一篇单独的文章,解释了SSDT 2017的安装过程。SQL Server数据工具有各种集成服务工具,可以用来执行各种任务。我们可以配置SSIS包来执行ETL过程和数据库维护活动。
首先,让我们创建一个SSIS包。启动SSDT 2017并创建一个新的集成服务项目。项目名称为CopyStackOverflow2010。

在SSIS包设计器上,拖动转移数据库任务并将其放在控制流设计器上,并将其重命名为Copy Stackoverflow2010。

配置传输数据库任务
我们已经在控制流设计器上添加了名为Copy StackOverFlow2010的转移数据库任务。双击来配置它。我们可以在任务编辑器中的数据库页面配置参数,所以选择它。在数据库页面,配置参数如下。
源连接。
要配置源连接,点击SourceConnection下拉框,选择New Connection。一个SMO连接管理器编辑器打开。在服务器名称文本框中,指定源服务器的主机名,即Nisarg-PC\SQL01。选择Windows认证作为登录方式。

行动
选择你想使用转移数据库任务执行的操作。我们可以使用传输数据库任务移动或复制数据库。在我们的演示中,我们要复制Stackoverflow数据库,因此选择复制。
方法
选择你想在传输数据库时使用的方法。如果你想在数据库在线时传输它,那么选择DatabaseOnline选项。如果你想通过离线设置来复制/移动数据库,选择DatabaseOffline。我们想用DatabaseOffline方法传输数据库,所以选择DatabaseOffline。
源数据库名称
指定源数据库的名称。在这个演示中,源数据库是Stackoverflow2010。
源数据库文件
指定源数据库文件。我们可以通过点击气球图标(...)来填充源数据库文件的列表。当你点击它时,会打开另一个对话框,里面有一个文件列表和它们的路径。在网络文件共享中,提供源数据库的数据文件所在的路径。

点击确定,在源数据库文件文本框中加载文件列表。
目标数据库名称
指定目标数据库名称的名称。在这个演示中,目标数据库是Stackoverflow2010_Copy。
目的地连接
要配置目标连接,点击DestinationConnection下拉框,选择New Connection。一个SMO连接管理器编辑器打开。在服务器名称文本框中,指定目标服务器的主机名,即Nisarg-PC\SQL02。选择Windows认证作为登录方法。

目标数据库文件
指定目标数据库的文件名。这个选项在源数据库文件配置好后启用。一旦源数据库配置完毕,点击气球图标。一个对话框打开。我们要把文件复制到D:\Stackoverflow_Copy 目录;因此,在目标文件夹中指定它。确保源文件名和目标文件名是一样的。

引爆重写
这个选项用于目标服务器上已经存在的数据库。如果你想覆盖目的地数据库的数据,将该值设置为 "真";否则将该值设置为 "假"。在这个演示中,目标数据库并不存在,所以我选择了False。
重新连接源数据库
这个选项是在任务执行失败时使用的。当你设置该选项为True时,任务将重新连接数据库文件。在我们的演示中,选择True。
数据库配置看起来像下面的截图。

点击 "确定 "保存配置并关闭任务编辑器。
执行软件包
包已经被创建;现在是测试转移数据库任务的时候了。要做到这一点,点击菜单栏中的Execute按钮。

包的执行开始了。

一旦软件包执行成功,你可以查看D:\Stackoverflow_Copy位置的数据库文件。

同时,你可以验证名为Stackoverflow2010_new的数据库已经使用复制到SQL02服务器的数据库文件创建。要查看数据库文件,请连接到SQL02实例并运行以下查询。
use Stackoverflow2010_Copy
go
select name,type_desc,physical_name,state_desc from sys.database_files

正如你所看到的,数据库 stackoverflow2010_new 已经被创建。
总结
在这篇文章中,我们学习了如何使用转移数据库任务来在两个SQL Server实例之间复制整个数据库。在下一篇文章中,我们将学习如何在两个数据库之间复制特定对象。请继续关注。