使用SQL语句进行数据库恢复时数据库已被占用的解决方法

王朝学院·作者佚名  2009-10-03
窄屏简体版  字體: |||超大  

有时候我们在操作数据库的时候会提示当前有一个或多个进程在使用数据库,访问被拒绝,这时我们就需要查看服务器中那些访问我们需要操作的数据库的进程,然后把它们全部都结束掉(除了本访问进程外),这些进程都是会被存在公共数据库master数据库的sysprocesses表中,所以我们必须先把他们给拿出来然后一个一个结束掉.

///其中db_name是你所要操作的数据库

SqlConnection conn;

conn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=db_name;");

conn.Open();

string sql1 = "select spid from master..sysprocesses where dbid=db_id('db_name')";

SqlDataAdapter Da = new SqlDataAdapter(sql1, conn);

DataTable spidTable = new DataTable();

Da.Fill(spidTable);//把进程名称放到DataTable中

SqlCommand cmd = new SqlCommand();

cmd.CommandType = CommandType.Text;

cmd.Connection = conn;

if (spidTable.Rows.Count > 1)//只留下一个

{

//强制结束掉所有链接AnalysisSystem数据库的进程

for (int irow = 0; irow < spidTable.Rows.Count - 1; irow++)

{

cmd.CommandText = "kill" + spidTable.Rows[irow].ToString();//关闭用户进程语句

cmd.ExecuteNonQuery();

}

}

conn.Close();

conn.Dispose();

这种数据库已被占用的情况很多时候是出现在恢复或者其他一些重用的情况下,所以都必须先做这种处理后再进行以上操作。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航