【问题标题】:Issue related to Database Backup and Restore in .Net.Net 中与数据库备份和还原相关的问题
【发布时间】:2011-11-22 03:17:10
【问题描述】:

我有 C#.Net winform 应用程序,该应用程序在 SQLExpress 中具有带有 Windows 身份验证的 SQL Server 数据库。 有一个与备份和还原数据库相关的选项。在 DBbackup 中,我提供了用户选择文件夹和数据库将被复制到该文件夹​​。 对于恢复数据库,我写了以下行:

System.IO.File.Copy(filePath, Application.StartupPath + "\\dbSTK.mdf",true);

它会抛出一个异常,说 dbSTK 已在使用中。如何覆盖已经在使用的文件?

【问题讨论】:

  • 您是否停止了数据库?

标签: c# sql-server


【解决方案1】:

.mdf 文件不是备份文件,而是实际的数据文件。您不能简单地复制正在运行的数据库(或覆盖正在运行的数据库。)通常,您必须使用sp_detach_db 使文件处于可以复制/存档的状态,并使用sp_attach_db(或创建附加数据库)来恢复D b。

如果您只是将正在运行的 .mdf 副本作为备份,那么您很可能无法附加该文件。

虽然以上是分离/附加数据库的正确方法,但我建议实际执行备份/恢复。它不需要使数据库脱机,并且通常是管理备份的更好方法。

如何在 SQL Server 中附加数据文件:http://msdn.microsoft.com/en-us/library/ms179877.aspx

如何在 SQL Server 中分离数据库:http://msdn.microsoft.com/en-us/library/ms188031.aspx

如何在 SQLEXpress 上执行备份:http://msdn.microsoft.com/en-us/ms186865.aspx

如何在 SQLExpress 上恢复备份:http://msdn.microsoft.com/en-us/ms186858

【讨论】:

    【解决方案2】:

    不要只复制数据库文件来备份。使用 SQL 命令BACKUP DATABASE。使用这个,服务器不需要停止,服务器可以清理内部的东西。

    【讨论】:

      【解决方案3】:

      不要复制 mdf 文件。 如果您想通过代码备份,请查看此帖子 Using Smo.Backup to backup SQL Server database to string

      如果您想安排备份(到您的备份文件夹),请使用 sql management studio 中的维护计划向导创建一个新的维护计划: http://msdn.microsoft.com/en-us/library/ms189036.aspx

      【讨论】:

      • SQL Express 不支持维护计划,但 SMO 将是在 .net 代码中执行备份/恢复的好方法
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 1970-01-01
      相关资源
      最近更新 更多