일반적인 Notification Services 문제 해결
Microsoft는 Notification Services 사용자에게 발생하는 문제 및 해결 방안에 대한 다음과 같은 목록을 만들었습니다.
중요: |
---|
Notification Services 응용 프로그램 문제를 해결할 때는 먼저 Windows 이벤트 뷰어의 응용 프로그램 로그를 확인하십시오. 일반적으로 응용 프로그램 로그의 이벤트는 응용 프로그램 문제의 원인을 파악하는 가장 좋은 방법입니다. |
배포 및 관리 문제 해결
시간 초과 오류로 인해 인스턴스를 만들 수 없음
Notification Services 인스턴스를 만드는 프로세스는 여러 가지 작업을 수행하며 작업마다 제한 시간이 정해져 있습니다. 데이터베이스 생성 프로세스는 일반적으로 다른 작업보다 시간이 많이 걸리므로 이 작업의 제한 시간은 다소 긴 10분입니다. 그러나 인스턴스 구성 또는 응용 프로그램 정의에서 데이터베이스 크기를 기가바이트 수준으로 아주 크게 지정할 경우 생성 프로세스가 시간 초과될 수 있습니다. 이 경우 제한 시간 메시지가 표시됩니다.
인스턴스를 성공적으로 만들려면 ADF 및 구성 파일에서 데이터베이스 파일 크기를 줄인 후 인스턴스를 만들어야 합니다. 그런 후 SQL Server Management Studio 또는 Transact-SQL 문을 사용하여 데이터베이스 파일의 크기를 늘릴 수 있습니다.
트랜잭션 로그가 꽉 차서 인스턴스를 만들 수 없음
로그가 꽉 찼거나 거의 꽉 찬 경우 Notification Services 인스턴스를 만들지 못할 수 있습니다. 이 경우 트랜잭션 로그의 size 및 maxsize 값을 늘린 후 다시 시도하십시오.
인스턴스를 업데이트할 수 없음
응용 프로그램 정의 또는 인스턴스 구성의 오류로 인해 Notification Services 인스턴스를 업데이트할 수 없습니다. 인스턴스를 업데이트하기 전에 모든 XML 파일의 유효성을 검사하여 이 오류의 발생 가능성을 줄여야 합니다. 오류가 발생하면 해당 파일을 수정한 후 업데이트를 다시 시도하십시오.
인스턴스를 업데이트하면 인스턴스 및 응용 프로그램 데이터베이스가 수정되므로 항상 인스턴스를 업데이트하기 전에 인스턴스 및 응용 프로그램 데이터베이스를 백업하십시오.
인스턴스를 업데이트하는 방법은 인스턴스 속성 업데이트를 참조하고 응용 프로그램을 업데이트하는 방법은 응용 프로그램 업데이트를 참조하십시오.
Windows 서비스가 시작되지 않음
NS$instanceName Windows 서비스를 사용하여 Notification Services 엔진 구성 요소를 시작하려고 하는데 Windows 서비스가 시작되지 않으면 서비스 암호가 올바르지 않거나, 시작하려는 인스턴스 이름이 Notification Services 인스턴스 이름과 정확히 일치하지 않거나, 데이터베이스에 액세스할 수 없거나, 서비스가 실행되도록 구성된 Windows 사용자 계정에 서비스로 로그온할 수 있는 권한이 없는 것일 수 있습니다. 문제를 해결하려면 다음을 시도하십시오.
- **서비스 계정이 Windows의 SQLServer2005NotificationServicesUser$**ComputerName 그룹 멤버인지 확인합니다. SQLServer2005NotificationServicesUser$ComputerName 그룹의 멤버에게는 NSService.exe를 비롯한 Notification Services 이진 파일을 읽고 실행할 권한이 있습니다.
- Windows 암호를 다시 설정합니다. Notification Services 명령을 사용하여 서비스 암호를 구성할 때 암호에 특수 문자가 있거나 암호를 잘못 입력하면 NS$instanceName 서비스가 시작되지 않습니다.
이 오류를 해결하려면 서비스 응용 프로그램을 사용하여 암호를 업데이트하십시오.- 제어판에서 관리 도구를 엽니다.
- 서비스를 엽니다.
- **NS$**instanceName 서비스(instanceName은 Notification Services 인스턴스의 이름을 나타냄)를 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.
- 로그온 탭을 클릭하고 암호 및 암호확인 입력란에 암호를 입력합니다. 확인을 클릭합니다.
- 해당 서비스를 마우스 오른쪽 단추로 클릭한 다음 시작을 클릭합니다.
- 데이터베이스를 확인합니다. 서비스는 인스턴스 및 응용 프로그램 데이터베이스에 액세스할 수 없으면 시작되지 않습니다.
- 인스턴스 레지스트리의 데이터베이스 이름이 올바릅니까?
- 인스턴스 및 응용 프로그램 데이터베이스를 호스팅하는 데이터베이스 엔진 인스턴스가 실행되고 있습니까?
- 인스턴스 및 응용 프로그램 데이터베이스를 사용할 수 있습니까?
- 서비스의 데이터베이스 액세스를 방해하는 네트워크 문제가 있습니까?
- Services 응용 프로그램에서 서비스를 시작합니다.net start 명령을 사용하여 서비스를 시작할 때는 명령 프롬프트에서 사용한 문자가 구성 파일에서 사용한 유니코드 문자와 일치해야 합니다. 문자가 일치하지 않으면 인스턴스를 시작할 수 없습니다.
이 오류를 해결하려면 Windows Services 응용 프로그램을 사용하여 서비스를 시작하십시오.- 제어판에서 관리 도구를 엽니다.
- 서비스를 엽니다.
- **NS$**instanceName 서비스를 마우스 오른쪽 단추로 클릭한 다음 시작을 클릭합니다.
응용 프로그램 로그에 오류가 기록되지 않음
Notification Services 엔진이 시작되지 않지만 응용 프로그램 로그에 원인을 나타내는 오류가 없는 경우 응용 프로그램 로그가 꽉 찬 것일 수 있습니다. 응용 프로그램 로그를 다시 구성하려면 다음을 수행하십시오.
- 제어판에서 관리 도구를 엽니다.
- 이벤트 뷰어를 엽니다.
- 응용 프로그램을 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.
- 다음 중 하나 또는 둘 다를 수행합니다.
- 최대 로그 크기 값을 늘립니다.
- 필요한 경우 이벤트 덮어쓰기를 선택합니다.
응용 프로그램 로그에 예기치 않은 오류가 있음
응용 프로그램 로그에 예기치 않은 오류가 수신되면 Notification Services 엔진을 다시 시작해 보십시오.
예를 들어 Windows 서비스가 실행되는 중에 인스턴스에서 응용 프로그램을 제거하면 제거한 응용 프로그램의 이벤트 로그에 오류가 나타납니다. 서비스를 다시 시작하면 이러한 오류가 나타나지 않아야 합니다.
자세한 내용은 Notification Services 인스턴스 시작 및 중지를 참조하십시오.
이벤트 컬렉션 문제 해결
응용 프로그램으로 이벤트를 전송할 수 없음
이벤트 컬렉션과 관련된 문제를 해결할 때는 다음 사항을 확인하십시오.
- 호스팅된 이벤트 공급자를 사용할 경우에는 이벤트 공급자를 실행하는 Notification Services 엔진이 실행되고 있는지 확인합니다.
- 이벤트 컬렉션이 설정되었는지 확인합니다. nscontrol status 명령을 실행하면 인스턴스 구성 요소의 상태를 빠르게 확인할 수 있습니다. 이벤트가 해제 보류 중이거나 설정 보류 중이면 이벤트를 전송할 수 없습니다.
상태를 확인하는 방법은 인스턴스, 응용 프로그램 및 구성 요소의 상태 보기를 참조하십시오.
구성 요소를 설정 및 해제하는 방법은 인스턴스, 응용 프로그램 또는 구성 요소 설정 및 해제를 참조하십시오. - 이벤트 공급자 실행에 사용되는 계정이 인스턴스 및 응용 프로그램 데이터베이스에서 NSEventProvider 사용 권한을 갖는지 확인합니다.
파일 시스템 감시자 이벤트 공급자 오류
서버의 성능 카운터가 손상되면 파일 시스템 감시자 이벤트 공급자에서 오류가 발생할 수 있습니다. 이벤트 로그에 다음 오류가 나타나면 성능 카운터가 손상된 것입니다.
이벤트 ID: 2980
성능 카운터가 손상되면 값을 반환하지 않습니다. 이 손상 문제를 해결하려면 다음을 수행하십시오.
- 인스턴스가 실행 중이면 중지합니다. 자세한 내용은 Notification Services 인스턴스 시작 및 중지를 참조하십시오.
- 시스템 모니터와 같이 Notification Services 성능 카운터를 쿼리하는 응용 프로그램을 모두 닫습니다.
- 인스턴스를 다시 등록합니다. 자세한 내용은 레지스트리 정보 업데이트를 참조하십시오.
그러면 인스턴스의 성능 카운터가 다시 만들어집니다. 위 단계를 여러 번 실행해야 할 경우도 있습니다.
알림 생성 및 배달 문제 해결
중복된 알림이 생성됨
구독자가 중복된 알림을 받을 경우 이벤트 수집 및 사용 방법을 확인하십시오.
- 알림 생성 규칙이 알림 클래스의 이름를 따서 지정한 뷰에 액세스해야 할 경우 알림 테이블에는 직접 액세스하지 않는지 확인합니다. 뷰는 현재의 이벤트 집합만 반환하지만 알림 테이블은 데이터 제거(vacuuming)를 통해 제거되지 않은 모든 이벤트를 포함합니다.
예를 들어 이벤트 클래스의 이름이 StockEvent이면 구독 규칙에 NSStockEventEvents 테이블이 아닌 StockEvent 뷰를 사용하십시오. - 이벤트 기록이나 외부 테이블과 같은 다른 원본에서 이벤트를 가져올 경우 쿼리에 알림 생성에 사용할 데이터만 선택하는 논리를 포함시켜야 합니다. 예를 들어 지난 24시간 동안 전송된 이벤트나 열에 특정 값이 포함된 이벤트만 포함시킬 수 있습니다. 이벤트 사용을 추적할 수 있도록 구독 규칙의 내용에 따라 이벤트 원본의 값이 수정될 수 있습니다.
- 동일한 이벤트 데이터를 여러 번 전송하지 않는지 확인합니다.
구독 규칙을 작성하는 방법은 구독 규칙 정의를 참조하십시오.
알림이 생성 또는 배달되지 않음
응용 프로그램으로 부터 알림을 받지 못하고 있는 경우 다음을 확인하십시오.
- 생성자 구성 요소를 실행하는 Notification Services 엔진이 실행되고 있으며 설정된 상태입니까?
- 사용할 수 있는 이벤트가 있습니까?
인스턴스 데이터베이스의 NSDiagnosticEventClass 저장 프로시저를 실행합니다. EventBatchesCollectedCount 열을 보고 예상되는 시간에 이벤트가 도착하는지 확인합니다. - 구독이 있습니까?
응용 프로그램 데이터베이스의 NSSubscriptionClassNameView 뷰를 사용하여 응용 프로그램에 평가할 구독이 있는지 확인합니다. - 예약 구독이 제대로 예약됩니까?
응용 프로그램 데이터베이스의 NSSubscriptionClassNameView 뷰를 사용하거나 응용 프로그램 데이터베이스의 NSScheduledSubscriptionList 및 NSScheduledSubscriptionDetails 저장 프로시저를 실행하여 구독 세부 정보를 확인합니다. - 알림에서 참조되는 구독자 장치가 있습니까?
구독 규칙에 구독자 ID와 구독자 장치 이름을 제공해야 합니다. 구독자 장치 이름은 구독자에 대해 정의된 구독자 장치의 이름과 일치해야 합니다. 구독자 장치를 확인하려면 인스턴스 데이터베이스에서 NSSubscriberDeviceView를 사용하십시오. - 규칙이 시간 초과됩니까?
알림을 생성하는 구독 규칙이 시간 초과되면 응용 프로그램은 알림을 생성하지 않습니다. 규칙이 효율적인지, 이벤트 및 구독 데이터에 대해 적절한 인덱스가 정의되어 있는지, 이전 데이터를 제거하기 위해 데이터 제거가 실행되고 있는지, 서버에서 실행 중인 다른 프로세스에 의해 규칙이 차단되지 않는지 확인합니다. 구독 규칙을 정의하는 방법은 구독 규칙 정의를 참조하십시오. - 알림이 생성되고 있습니까?
인스턴스 데이터베이스의 NSDiagnosticNotificationClass 저장 프로시저를 실행하여 알림이 생성되고 있는지 확인합니다. NotificationsGenerated 열에서 예상되는 알림 생성 간격을 확인합니다. 알림이 없는 경우 이벤트 또는 구독이 없거나 구독 클래스 일치 규칙이 알림 클래스 함수에 알림을 삽입하지 않을 수 있습니다. 규칙에 대한 자세한 내용은 구독 규칙 정의를 참조하십시오. - 알림이 실패합니까?
NSDiagnosticFailedNotifications 저장 프로시저를 실행하여 실패한 알림이 있는지 확인합니다. - 알림이 올바른 배달 채널로 이동됩니까?
응용 프로그램이 알림 클래스에 대해 올바른 프로토콜을 정의하며 응용 프로그램에 추가된 구독이 올바른 배달 채널을 사용하는지 확인합니다. - 배달 채널이 작동합니까?
NSDiagnosticDeliveryChannel 보고서를 실행하여 배달 채널이 작동하는지 확인합니다. - 배포자가 설정되어 있습니까?
구성 요소를 설정 및 해제하는 방법은 인스턴스, 응용 프로그램 또는 구성 요소 설정 및 해제를 참조하십시오.
일반 배달 오류 발생
일부 배달 오류는 실제로 구성 오류일 수 있습니다. 예를 들어 SMTP 배달 채널을 잘못 구성한 경우 Notification Services에서 이 배달 채널을 사용하여 알림을 배달하려고 하면 다음과 같은 메시지가 나타날 수 있습니다.
SMTP 알림 배달 일반 오류
이와 같은 오류가 여러 개 나타나면 배달 채널을 올바르게 구성했는지 확인하십시오. 자세한 내용은 배달 채널 정의를 참조하십시오.
SMTP 배달 실패
로컬 인터넷 정보 서비스(IIS) SMTP 서비스에서 IIS SMTP 프로토콜을 사용하는 경우 Notification Services는 알림을 배달할 위치를 확인하기 위해 IIS 디렉터리를 찾아보아야 합니다. 이 정보에는 관리자만 액세스할 수 있습니다.
로컬 IIS SMTP 서비스를 사용하려면 배포자 엔진 구성 요소 실행에 사용한 계정이 로컬 Administrators 그룹의 멤버여야 합니다.
배포자 시간이 초과됨
이벤트 로그에 여러 가지 시간 초과 오류가 나타나면 배포자 로깅 수준이 너무 높은 것입니다. 이 문제는 일반적으로 데이터베이스 시스템에서 고용량 알림을 처리하고 있는 중이며 배포와 로깅 작업을 모두 처리할 수 없는 경우 발생합니다.
이 문제를 해결하려면 로깅을 해제하십시오. 자세한 내용은 배달 프로토콜 실행 설정 지정을 참조하십시오.
데이터 제거 프로세스(Vacuumer) 문제 해결
데이터가 제거되지 않아 이벤트 및 알림 테이블의 크기가 커짐
응용 프로그램 데이터베이스에서 예상대로 데이터가 제거되지 않으면 다음을 확인하십시오.
- 응용 프로그램 정의에 데이터 제거 일정이 지정되어 있습니까? 자세한 내용은 데이터 제거 구성을 참조하십시오.
- 적절한 보존 기간을 지정했습니까? 보존 기간이 길수록 테이블에 더 많은 데이터가 누적됩니다.
- 시스템 활동이 낮은 시간에 데이터가 제거가 실행됩니까? 그렇지 않으면 데이터를 효율적으로 제거할 수 있는 충분한 시스템 리소스가 확보되지 못할 수 있습니다.
시작 시간은 UTC 값이어야 합니다. 예를 들어 시작 시간으로 02:00:00을 지정하면 이 시간은 그리니치 표준시로 오전 2시에 해당합니다. 사용자의 표준 시간대로 오전 2시를 지정하려면 표준 시간대와 그리니치 표준시 간 차이를 더하거나 빼야 합니다. 예를 들어 태평양 표준시는 그리니치 표준시보다 8시간 늦습니다. 태평양 표준시로 오전 2시에 데이터 제거를 실행하려면 시간 시간을 10:00:00으로 지정하십시오. - 데이터 제거 기간은 적절합니까? 데이터 양에 따라 더 오랫동안 데이터 제거를 실행해야 할 수 있습니다.
데이터 제거 성능을 평가하려면 다음 리소스를 사용하십시오.
- NSSnapshotApplications 저장 프로시저를 실행하여 데이터 제거 작업이 마지막으로 실행된 시기와 제거된 이벤트 및 알림의 수를 확인합니다. 자세한 내용은 NSSnapshotApplications(Transact-SQL)를 참조하십시오.
- Windows 성능 모니터를 사용하여 NS$instanceName: Vacuumer 성능 개체를 모니터링합니다. 자세한 내용은 NS$instance_name: Vacuumer 개체를 참조하십시오.
웹 응용 프로그램 문제 해결
구독 관리 응용 프로그램이 Notification Services 인스턴스에 액세스할 수 없음
구독 관리 응용 프로그램은 인스턴스 및 응용 프로그램 데이터베이스를 찾아 액세스할 수 있어야 합니다. 이를 위해서는 응용 프로그램이 실행 중인 서버에 해당 인스턴스가 등록되어야 하며 응용 프로그램이 사용하는 계정을 인스턴스 및 응용 프로그램 데이터베이스의 NSSubscriberAdmin 역할에 추가해야 합니다. 자세한 내용은 구독 관리 인터페이스 배포를 참조하십시오.
참고 항목
작업
Notification Services에 대한 질문과 대답
Notification Services 이벤트 로깅 구성
이벤트 메시지 사용