2009-12-14 55 views
3

爲SQLEXPRESS的MSDN documentation說:SQL Server Express 2008不分離自動附加文件?

當應用程序首次建立了從SQL Server Express中的一個運行實例的連接時,SQL Server Express將自動附加一個.mdf文件。當用戶關閉應用程序時,SQL Server Express將從實例中分離.mdf文件。

這看起來沒有發生。如果我用新名稱替換MDF文件(當然在刪除日誌文件後),SQL Server Express將拒絕附加它。

我已經試過幾乎所有的連接字符串參數可能的組合,並且它讓我發瘋。有什麼建議麼?

回答

4

分離/關閉確實發生。如果它不會發生,那麼你不可能替換MDF文件,因爲它會被使用。您引用的文檔不完全準確。正確的文件是在SQL Server 2005 Express Edition User Instances

  • 具有自動 關閉選項設置所以用戶實例的數據庫,如果有 爲8-10 分鐘數據庫的連接,該數據庫將關閉並 該文件已關閉。這會自動發生 ,但它可能需要 ,而特別是如果連接 池已爲您的 連接啓用。
  • 通過調用 sp_detach_db從實例中分離數據庫 將關閉該文件。這個 是Visual Studio使用的方法到 確保數據庫文件是 當IDE在 用戶實例之間切換時關閉。

如果我斗膽嘗試時,視爲錯誤猜我會說,數據庫沒有拆下來,但自動關閉,並刪除LDF後replcing的MDF會(理所當然)打開數據庫。

由於旁註:

  • 一個永遠也不會刪除LDF文件。如果您想要恢復數據庫,請將替換爲 MDF和LDF與新的。
  • 確保您替換爲正確的MDF和LDF版本。 SQL Server可以升級數據庫,但不能降級它。
  • 獲取錯誤。如果SQL Express拒絕附加數據庫,它會給出一個理由。查看RANU創建的ERRORLOG(在用戶配置文件中),systen事件日誌或附加分析器到用戶實例。
+0

這是至少部分地不正確。 (1)我沒有使用用戶實例(它們已被棄用),(2)我引用的XCOPY部署文檔特別聲明不分發/複製LDF文件。 也就是說,症狀似乎與數據庫關閉但未分離的情況相匹配。這不是微軟所說的。在應用程序可能關閉的所有情況下調用「sp_detach_db」似乎是一個相當醜陋的解決方法。 – curtosis 2009-12-14 18:49:59

+0

Sry,我假設你使用AttachDBFilename,因爲絕大多數用戶沒有實現這種退化。 – 2009-12-14 18:52:18

+0

是的,我正在使用AttachDBFilename,因爲這是「XCOPY部署」的工作原理。然而,這與RANU完全不同。 – curtosis 2009-12-14 18:54:12

0
private static void DetachMdf(string dbServer, string dbName) 
    { 
     SqlConnection.ClearAllPools(); 
     using (SqlConnection conn = new SqlConnection(string.Format("Server={0};Database=master;Integrated Security=SSPI", dbServer))) 
     { 
      conn.Open(); 
      using (SqlCommand cmd = new SqlCommand("sp_detach_db", conn)) 
      { 
       cmd.CommandType = CommandType.StoredProcedure; 
       cmd.Parameters.AddWithValue("@dbname", dbName); 
       cmd.ExecuteNonQuery(); 
      } 
     } 
    } 
相關問題