无法还原数据库,因为另一个进程正在使用该文件

时间:2015-12-12 08:15:59

标签: sql sql-server database-restore

我为商店所有者开发了这个应用程序。我希望允许所有者使用该应用程序备份和恢复数据库。备份运行正常,但是恢复导致异常,表示 - 操作系统错误32(进程无法访问该文件,因为它正被另一个进程使用。).Restore数据库异常终止。

         using(var conn = new SqlConnection(ConnectionString))
         {
                 using(SqlCommand cmd = conn.CreateCommand())
                  {
                         string datadirectory = Path.Combine(Environment.CurrentDirectory,@"Data");
                         string query = @"RESTORE DATABASE""{0}""FROM DISK= '{1}' WITH REPLACE";
                         string query = String.Format(query,backupfile,datadirectory + "\\Database.mdf");  
                         conn.Open();
                         SqlCommand command = new SqlCommand(query,conn);
                         command.ExecuteNonQuery();
                  }
         }

我该如何解决这个问题?提前谢谢。

3 个答案:

答案 0 :(得分:0)

使用完所有SQLiteConnection,SQLiteCommand和SQLiteDataReader后,就必须将其丢弃。您创建的第二个命令未正确清除。

此外,您的代码示例实际上没有任何意义。您创建一个从未使用过的命令。然后创建第二个未正确处理的命令。

答案 1 :(得分:0)

是正在阻止的还原文件吗?还是数据库本身仍在运行?

如果正在使用的是数据库,则可以将数据库设置为单用户模式。另一种选择是使数据库暂时脱机,然后再次使其联机。那应该关闭所有现有的连接。小费;使用SSMS,您几乎可以将每个命令转换成SQL脚本,例如使数据库脱机的按钮。单击“脚本”,您会得到类似“使用主数据库更改数据库[AdventureWorks] SET OFFLINE GO”的信息。

答案 2 :(得分:-1)

等等,这是个好消息。看起来应用程序正在运行,数据库在线并且正常运行,那么为什么要恢复?备份是你每天/每小时做的事情......但只有在出现问题时才能恢复。当然你有错误。数据库是实时的,并且sql服务正在使用这些文件,它很好,它不会让你恢复,否则你会丢失大量的数据。

如果您只想测试还原,则需要先关闭sql服务。但是,请确保在此之前进行备份,以便还原最新的。

相关问题