我的C#.Net winform应用程序在带有Windows身份验证的SQLExpress中具有SQL Server数据库。 有一个与备份和恢复batabase相关的选项。在DBbackup中,我已经为用户提供了选择文件夹,数据库将被复制到该文件夹。 对于恢复数据库,我写了以下一行:
System.IO.File.Copy(filePath, Application.StartupPath + "\\dbSTK.mdf",true);
它抛出一个异常,说dbSTK已经在使用中。如何覆盖已在使用的文件?
答案 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