SQL Server 数据库何时准备好接受查询?

Ahm*_*med 12 sql-server-2008 sql-server startup

在 SQL Server 错误日志文件中,我发现了以下几行:

2018-02-22 14:10:58.95 spid17s     Starting up database 'msdb'.
2018-02-22 14:10:58.95 spid16s     Starting up database 'ReportServer'.
2018-02-22 14:10:58.95 spid18s     Starting up database 'ReportServerTempDB'.
2018-02-22 14:10:58.95 spid19s     Starting up database 'XYZ'.
Run Code Online (Sandbox Code Playgroud)

如果我在此之前检查数据库 XYZ 的状态,则ONLINE使用以下语句:

SELECT state_desc FROM sys.databases WHERE name='XYZ'
Run Code Online (Sandbox Code Playgroud)

...但是当我尝试使用 C# 应用程序连接到该数据库时,它无法连接到该数据库。

错误是:

用户“asd”登录失败。
原因:无法打开明确指定的数据库。

我尝试了三个不同的用户(为应用程序定义的 Windows 用户、sa、SQL Server 用户)。当我在操作系统启动时运行应用程序时会出现问题,但是如果我在启动后手动启动它,则不会发生错误,因此我认为所有 SQL Server 设置和防火墙设置都是正确的。

在此之前,我还检查了服务状态是否正在运行。

我还应该检查什么以确保数据库实际上在线并准备好进行查询?

我正在寻找一个密钥,它告诉我可以查询数据库,而不是延迟一段时间(甚至不是基于明确的原因)。

我想扫描文本“启动数据库'XYZ'”的错误日志,但这意味着我必须为SQL Server错误日志的路径添加应用程序的设置。这也意味着多次阅读文件,直到我找到这句话。

Pau*_*ite 24

SQL Server 数据库准备好接受查询,只要:

SELECT DATABASEPROPERTYEX(N'database name', 'Collation')
Run Code Online (Sandbox Code Playgroud)

不回NULL

DATABASEPROPERTYEX(Transact-SQL)的文档中:

注意:ONLINE当数据库正在打开且尚未恢复时,可能会返回该状态。要确定数据库何时可以接受连接,请查询 的 Collat​​ion 属性DATABASEPROPERTYEX。当数据库归类返回非空值时,数据库可以接受连接。对于 Always On 数据库,查询 的database_statedatabase_state_descsys.dm_hadr_database_replica_states