65.9K
CodeProject 正在变化。 阅读更多。
Home

SQL Server 备份实用程序

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.88/5 (43投票s)

2006年4月14日

4分钟阅读

viewsIcon

292188

downloadIcon

13718

恢复/备份 SQL Server 中的选定对象。

引言

每当我们想要备份或迁移 SQL Server 数据库时,大多数人都会选择使用 SQL Server 2000 中的 Enterprise Manager 或 SQL Server 2005 中的 Management Studio 提供的标准备份实用程序。使用 Enterprise Manager 或 Management Studio 的局限性在于,我们只能进行完整备份或差异备份。当我们需要备份大型数据库的一小部分时,这是一项非常繁琐的任务。例如,在我的数据库中,我只想备份 100 个表中的 15 个表。我只想从这些选定的表中备份几条记录。出于这个原因,我一直在寻找一个小型实用程序来满足我的需求。在搜索了数百个实用程序后,我决定自己编写一个。

特点

  • 备份选定对象
  • 备份选定数据
  • 可以单独备份脚本
  • 可以单独备份数据

使用程序

备份数据库

  • 从“工具”菜单打开数据库备份窗口。
  • 输入 SQL Server 的服务器名称、数据库名称、用户名和密码。
  • 单击连接。这将显示数据库中所有可用的表、视图、存储过程、用户定义函数、用户定义数据类型和用户。
  • 选择要从每个表中导出的行数,例如“Top 1000 *”。默认值为“Top 100 percent”,表示所有行。
  • 如果要单独备份数据,请勾选备份数据,然后取消勾选备份对象结构(脚本)
  • 如果要单独备份脚本,请勾选备份对象结构(脚本),然后取消勾选备份数据
  • 从列表中选择要备份的对象。默认情况下,所有对象都已选中。
  • 对表数据应用任何条件。例如,上图中的“StudentID > 120 and StudentID < 200”。这意味着将只导出满足此条件的记录。
  • 如果需要,修改要导出的特定“表”的行数。例如,在上图中的“OtherIncome”表中,“Top 99 *”表示仅导出前 99 行。
  • 单击开始备份。它会要求您输入文件名和位置。请注意,备份文件扩展名为 *.SQLBackup

恢复备份

  • 从“工具”菜单打开数据库恢复窗口。

  • 输入 SQL Server 的服务器名称、数据库名称、用户名和密码。
  • 选择要恢复的数据库备份文件。请注意,该程序的数据库备份文件扩展名为 *.SQLBackup
  • 选择备份文件后,它将显示备份中所有可用的对象。
  • 如果要创建新数据库,请勾选创建新数据库选项。
  • 如果要删除现有数据库并重新创建它,请同时勾选创建新数据库删除现有数据库选项。
  • 从列表中选择要恢复的对象。默认情况下,所有对象都已选中。
  • 单击开始恢复

使用其他功能

  • 如您在备份和恢复表单上看到的,有加载设置另存为设置按钮。一旦我们为备份设置了不同的参数,例如选择对象、指定条件等,就可以将所有这些保存在一个设置文件中。我们可以随时加载这些设置,这样就不需要每次恢复或备份数据库时都输入这些条件。

使用代码

我没有详细描述代码。大部分代码都是自解释且有注释的。只有几点快速说明。我使用了 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()

限制

  • 此实用程序无法备份用户角色和触发器。
  • 备份文件(*.SQLBackup)格式为 Zip 格式。不能使用 Enterprise Manager 进行恢复。(如果您将此文件重命名为 *.zip,您可以使用 WinZip 或其他 Zip 实用程序进行解压并查看其内容。)

增强功能

  • 可以在备份或恢复过程中添加多线程。这将避免表单冻结,尤其是在备份或恢复大型数据库时。
  • 此程序可以进一步增强,包含一个 Windows 服务,可以在没有用户交互的情况下定期备份 SQL Server。因此,此实用程序可用于您的日常备份。

致谢

我使用了 SharpZipLib(ICSharpCode.SharpZipLib.dll),这是一个来自 www.icsharpcode.net 的免费开源 Zip 实用程序库,用于压缩备份目录。此文件包含在 Bin\Release 文件夹中。

要求

  • Visual Studio .NET 2005(用于源代码)
  • .NET Framework 2.0
  • MS SQL Server 2000,或 MS SQL Express 2005,或 MS SQL Server 2005 客户端组件(用于 SQL-DMO 库)
© . All rights reserved.