使用 VB.NET 和 SQL-DMO 的 SQL Server 数据库备份实用程序(新版本)
一个用于备份和恢复 SQL Server 表、视图、用户定义函数和存储过程的 Windows 应用程序
新版本(1.1.0)
距离我写这篇文章已经一年了。我收到了很多关于这个备份实用程序的回复。因此,我决定更新这个程序,并对其进行了重大改进,使其在功能和性能方面更加稳定。您可以阅读我的原始文章,《SQL Server 备份实用程序(旧版本)》。
新版本更改列表如下:
- 备份文件的扩展名现在是 .ZIP 而不是 .SQLBackup。这是为了避免任何混淆。
- 旧版本在某些情况下恢复数据时存在问题。此版本应已修复。
- 已添加多线程用于备份和恢复过程。这样,程序在长时间运行时就不会冻结。
- UI 已改进,可显示备份和恢复的正确状态。
- 包含 GNU 许可证。
我将在接下来的几天内对这个程序进行更多更新。请定期访问我的网站 shabdar.org 以获取最新源代码。
引言
每当我们想要备份或移动 SQL Server 数据库时,我们大多数人都会倾向于使用 SQL Server 2000 中的 Enterprise Manager 或 SQL Server 2005 中的 Management Studio 提供的常规备份实用程序。使用 Enterprise Manager 或 Management Studio 的局限性在于,我们只能使用完整备份或差异备份。当我们只想备份一个大数据库的一小部分时,这是一项非常繁琐的任务。例如,在我的数据库中,我想只备份 100 个表中的 15 个表,或者我可能只想备份这些选定表中的几条记录。因此,我一直在寻找一个允许我这样做的实用程序。在搜索了数百个实用程序后,我决定编写自己的实用程序。
特点
- 备份选定的对象
- 备份选定的数据
- 仅备份脚本
- 仅备份数据
- 备份脚本和数据
- 支持通过 Web、LAN 甚至本地 PC 从远程服务器进行备份
使用程序

要备份数据库,请执行以下操作:
- 从工具菜单打开数据库备份窗口。
- 输入 SQL Server 的服务器名称、数据库名称、用户名和密码。
- 单击连接。这将显示数据库中所有可用的表、视图、存储过程、用户定义函数、用户定义数据类型和用户。
- 如果要仅备份数据,请勾选备份数据,并取消勾选备份对象结构(脚本)。
- 如果要仅备份脚本,请勾选备份对象结构(脚本),并取消勾选备份数据。
- 从列表中选择要备份的对象。默认情况下,所有对象都已选中。在上图中,
Adv_StackedBar2
和Adv_UserRoleTypes
表将从备份中排除。 - 对表数据应用任何条件。例如,在上图中,
UserID > 10 and UserID < 25
。这意味着只有满足此条件的记录才会被导出。 - 修改特定“表”上要导出的行数。例如,在上图中,
Top 20 *
,表示Adv_TodaysOutlook
表只导出前 20 行。 - 单击开始备份。它会提示您输入文件名和位置。请注意,备份文件扩展名为 *.zip。请记住,这不是标准的 SQL Server 备份文件。它只是一个 zip 文件,其中包含表、视图、存储过程等的脚本。它还包含行(*.dat)格式的数据文件。
要恢复备份,请执行以下操作:
- 从工具菜单打开数据库恢复窗口。
- 输入 SQL Server 的服务器名称、数据库名称、用户名和密码。
- 选择要恢复的数据库备份文件(*.zip)。请注意,此实用程序只能恢复由本实用程序本身创建的备份文件(*.zip)。它无法恢复常规 SQL Server 备份文件。
- 选择备份文件后,它将显示备份中的所有可用对象。
- 如果要创建新数据库,请勾选创建新数据库选项。
- 如果要删除现有数据库并重新创建它,请勾选删除现有数据库选项。
- 从列表中选择要恢复的对象。默认情况下,所有对象都已选中。
- 单击开始恢复。
使用其他功能
正如您所见,备份和恢复窗体都包含预设组合框。它的作用是记录每次备份或恢复数据库时的服务器名称、数据库名称、用户名和密码信息。下次您想使用同一服务器时,无需再次输入所有这些参数。您可以从预设组合列表进行选择。它还会记住上次访问的 SQL Server 名称。
使用代码
我没有详细描述代码。大部分代码都是自解释且有注释的。这里只做一些简要说明。我使用 SQL-DMO 库处理所有与数据库相关的任务。对于 SQL-DMO 库,您的计算机上必须安装 SQL Express 或 SQL Server 2000 客户端工具。
来自 SQL-DMO 库的对象
'Server object from SQL-DMO library
Dim oServer As New SQLServer2
'Database object from SQL-DMO library
Dim db As SQLDMO.Database2
'BCP Utility from SQL-DMO Library
Dim objBCP As New SQLDMO.BulkCopy2
将数据导出到 SQL Server 文件的函数
objBCP.DataFilePath = "c:\temp\EmployeeData.dat"
db.Tables.Item("Employee").ExportData(objBCP)
为 SQL Server 对象生成 SQL 脚本
'Generate script with drop statement
Dim SQL as String = db.GetObjectByName("Employee").Script_
(SQLDMO_SCRIPT_TYPE.SQLDMOScript_Drops) + db.GetObjectByName("Employee").Script()
限制
- 此实用程序无法备份用户角色和触发器。
- 备份文件为 zip 格式。(您可以使用 winzip 或其他 zip 实用程序解压并查看其内容)。它不能使用 SQL Server Enterprise Manager 进行恢复。
增强功能
该程序可以进一步增强,包括一个 Windows 服务,该服务可以对 SQL Server 进行定期备份而无需用户交互。因此,该实用程序可用于您的日常备份。
致谢
我使用了 SharpZipLib(ICSharpCode.SharpZipLib.dll),这是一个免费的开源 zip 实用程序库,可在此处获得。该文件包含在 Bin\Release 文件夹中。
要求
- Visual Studio .NET 2005(用于源代码)
- .NET Framework 2.0
- Microsoft SQL Server 2000 或 Microsoft SQL Express 2005 或 Microsoft SQL Server 2005 客户端组件(用于 SQL-DMO 库)
如何安装实用程序
确保您的计算机上已安装 SQL Server 2000 或 2005 客户端组件。如果您不想安装这些组件,可以安装Microsoft SQL Server 2005 向后兼容性组件。这些组件是 SQL-DMO 库所必需的。
从本文顶部提供的链接下载安装程序 zip 文件。解压并运行 setup.exe。它应该会在您的程序菜单和桌面上创建图标。
如何使用源代码
从本文顶部提供的链接下载源代码 zip 文件,并使用 Visual Studio 2005 运行 DatabaseBackup.sln 解决方案文件。