0

I have wrote this code but its generating error

please help

System.IO.File.Copy("JDB.mdf", "d:\\JDB.mdf", true);
System.IO.File.Copy("JDb_log.ldf", "d:\\JDb_log.ldf", true);

the error is

The process cannot access the file 'JDB.mdf' because it is being used by another process.

Please help me

4

2 回答 2

3
  1. 该文件正被某个进程使用。我相信数据库仍然附加到 Sql Server。
  2. 使用 Sys Internal 的 Process Explorer 工具找出使用该文件的程序。
  3. 为什么不使用 SQL 备份工具来备份数据库?

查看实时 SQL Server 备份期间会发生什么?

如果您仍想备份或复制 ldf mdf 文件,则可以执行以下步骤: 1. 分离数据库

USE MASTER;
GO
-- Take database in single user mode -- if you are facing errors
-- This may terminate your active transactions for database
ALTER DATABASE DatabaseName
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO
-- Detach DB
EXEC MASTER.dbo.sp_detach_db @dbname = N'DatabaseName'
  1. 打开 Windows 资源管理器,转到 ldf 和 mdf 文件所在的文件夹,然后手动复制文件。

  2. 重新附加数据库:

USE [master]
    GO
    CREATE DATABASE [DatabaseName] ON
    ( FILENAME = N’C:\Data\DataBase_Data.mdf’ ),
    ( FILENAME = N’C:\Data\Database_Log.ldf’ )
    FOR ATTACH
    GO
    IF EXISTS ( SELECT name FROM master.sys.databases sd  
    WHERE name = N’DataBaseName’ AND SUSER_SNAME(sd.owner_sid) = SUSER_SNAME() )
        EXEC [AdventureWorks].dbo.sp_changedbowner @loginame=N’sa’,@map=false
  1. 如果您想以编程方式执行此操作,则可以使用 ADO.NET 执行步骤 1、2、3 中给出的命令,并使用 c# 文件复制命令来复制文件。
于 2013-05-12T11:01:27.800 回答
1

下载Process Explorer并运行该程序。

选项1:

单击查找菜单,然后选择查找句柄或 DLL...

键入文件名(在您的情况下为 JDB.mdf)

输入搜索词组后,单击“搜索”按钮

一旦您知道文件锁定了您的哪个进程,就需要关闭该进程(通过关闭该程序)。另一种选择是在终止该进程的进程资源管理器中使用 KILL。

选项 2:

从错误消息中可以看出,.mdf 文件已附加到 SQL Server 实例。如果您有多个实例正在运行,请确保它与任何其他实例分离。

于 2013-05-12T08:39:00.007 回答