簡體   English   中英

SQL Server用戶實例錯誤:現有數據庫已達到允許的最大數量

[英]SQL Server User Instances error: Existing databases has reached the max number allowed

我在Visual Studio 2008中使用C#在我的PC上循環MDF文件並從中提取數據。 我正在使用表適配器指向本地MDF文件。

最近我的一台PC拒絕讓我附上任何新的數據源,正如它所說的那樣

System.Data.SqlClient.SqlException:無法創建/附加任何新數據庫,因為現有數據庫的數量已達到允許的最大數量:32766

即使我啟動一個全新的Windows應用程序並嘗試將MDF文件(在我的桌面上)作為數據源添加到它,我也會收到上述錯誤。

誰能告訴我如何刪除/刪除現有連接?

我的代碼在另一台PC上工作正常,我在我的電腦上重新安裝了Visual Studio但仍然出現此錯誤。

C#表適配器代碼:

tmTableAdapter.Connection.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename='" + pathofmdffile + "';Integrated Security=True;Connect Timeout=30;User Instance=True";
tmTableAdapter.Connection.Open();

重新安裝VS將無法解決,因為錯誤來自SQL Server。

看看這些有很多好消息的MSDN頁面:

由於您使用的是“用戶實例”,我想連接到主SQLEXPRESS實例時,DB不會顯示。

要檢查的事項:

  • 在SSMS中,通過執行以下操作連接到上次連接的數據庫:

    • 轉到對象資源管理器
    • 與數據庫引擎的新連接
    • 在“連接到服務器”彈出窗口中:
    • 單擊“選項>>”按鈕
    • 轉到“其他連接屬性”選項卡
    • 在文本區域中輸入以下內容:
      User Instance = true
    • 單擊“連接”按鈕
    • 展開“數據庫”文件夾。 您應該全部看到它們,命名為MDF文件的完整路徑
    • 右鍵單擊數據庫
    • 轉到“任務>”
    • 第一個選項是“分離”

    顯然這對於​​32,766個數據庫來說並不實用,但對於少數數據庫來說這是最好的選擇。

  • 默認情況下, sqlservr.exe進程會掛起60分鍾,並且在終止之前附加的任何數據庫都會添加到列表中,並可能會重置到期計數器。 您可以通過連接到最新附加的數據庫立即結束該過程(如上所述;這些步驟適用於新查詢,或者如果通過對象資源管理器連接,則右鍵單擊實例名稱並轉到“新查詢” ),並運行以下內容:

     SHUTDOWN; 

    這將一次性清除所有連接的數據庫。

  • 將超時設置為小於60分鍾。 根據SQL Server Express用戶實例頁面(與上面相同的鏈接):

    父實例上的系統管理員可以使用sp_configure更改用戶實例超時選項來設置用戶實例的超時期限。 默認值為60分鍾。

    在SSMS中(確保您已連接到實例):

     -- View current setting (in the "run_value" field) EXEC sp_configure 'user instance timeout' -- Documentation says default is 60 but mine was 5 -- If you can't see the option, run the following: EXEC sp_configure 'show advanced options', 1; RECONFIGURE; -- To change it, run the following: EXEC sp_configure 'user instance timeout', 5; 
  • 使用“SQL Server Express Utility”分離一個或多個數據庫:

  • 查看以下目錄中將包含4個系統DB:

    • 在XP / Vista上: C:\\ Documents and Settings {UserName} \\ Local Settings \\ Application Data \\ Microsoft \\ Microsoft SQL Server Data \\ SQLEXPRESS

    • 在Windows 7及更高版本: C:\\ Users {UserName} \\ AppData \\ Local \\ Microsoft \\ Microsoft SQL Server Data \\ SQLEXPRESS

    這主要是信息性的,因為只要SQL Server進程正在運行,就無法刪除這些文件。


對於持續進行的基礎,如果要在循環中附加許多DB,則可以通過在使用每個DB時運行sp_detach_db以編程方式去除它們:

USE [master];
ALTER DATABASE [{DatabaseName}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
EXEC sp_detach_db @dbname =N'{DatabaseName}';

僅供參考,“用戶實例”現已棄用。 您應該考慮使用SQL Server Express LocalDB

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM