SQL Server User Instances error: Existing databases has reached the max number allowed
SQL Server User Instances error: Existing databases has reached the max number allowed
我在 Visual Studio 2008 年使用 C# 循环访问我 PC 上的 MDF 文件并从中提取数据。我正在使用 Table 适配器指向本地 MDF 文件。
最近我的一台电脑拒绝让我附加任何新的数据源,因为它说
System.Data.SqlClient.SqlException: Unable to create/attach any new database because the number of existing databases has reached the
maximum number allowed: 32766
即使我启动一个新的 Windows 应用程序并尝试将 MDF 文件(在我的桌面上)添加到它作为数据源,我也会收到上述错误。
谁能告诉我如何 remove/delete 现有连接?
我的代码在另一台 PC 上运行良好,我已经在我的 PC 上重新安装 Visual Studio,但仍然出现此错误。
C# Table 适配器代码:
tmTableAdapter.Connection.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename='" + pathofmdffile + "';Integrated Security=True;Connect Timeout=30;User Instance=True";
tmTableAdapter.Connection.Open();
重新安装 VS 无济于事,因为错误来自 SQL 服务器。
查看这些包含大量有用信息的 MSDN 页面:
- SQL Server Express User Instances
- SQL Server 2005 Express Edition User Instances
- User Instances for Non-Administrators
由于您使用的是 "User Instances",我猜当连接到主 SQLEXPRESS 实例时,数据库不会出现。
要检查的事项:
在 SSMS 中,通过执行以下操作连接到您最后连接的数据库:
- 转到对象资源管理器
- 与数据库引擎的新连接
- 在 "Connect to Server" 弹出窗口中:
- 单击 "Options >>" 按钮
- 转到 "Additional Connection Properties" 选项卡
- 在文本区输入以下内容:
User Instance = true
- 单击 "Connect" 按钮
- 展开 "Databases" 文件夹。你应该看到它们,命名为 MDF 文件的完整路径
- 右击数据库
- 转到"Tasks >"
- 第一个选项是"Detach"
显然这对于 32,766 个数据库来说不实用,但对于一些数据库来说这是最好的选择。
默认情况下,sqlservr.exe 进程会挂起 60 分钟,在它终止之前附加的任何数据库都会添加到列表中,并且可能会重置过期计数器。您可以通过连接到最近连接的数据库立即结束该过程(如上所述;这些步骤将适用于新查询,或者如果通过对象资源管理器连接,则右键单击实例名称并转到 "New Query"),以及 运行 以下内容:
SHUTDOWN;
这将一次性清除所有连接的数据库。
将超时设置为小于 60 分钟。根据 SQL Server Express User Instances 页面(同上 link):
A system administrator on the parent instance can set the duration of the time-out period for a user instance by using sp_configure to change the user instance timeout option. The default is 60 minutes.
在 SSMS 中(确保您已连接到 parent 实例):
-- 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"分离一个或多个数据库:
SSEUtil.exe
写于2005年,之后就没有更新过(当前版本是v1.0.2130)
下载地址:https://www.microsoft.com/en-us/download/confirmation.aspx?id=3990
使用-d[etach] <dbpath[*]>|name=<dbname>
命令
在以下目录中查找,其中将包含 4 个系统 DB:
在 XP / Vista 上:C:\Documents and Settings{用户名}\Local Settings\Application Data\Microsoft\Microsoft SQL 服务器 Data\SQLEXPRESS
在 Windows 7 及更高版本上:C:\Users{用户名}\AppData\Local\Microsoft\Microsoft SQL 服务器 Data\SQLEXPRESS
这主要只是信息性的,因为只要 SQL 服务器进程是 运行ning,就无法删除这些文件。
对于持续的基础,如果您将在一个循环中附加许多数据库,您可以在使用完后通过 运行ning sp_detach_db 以编程方式在该过程中删除它们每个数据库:
USE [master];
ALTER DATABASE [{DatabaseName}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
EXEC sp_detach_db @dbname =N'{DatabaseName}';
仅供参考,"User Instances" 现在已弃用。您应该考虑使用 SQL Server Express LocalDB.
我在 Visual Studio 2008 年使用 C# 循环访问我 PC 上的 MDF 文件并从中提取数据。我正在使用 Table 适配器指向本地 MDF 文件。
最近我的一台电脑拒绝让我附加任何新的数据源,因为它说
System.Data.SqlClient.SqlException: Unable to create/attach any new database because the number of existing databases has reached the maximum number allowed: 32766
即使我启动一个新的 Windows 应用程序并尝试将 MDF 文件(在我的桌面上)添加到它作为数据源,我也会收到上述错误。
谁能告诉我如何 remove/delete 现有连接?
我的代码在另一台 PC 上运行良好,我已经在我的 PC 上重新安装 Visual Studio,但仍然出现此错误。
C# Table 适配器代码:
tmTableAdapter.Connection.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename='" + pathofmdffile + "';Integrated Security=True;Connect Timeout=30;User Instance=True";
tmTableAdapter.Connection.Open();
重新安装 VS 无济于事,因为错误来自 SQL 服务器。
查看这些包含大量有用信息的 MSDN 页面:
- SQL Server Express User Instances
- SQL Server 2005 Express Edition User Instances
- User Instances for Non-Administrators
由于您使用的是 "User Instances",我猜当连接到主 SQLEXPRESS 实例时,数据库不会出现。
要检查的事项:
在 SSMS 中,通过执行以下操作连接到您最后连接的数据库:
- 转到对象资源管理器
- 与数据库引擎的新连接
- 在 "Connect to Server" 弹出窗口中:
- 单击 "Options >>" 按钮
- 转到 "Additional Connection Properties" 选项卡
- 在文本区输入以下内容:
User Instance = true
- 单击 "Connect" 按钮
- 展开 "Databases" 文件夹。你应该看到它们,命名为 MDF 文件的完整路径
- 右击数据库
- 转到"Tasks >"
- 第一个选项是"Detach"
显然这对于 32,766 个数据库来说不实用,但对于一些数据库来说这是最好的选择。
默认情况下,sqlservr.exe 进程会挂起 60 分钟,在它终止之前附加的任何数据库都会添加到列表中,并且可能会重置过期计数器。您可以通过连接到最近连接的数据库立即结束该过程(如上所述;这些步骤将适用于新查询,或者如果通过对象资源管理器连接,则右键单击实例名称并转到 "New Query"),以及 运行 以下内容:
SHUTDOWN;
这将一次性清除所有连接的数据库。
将超时设置为小于 60 分钟。根据 SQL Server Express User Instances 页面(同上 link):
A system administrator on the parent instance can set the duration of the time-out period for a user instance by using sp_configure to change the user instance timeout option. The default is 60 minutes.
在 SSMS 中(确保您已连接到 parent 实例):
-- 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"分离一个或多个数据库:
SSEUtil.exe
写于2005年,之后就没有更新过(当前版本是v1.0.2130)下载地址:https://www.microsoft.com/en-us/download/confirmation.aspx?id=3990
使用
-d[etach] <dbpath[*]>|name=<dbname>
命令
在以下目录中查找,其中将包含 4 个系统 DB:
在 XP / Vista 上:C:\Documents and Settings{用户名}\Local Settings\Application Data\Microsoft\Microsoft SQL 服务器 Data\SQLEXPRESS
在 Windows 7 及更高版本上:C:\Users{用户名}\AppData\Local\Microsoft\Microsoft SQL 服务器 Data\SQLEXPRESS
这主要只是信息性的,因为只要 SQL 服务器进程是 运行ning,就无法删除这些文件。
对于持续的基础,如果您将在一个循环中附加许多数据库,您可以在使用完后通过 运行ning sp_detach_db 以编程方式在该过程中删除它们每个数据库:
USE [master];
ALTER DATABASE [{DatabaseName}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
EXEC sp_detach_db @dbname =N'{DatabaseName}';
仅供参考,"User Instances" 现在已弃用。您应该考虑使用 SQL Server Express LocalDB.