当前位置:主页 > 技术专题 > 数据库 >

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

    2011-01-07 10:53 作者:admin 来源:admin 浏览次数:

       有时候我们在操作数据库的时候会提示当前有一个或多个进程在使用数据库,访问被拒绝,这时我们就需要查看服务器中那些访问我们需要操作的数据库的进程,然后把它们全部都结束掉(除了本访问进程外),这些进程都是会被存在公共数据库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();

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

联系方式 | 收费标准 | 上门服务 | 公司简介 | 汇款账户

回天时代有限公司

杭州公司: 杭州市文三路388号钱江科技大厦10楼1016室

华东总部:上海市徐汇区漕溪北路41号汇嘉大厦12楼E室(太平洋一期12楼)

咨询热线:400-889-1122(全国),0512-66099871(苏州),021-58358765(上海),0571-88218821(杭州) 24小时热线:13524645444,案:浙ICP备06024533号