Sql-Server
使用相同的 .mdf 和 .ldf 文件設置兩個 SQL Server 數據庫
在 SQL Server 2008 R2 實例中,已針對相同的 .mdf 和 .ldf 文件設置了兩個數據庫(第二個是第一個的還原/副本)。
在不影響第一個(生產!)數據庫的情況下,我將如何刪除第二個文件或複制/移動第二個文件的文件?
更新:確實其中之一是待機/只讀。
對於 SQL Server 中的數據庫,有一個名為Auto-Close的設置,旨在最大限度地減少 SQL Server 執行時使用的資源量,但沒有使用者主動執行操作。
此設置在 Express Edition 實例中預設啟用,因為這些實例通常在性能不重要且其他應用程序需要資源的開發人員工作站上執行。
當此功能釋放資源時,實現包括關閉與磁碟上的數據庫文件(.mdf、.ldf 等)關聯的文件句柄。這意味著任何其他應用程序都可能打開它們,包括相同或另一個 SQL Server 實例。
在測試這個場景時,我發現 SQL Server 內部沒有約束(至少在這個特定版本中)可以防止將數據庫附加到磁碟上的同一組文件,只要它們是可讀的。雖然這不是一件好事/安全的事情,但是知道一次只能寫入一個數據庫是一種解脫,因為當打開其中一個數據庫時,這些文件將被 SQL Server 獨占鎖定. 其他數據庫將無法訪問。
要撤消這種情況:
- 分離不需要的數據庫。這將從實例中刪除數據庫,但將文件單獨保留在磁碟上(而
DROP DATABASE
確實刪除了磁碟上的文件)。可能需要重新啟動實例以使其辨識您要保留的數據庫是可訪問的。- 禁用主數據庫的自動關閉,以更好地防止這種情況再次發生。您可能還想在模型系統數據庫(如果適用)中禁用它,以便新數據庫不會繼承此設置。對於生產系統,我建議確保在每個數據庫上都禁用自動關閉;我喜歡使用基於策略的管理來定期進行檢查,但是有很多方法可以做到這一點。