CREATE SERVICE(Transact-SQL)
새 서비스를 만듭니다. Service Broker 서비스는 특정 태스크나 작업 집합의 이름입니다. Service Broker에서는 이 서비스 이름을 사용하여 메시지를 라우팅하고 데이터베이스 내의 올바른 큐에 메시지를 전달하고 대화에 대한 계약을 적용합니다.
구문
CREATE SERVICE service_name
[ AUTHORIZATION owner_name ]
ON QUEUE [ schema_name. ]queue_name
[ ( contract_name | [DEFAULT][ ,...n ] ) ]
[ ; ]
인수
service_name
생성할 서비스의 이름입니다. 새 서비스는 현재 데이터베이스에 생성되며 AUTHORIZATION 절에서 지정한 주체가 소유합니다. 서버, 데이터베이스 및 스키마 이름은 지정할 수 없습니다. service_name은 유효한 sysname이어야 합니다.[!참고]
service_name에 ANY 키워드를 사용하는 서비스를 만들지 마십시오. CREATE BROKER PRIORITY에서 서비스 이름에 ANY를 지정하면 모든 서비스에 대해 우선 순위가 고려됩니다. 이러한 규칙은 이름이 ANY인 서비스로 제한되지 않습니다.
AUTHORIZATION owner_name
서비스 소유자를 지정된 데이터베이스 사용자 또는 역할로 설정합니다. 현재 사용자가 dbo 또는 sa일 경우 owner_name은 유효한 사용자 또는 역할의 이름일 수 있습니다. 그렇지 않으면 owner_name은 현재 사용자 이름, 현재 사용자가 권한을 가장한 사용자의 이름, 현재 사용자가 속해 있는 역할 이름 중 하나여야 합니다.ON QUEUE [ schema_name**.** ] queue_name
서비스에 대한 메시지를 받는 큐를 지정합니다. 이 큐는 서비스와 같은 데이터베이스에 있어야 합니다. schema_name을 지정하지 않으면 스키마는 문을 실행하는 사용자의 기본 스키마가 됩니다.contract_name
이 서비스를 대상으로 하는 계약을 지정합니다. 서비스 프로그램은 지정된 계약을 사용하여 이 서비스에 대한 대화를 시작합니다. 계약을 지정하지 않으면 이 서비스에서만 대화를 시작할 수 있습니다.[DEFAULT]
서비스가 DEFAULT 계약을 준수하는 대화의 대상이 될 수 있음을 지정합니다. 이 절의 컨텍스트에서 DEFAULT는 키워드가 아니므로 식별자로 구분해야 합니다. DEFAULT 계약을 사용하면 대화 양측이 DEFAULT 메시지 유형의 메시지를 보낼 수 있습니다. DEFAULT 메시지 유형은 유효성 검사 NONE을 사용합니다.
주의
서비스는 연결된 계약에 의해 제공되는 기능을 노출시키므로 다른 서비스에서도 이 기능을 사용할 수 있습니다. CREATE SERVICE 문은 이 서비스를 대상으로 하는 계약을 지정합니다. 서비스는 서비스가 지정한 계약을 사용하는 대화에 대해서만 대상이 될 수 있습니다. 계약을 지정하지 않은 서비스는 기능을 다른 서비스에 노출시키지 않습니다.
이 서비스에서 시작된 대화는 모든 계약을 사용할 수 있습니다. 이 서비스만 대화를 시작할 경우 계약을 지정하지 않고 서비스를 만들 수 있습니다.
Service Broker가 원격 서비스로부터 새 대화를 허용하는 경우 Service Broker에서 대화 메시지를 넣는 큐는 대상 서비스의 이름에 의해 결정됩니다.
사용 권한
서비스를 만들 수 있는 권한은 기본적으로 db_ddladmin 또는 db_owner 고정 데이터베이스 역할 및 sysadmin 고정 서버 역할의 멤버로 설정됩니다. CREATE SERVICE 문을 실행하는 사용자에게는 큐 및 지정된 모든 계약에 대한 REFERENCES 권한이 있어야 합니다.
서비스에 대한 REFERENCES 권한은 기본적으로 서비스 소유자, db_ddladmin 또는 db_owner 고정 데이터베이스 역할의 멤버 및 sysadmin 고정 서버 역할의 멤버로 설정됩니다. 서비스에 대한 SEND 권한은 기본적으로 서비스 소유자, db_owner 고정 데이터베이스 역할의 멤버 및 sysadmin 고정 서버 역할의 멤버로 설정됩니다.
서비스는 임시 개체일 수 없습니다. **#**으로 시작되는 서비스 이름을 사용할 수 있지만 영구 개체입니다.
예
1.하나의 계약이 있는 서비스 만들기
다음 예에서는 dbo 스키마의 ExpenseQueue 큐에 //Adventure-Works.com/Expenses 서비스를 만듭니다. 이 서비스를 대상으로 하는 대화는 //Adventure-Works.com/Expenses/ExpenseSubmission 계약을 준수해야 합니다.
CREATE SERVICE [//Adventure-Works.com/Expenses]
ON QUEUE [dbo].[ExpenseQueue]
([//Adventure-Works.com/Expenses/ExpenseSubmission]) ;
2.여러 계약이 있는 서비스 만들기
다음 예에서는 ExpenseQueue 큐에 //Adventure-Works.com/Expenses 서비스를 만듭니다. 이 서비스를 대상으로 하는 대화는 //Adventure-Works.com/Expenses/ExpenseSubmission 또는 //Adventure-Works.com/Expenses/ExpenseProcessing 계약을 준수해야 합니다.
CREATE SERVICE [//Adventure-Works.com/Expenses] ON QUEUE ExpenseQueue
([//Adventure-Works.com/Expenses/ExpenseSubmission],
[//Adventure-Works.com/Expenses/ExpenseProcessing]) ;
3.계약이 없는 서비스 만들기
다음 예에서는 서비스 //Adventure-Works.com/Expenses on the ExpenseQueue 큐를 만듭니다. 이 서비스에는 계약 정보가 없습니다. 그러므로 이 서비스만 대화의 시작자가 될 수 있습니다.
CREATE SERVICE [//Adventure-Works.com/Expenses] ON QUEUE ExpenseQueue ;