与.Net中的数据库备份和还原相关的问题

时间:2011-11-21 17:37:39

标签: c# sql-server

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

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

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

3 个答案:

答案 0 :(得分:3)

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

如果您只是将正在运行的.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

答案 1 :(得分:1)

不要仅通过复制数据库文件进行备份。使用SQL命令BACKUP DATABASE。使用它,服务器不需要停止,服务器可以清理内部资源。

答案 2 :(得分:1)

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

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