조건 작업 정의
업데이트: 2006년 7월 17일
작업은 Notification Services가 구독 규칙을 발생시킬 때마다 실행하는 Transact-SQL 문 그룹입니다. 각 구독 규칙은 미리 정의된 쿼리에 해당하는 기본 작업이나 구독자가 알림 생성 쿼리에 대해 WHERE 절과 동일한 항목을 정의할 수 있도록 하는 조건 작업을 포함할 수 있습니다. 이 항목에서는 조건 작업 및 조건 작업의 작성 방법을 설명합니다.
중요: |
---|
조건 작업은 구독자가 알림 생성을 위해 사용자 고유의 복합 조건을 만들 수 있도록 하려는 경우에만 사용하십시오. 그렇지 않으면 미리 정의한 조건을 사용하여 사용자들이 매개 변수가 있는 쿼리 값을 입력할 수 있도록 하십시오. 이 방법이 좀 더 효율적입니다. 자세한 내용은 작업 정의를 참조하십시오. |
조건 작업
조건 작업을 사용하면 구독자는 보다 융통성 있는 규칙을 만들 수 있습니다. 미리 정의한 작업은 구독자가 개발자 정의 쿼리에 대한 매개 변수 값을 지정할 수만 있도록 허용하지만 조건 작업을 사용할 경우 구독자는 쿼리를 위해 WHERE 절과 동일한 조건을 만들고 부울 연산자(AND, OR 및 NOT)를 사용하여 개별 조건을 조합할 수 있습니다.
예를 들어 날씨 응용 프로그램에는 2개의 필드 City 및 Forecast를 포함하는 이벤트 클래스를 제공할 수 있습니다. 개발자는 알림을 만들기 위해 다음과 같은 기본 쿼리를 정의할 수 있습니다.
INSERT INTO dbo.WeatherNotifications(SubscriberId, DeviceName,
SubscriberLocale, City, Forecast)
SELECT [Subscription.SubscriberId], [Subscription.DeviceName],
[Subscription.SubscriberLocale], [Input.City], [Input.Forecast])
FROM dbo.FlightEventRule
이 쿼리는 규칙(이 경우 FlightEventRule)의 이름을 따서 명명한 뷰에서 데이터를 선택합니다. 해당 뷰의 필드 이름은 Subscription.SubscriptionFieldName 및 Input.EventFieldName으로 지정되며 필드 이름을 대괄호로 묶어야 합니다.
구독자는 구독 관리 인터페이스를 통해 WHERE 절과 동일한 조건을 정의할 수 있습니다. 예를 들어 사용자는 City is 'Seattle'과 Forecast contains 'snow'라는 2개의 조건을 지정한 후 AND 연산자로 이러한 조건을 결합합니다. 이러한 조건 조합은 다음 WHERE 절과 동일합니다.
WHERE City = 'Seattle' AND Forecast LIKE '%snow%'
Notification Services는 구독 규칙을 실행할 때 비슷한 조건을 함께 처리하므로 성능이 향상됩니다. 그런 후 Notification Services는 일치하는 입력 및 구독 쌍으로 규칙의 뷰를 채웁니다.
성능 고려 사항
Notification Services는 비슷한 조건을 함께 처리하지만 조건 작업을 사용할 때는 오버헤드가 발생합니다. Notification Services는 모든 조건 집합을 가져와 효율적인 평가를 위해 조건을 구성한 후 해당 조건을 평가한 다음 모든 구독에 대한 결과 알림을 생성합니다. 이러한 오버헤드로 인해 일반적으로 미리 정의한 작업을 평가할 때보다 조건 작업을 사용하는 규칙을 평가할 때 더 많은 시간이 소요됩니다.
보안
모든 조건 작업은 조건 작업에 대해 지정된 데이터베이스 사용자의 컨텍스트에서 실행됩니다. 권한이 낮은 사용자를 사용하면 다른 사용자들이 구독 관리 인터페이스를 손상시키거나 다른 테이블에 대한 액세스 또는 다른 작업의 수행을 시도하는 조건을 삽입하는 경우와 같은 보안 위협을 최소화할 수 있습니다.
데이터베이스 사용자는 이벤트 원본에서 데이터를 선택할 수만 있고 조건에 사용되는 사용자 정의 함수만 실행할 수 있도록 제한된 사용 권한을 가져야 합니다.
이 사용자와 관련된 SQL Server 로그인 계정은 Notification Services가 응용 프로그램 데이터베이스에 응용 프로그램 개체를 만들 때 이미 존재해야 합니다.
트랜잭션
조건 작업의 모든 문은 동일한 트랜잭션에 속하므로 모두 성공적으로 완료되거나 모두 롤백됩니다. 트랜잭션이 실패하면 Notification Services는 Windows 응용 프로그램 로그에 오류를 기록합니다.
조건 작업 정의
XML을 통해 응용 프로그램을 정의할 경우 ADF(응용 프로그램 정의 파일)에 조건 작업을 정의하고 프로그래밍 방식으로 응용 프로그램을 정의할 경우에는 NMO(Notification Services Management Objects)를 사용하여 조건 작업을 정의합니다.
조건 작업을 정의하려면 다음 항목을 참조하십시오.
- ConditionAction Element (ADF)
- Microsoft.SqlServer.Management.Nmo.SubscriptionClass.SubscriptionConditionEventRules 속성(NMO)
- Microsoft.SqlServer.Management.Nmo.SubscriptionClass.SubscriptionConditionScheduledRules 속성(NMO)
SQL Server 로그인
Notification Services는 지정된 데이터베이스 사용자 컨텍스트에서 모든 조건 작업을 실행하므로 해당 사용자와 관련된 로그인 계정을 지정해야 합니다. 이 로그인은 Notification Services가 응용 프로그램을 만들기 전에 지정해야 합니다. 로그인이 없으면 Notification Services는 응용 프로그램을 만들지 못하고 인스턴스 생성이나 인스턴스 업데이트를 롤백합니다.
이 로그인은 해당 서버에 대해 제한된 사용 권한을 가져야 합니다. 따라서 로그인이 서버 전체 사용 권한을 가지지 않으며 서버 역할에 속하지 않도록 지정하는 것이 가장 좋습니다.
SQL Server 로그인을 정의하려면 다음 항목을 참조하십시오.
- SqlLogin Element (ADF)
- Microsoft.SqlServer.Management.Nmo.SubscriptionConditionEventRule.SqlLoginName 속성(NMO)
- Microsoft.SqlServer.Management.Nmo.SubscriptionConditionScheduledRule.SqlLoginName 속성(NMO)
데이터베이스 사용자
데이터베이스 사용자는 모든 조건 작업이 실행되는 계정입니다. Notification Services는 조건 작업 실행에 필요한 일부 사용 권한을 이 데이터베이스 사용자에게 부여합니다. Notification Services가 응용 프로그램을 만들 때 데이터베이스 사용자가 없으면 Notification Services는 데이터베이스 사용자도 만듭니다.
Notification Services는 Notification Services 개체에 대해 필요한 사용 권한을 부여하지만 입력 테이블이나 뷰에 대한 사용 권한은 부여하지 않으며 조건 작업에 사용되는 사용자 정의 함수에 대한 사용 권한도 부여하지 않습니다. 응용 프로그램을 배포할 때 이러한 사용 권한을 부여해야 합니다. 이러한 사용 권한을 부여하기 위한 Transact-SQL 명령은 다음 형식을 갖습니다.
-- grant permissions on the view for an input event class
GRANT SELECT ON ApplicationSchema.EventClassName TO SqlUserAccount
-- grant permissions on an input event chronicle table
GRANT SELECT ON ChronicleSchema.ChronicleName TO SqlUserAccount
-- grant execute permissions on a user-defined function
-- used in Subscription.Conditions
GRANT EXEC ON UDFSchema.MyUserDefinedFunction TO SqlUserAccount
데이터베이스 사용자를 정의하려면 다음 항목을 참조하십시오.
- SqlUser Element (ADF)
- Microsoft.SqlServer.Management.Nmo.SubscriptionConditionEventRule.SqlUserName 속성(NMO)
- Microsoft.SqlServer.Management.Nmo.SubscriptionConditionScheduledRule.SqlUserName 속성(NMO)
입력 이름
조건 작업을 사용할 때는 이벤트 데이터가 들어 있는 뷰나 테이블을 지정해야 합니다.
- 조건 작업이 이벤트 규칙에 포함되면 입력은 일반적으로 이벤트 클래스와 이름이 같은 이벤트 뷰에 해당합니다.
주의 이름이 NSEventClassNameEvents인 이벤트 테이블은 입력으로 사용하지 마십시오. 이 테이블은 시스템에서 제거되지 않은 모든 이벤트를 포함하며 중복 알림을 생성합니다. - 조건 작업이 예약 규칙과 관련된 경우에는 입력은 이벤트 기록에 해당합니다.
주의 예약 규칙의 경우 이름이 EventClassName인 이벤트 뷰는 입력으로 사용하지 마십시오. 이 뷰는 현재 이벤트 일괄 처리만 포함하며 예약 규칙에 대해 비어있거나 불완전한 경우가 많습니다.
입력 이름을 정의하려면 다음 항목을 참조하십시오.
- InputName Element (ADF)
- Microsoft.SqlServer.Management.Nmo.SubscriptionConditionEventRule.InputTypeName 속성(NMO)
- Microsoft.SqlServer.Management.Nmo.SubscriptionConditionScheduledRule.InputTypeName 속성(NMO)
입력 스키마
입력 스키마는 입력에 대한 데이터베이스 스키마 이름입니다.
- 입력이 이벤트 뷰이면 스키마는 응용 프로그램 스키마가 됩니다. 응용 프로그램 스키마는 응용 프로그램 데이터베이스를 정의할 때 정의하거나 dbo의 기본값을 스키마로 사용할 수 있습니다. 자세한 내용은 응용 프로그램 데이터베이스 정의를 참조하십시오.
- 입력이 이벤트 기록이면 이벤트 기록을 만드는 CREATE TABLE 문에 스키마가 정의됩니다. 이 스키마는 일반적으로 응용 프로그램 스키마와 동일합니다. 자세한 내용은 이벤트 클래스에 대한 기록 정의를 참조하십시오.
입력 스키마를 정의하려면 다음 항목을 참조하십시오.
- InputSchema Element (ADF)
- Microsoft.SqlServer.Management.Nmo.SubscriptionConditionEventRule.InputTypeSchema 속성(NMO)
- Microsoft.SqlServer.Management.Nmo.SubscriptionConditionScheduledRule.InputTypeSchema 속성(NMO)
Transact-SQL 식
각 기록 작업은 알림 생성을 위한 핵심 쿼리를 지정합니다. 이 쿼리는 구독 및 입력 필드를 선택한 후 알림 테이블에 추가하는 쿼리를 지정합니다.
쿼리는 구독과 이벤트 데이터를 결합한 뷰에서 구독 및 입력 필드를 선택해야 합니다. 뷰의 구독 필드 이름은 [Subscription.SubscriptionFieldName] 형식을 가지며 입력(이벤트) 필드 이름은 [Input.EventFieldName] 형식을 갖습니다.
구독자는 구독 관리 인터페이스를 통해 쿼리의 WHERE 절과 동일한 조건을 만듭니다. Notification Services는 모든 관련 구독에 대한 조건 작업을 평가한 후 알림을 생성합니다.
템플릿
다음 Transact-SQL 템플릿은 조건 작업에 대한 Transact-SQL 식 작성 방법을 보여 줍니다.
INSERT INTO schema.NotificationClassName(SubscriberId,
DeviceName, SubscriberLocale, NotificationFields)
SELECT [Subscription.SubscriberId], DeviceName, SubscriberLocale,
[Input.EventFieldName], ...
FROM schema.RuleName
SELECT 문에서 규칙의 이름을 따서 명명한 뷰와 같은 데이터 원본에서 DeviceName 및 SubscriberLocale 값을 선택하거나 'File' 및 'en-US'와 같은 리터럴 값을 제공할 수 있습니다.
해당 쿼리는 다른 문을 포함할 수 있으며 알림 생성에 필요하지 않습니다. 또한 기록 유지 관리와 같은 필요한 다른 작업을 수행할 수 있습니다. 그러나 적어도 하나 이상의 구독 규칙이 알림을 생성해야 합니다. 그렇지 않으면 응용 프로그램은 알림을 생성하여 구독자로 배포하지 않습니다.
INSERT 절
템플릿에 나오는 것처럼 INSERT 문에 다음 순서대로 다음 필드를 지정해야 합니다.
- SubscriberId
- DeviceName
- SubscriberLocale
알림 스키마에 정의되어 있는 모든 비계산 필드. 계산 필드를 사용할 경우 이러한 필드에 값을 추가하지 마십시오. 해당 값은 알림 데이터를 삽입할 때 계산됩니다.
SubscriberId 및 DeviceName 값이 SubscriberDevices 테이블의 레코드와 일치해야 합니다.
구독 규칙 내의 알림 테이블에만 추가합니다. 구독 규칙을 처리할 때 Notification Services는 각 규칙 발생을 준비하고, 규칙을 발생시킨 다음 정리 작업을 수행합니다. 구독 규칙 발생 범위를 벗어나 알림을 삽입하려고 하면 준비 및 정리 작업이 수행되지 않고 오류가 발생합니다.
저장 프로시저 사용
조건 작업에 Transact-SQL 문을 포함시키는 대신 저장 프로시저를 호출할 수 있습니다. 응용 프로그램 데이터베이스에 저장 프로시저를 만들어야 합니다. 배포 스크립트에 저장 프로시저를 정의할 수 있습니다. Notification Services가 인스턴스를 만들거나 응용 프로그램을 추가한 후, 인스턴스나 응용 프로그램을 설정하기 전에 저장 프로시저를 만들어야 합니다.
저장 프로시저를 사용하려면 해당 쿼리 텍스트를 저장 프로시저 호출 구문으로 바꿉니다. 다음 예에서 저장 프로시저 호출 방법을 보여 줍니다.
EXECUTE dbo.WeatherConditionActionSP;
Transact-SQL 식을 정의하려면 다음 항목을 참조하십시오.
- SqlExpression Element for ConditionAction (ADF)
- Microsoft.SqlServer.Management.Nmo.SubscriptionConditionEventRule.SqlExpression 속성(NMO)
- Microsoft.SqlServer.Management.Nmo.SubscriptionConditionScheduledRule.SqlExpression 속성(NMO)
구독 관리 인터페이스 작성
구독 관리 인터페이스를 작성하는 경우 응용 프로그램이 지원하는 구독 유형을 고려해야 합니다. 조건 기반 구독의 경우에는 구독 관리 인터페이스에서 구독자가 드롭다운 상자에서 필드를 선택하고 연산자를 입력하며 값을 제공하는 것과 같은 조건 입력 작업을 수행할 수 있도록 해야 합니다.
조건 기반 구독을 추가하는 방법을 보여 주는 예제 코드를 보려면 구독 추가를 참조하십시오.
참고 항목
참조
Microsoft.SqlServer.NotificationServices.Rules
개념
관련 자료
INSERT(Transact-SQL)
SELECT(Transact-SQL)
구독 클래스 정의
구독 관리 인터페이스 개발
도움말 및 정보
변경 내역
릴리스 | 내역 |
---|---|
2006년 7월 17일 |
|