다음을 통해 공유


라우팅 및 메시지 배달 문제 해결

이 섹션에서는 라우팅과 메시지 배달에 관련된 일반적인 문제를 해결하기 위한 제안 사항을 설명합니다.

증상: 전송 큐에 메시지가 남아 있음

Service Broker 메시지 배달이 데이터베이스에서 활성화되었는지 확인합니다. sys.databasesis_broker_enabled 열은 아래 예제에 있는 것처럼 Broker 메시지 배달이 활성화되었는지 여부를 보여 줍니다.

SELECT is_broker_enabled FROM sys.databases
WHERE database_id = DB_ID() ;

메시지가 잘못된 데이터베이스로 배달되는 것을 방지하기 위해 Broker 메시지 배달을 비활성화할 수 있습니다. Service Broker 메시지 배달에 대한 자세한 내용은 Service Broker ID 관리를 참조하십시오. Service Broker 메시지 배달 활성화 방법은 방법: 데이터베이스에서 Service Broker 메시지 배달 활성화(Transact-SQL)를 참조하십시오.

Service Broker 메시지 배달이 활성화되어 있으면 메시지의 sys.transmission_queue 카탈로그 뷰에 있는 transmission_status 열을 확인합니다. 일반적인 오류 메시지는 다음과 같습니다.

메시지 설명

서비스에 대한 경로가 없습니다.

Service Broker가 지정된 서비스에 대한 경로를 찾을 수 없습니다.

대상 Service Broker에 연결할 수 없습니다.

Service Broker가 대상 Service Broker로 메시지를 배달할 수 없습니다.

전송 계층을 사용할 수 없습니다.

인스턴스에 Service Broker 끝점이 없거나 Service Broker 끝점이 제대로 시작되지 않았습니다.

대상 큐가 비활성화되었습니다.

대상 서비스가 사용하는 큐의 STATUS 옵션이 OFF로 설정되었습니다. Service Broker는 STATUS가 OFF인 큐에 새 메시지를 추가하지 않습니다.

데이터를 받는 동안 오류가 발생했습니다: '10054(현재 연결은 원격 호스트에 의해 강제로 끊겼습니다.)'.

대화의 원격측에서 TCP/IP 연결을 수락했지만 메시지 전송을 허용하기 전에 연결을 닫았습니다.

(없음)

Service Broker가 아직 메시지 보내기를 시도하지 않았습니다. 이 경우 Service Broker 메시지 배달이 데이터베이스에서 활성화되지 않았음을 의미할 수 있습니다.

증상: 경로가 있는데 전송 상태에 서비스에 대한 경로 없음이 표시됨

메시지 이후에 경로가 만들어진 경우 이 증상에 대한 가장 일반적인 원인은 경로가 만들어진 후 메시지를 다시 시도하지 않았기 때문입니다. 재시도에 대한 자세한 내용은 Service Broker 라우팅 및 네트워킹을 참조하십시오.

메시지에 지정된 서비스 이름이 경로에 지정된 서비스 이름과 정확하게 일치하는지 확인합니다. Service Broker는 바이트 단위로 이진 비교하여 일치하는 서비스 이름을 찾습니다. 서비스 이름을 지정하는 경로가 존재할 경우 이 비교를 확인할 수 있는 한 가지 방법은 다음 쿼리와 유사한 쿼리를 실행하는 것입니다.

SELECT N'No Exact Match' = tq.to_service_name
FROM sys.transmission_queue AS tq
WHERE NOT EXISTS
    (SELECT remote_service_name
     FROM sys.routes AS routes
     WHERE tq.to_service_name = routes.remote_service_name) ;

결과 집합에 표시되는 서비스 이름은 데이터베이스의 라우팅 테이블에 정확히 일치하는 항목이 없습니다. 서비스 이름을 지정하지 않는 경로는 모든 서비스 이름과 일치합니다. 라우팅에 대한 자세한 내용은 Service Broker 라우팅을 참조하십시오.

메시지가 Broker 인스턴스 식별자를 지정하는 경우 경로가 동일한 Broker 인스턴스 식별자를 지정하는지 또는 Broker 인스턴스 식별자를 지정하지 않는지 확인합니다.

경로가 만료되지 않았는지 확인합니다. sys.routes 카탈로그 뷰의 수명 열에는 경로에 대한 만료 날짜와 시간이 포함됩니다.

증상: 전송 상태에 대상 Service Broker에 연결할 수 없음이 표시됨

대상이 메시지를 수락하지 않았습니다. 이 경우 지정된 서비스 이름이 대상 SQL Server 인스턴스가 호스팅하는 서비스의 이름과 일치하지 않거나 대상에 서비스에 대한 경로가 없음을 의미할 수 있습니다. 이 문제를 해결하려면 대상에 대한 라우팅 및 서비스 구성을 확인합니다.

증상: 전송 상태에 전송 계층을 사용할 수 없음이 표시됨

Service Broker 끝점이 있는지 확인하고 끝점의 상태가 STARTED인지 확인합니다. 끝점이 없으면 새로 만듭니다. Service Broker 끝점에 대한 자세한 내용은 Service Broker 끝점을 참조하십시오. 끝점을 만드는 방법은 방법: Service Broker 네트워킹 활성화(Transact-SQL)를 참조하십시오.

증상: 전송 상태에 '현재 연결은 원격 호스트에 의해 강제로 끊겼습니다'가 표시됨

전송 보안이 잘못 구성되었거나 경로에 대한 TCP/IP 주소가 Service Broker가 아닌 다른 서비스에서 사용 중인 포트를 지정합니다. Service Broker는 Tabular Data Stream 프로토콜을 사용하지 않습니다. 경로는 원격 SQL Server 인스턴스의 Service Broker 끝점이 사용하는 포트에 해당하는 포트를 지정해야 합니다.

Service Broker 끝점 구성을 검사하여 두 인스턴스의 네트워크 보안 설정이 호환되는지 확인합니다. 한 인스턴스에 대한 Service Broker 끝점이 REQUIRED 또는 ENABLED를 지정하는 경우 다른 인스턴스에 대한 Service Broker 끝점은 NONE을 지정할 수 없습니다.

Service Broker 전송 보안에 대한 인증서, 사용자 및 사용 권한을 확인합니다. 전송 보안에 대한 구성은 Service Broker 전송 보안 항목에서 설명합니다.

참고 항목

작업

방법: Service Broker 네트워킹 활성화(Transact-SQL)

개념

Service Broker 라우팅 및 네트워킹
Service Broker 끝점
Service Broker 라우팅
큐 시작 및 중지

관련 자료

sys.databases(Transact-SQL)
sys.transmission_queue(Transact-SQL)
sys.routes(Transact-SQL)
sys.service_broker_endpoints(Transact-SQL)

도움말 및 정보

SQL Server 2005 지원 받기