SQL Server 데이터베이스는 언제 쿼리를 수락 할 준비가 되셨습니까?


11

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'.

이 시간 전에 데이터베이스 XYZ의 상태를 확인 ONLINE하면 다음 명령문을 사용하고 있습니다.

SELECT state_desc FROM sys.databases WHERE name='XYZ'

...하지만 C # 응용 프로그램을 사용하여이 데이터베이스에 연결하려고하면 데이터베이스에 연결할 수 없습니다.

오류는 다음과 같습니다

'asd'사용자의 로그인에 실패했습니다.
이유 : 명시 적으로 지정된 데이터베이스를 열지 못했습니다.

세 명의 다른 사용자 (응용 프로그램에 대해 정의 된 Windows 사용자, sa, SQL Server 사용자)를 시도했습니다. OS를 시작할 때 응용 프로그램을 실행할 때 문제가 발생하지만 시작 후에 수동으로 시작하면 오류가 발생하지 않으므로 모든 SQL Server 설정과 방화벽 설정이 올바른 것으로 생각합니다.

또한이 전에 서비스 상태가 실행 중인지 확인했습니다.

데이터베이스가 실제로 온라인 상태이고 쿼리 준비가되었는지 확인하기 위해 무엇을 확인해야합니까?

나는 명확한 이유에 근거하지 않고 시간 동안 지연시키는 대신 데이터베이스를 쿼리해도 괜찮다는 것을 알려주는 키를 찾고 있습니다.

"데이터베이스 'XYZ'시작 중"텍스트에 대한 오류 로그를 스캔하려고했지만 SQL Server 오류 로그 경로에 대한 애플리케이션 설정을 추가해야합니다. 또한이 문구를 찾을 때까지 파일을 여러 번 읽는 것을 의미합니다.

답변:


23

SQL Server 데이터베이스는 다음과 같이 즉시 쿼리를 수락 할 준비가되었습니다.

SELECT DATABASEPROPERTYEX(N'database name', 'Collation')

반환하지 않습니다 NULL.

DATABASEPROPERTYEX(Transact-SQL) 설명서에서 :

참고 : ONLINE데이터베이스가 열려 있고 아직 복구되지 않은 상태가 반환 될 수 있습니다. 데이터베이스가 연결을 수락 할 수있는시기를 식별하려면의 Collation 속성을 쿼리하십시오 DATABASEPROPERTYEX. 데이터베이스 데이터 정렬이 null이 아닌 값을 반환하면 데이터베이스에서 연결을 수락 할 수 있습니다. Always On 데이터베이스의 경우 database_state또는의 database_state_desc열을 쿼리하십시오 sys.dm_hadr_database_replica_states.


3

SQL Server 데이터베이스는 시작되지만 트랜잭션을 앞뒤로 롤백하려면 트랜잭션 로그를 분석해야합니다. 이 프로세스는 장기간 실행되는 트랜잭션, 많은 (수천 개의) 사용자 데이터베이스 또는 많은 수의 가상 로그 파일이있는 데이터베이스의 경우 밀리 초에서 수 시간 (일)까지 소요될 수 있습니다.

복구가 완료되고 데이터베이스가 준비되었을 때만 앱을 가져 오려면 애플리케이션이 연결을 다시 시도하도록하십시오.

앱이 SQL Server에 즉시 액세스 할 수 있지만 아직 쿼리를 실행할 수 없도록하려면 기본 데이터베이스를 사용자 데이터베이스 대신 TempDB로 설정하십시오. 사용자 데이터베이스를 사용할 수없는 경우에도 바로 온라인 상태 일 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.