使用SQL語句進行數據庫恢復時數據庫已被佔用的解決方法

    有時候我們在操作數據庫的時候會提示當前有一個或多個進程在使用數據庫,訪問被拒絕,這時我們就需要查看服務器中那些訪問我們需要操作的數據庫的進程,然後把它們全部都結束掉(除了本訪問進程外),這些進程都是會被存在公共數據庫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();

 

這種數據庫已被佔用的情況很多時候是出現在恢復或者其他一些重用的情況下,所以都必須先做這種處理後再進行以上操作。

發佈了29 篇原創文章 · 獲贊 3 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章