CREATE QUEUE(Transact-SQL)

 

이 항목은 다음에 적용됩니다.예SQL Server(2008부터 시작)아니요Azure SQL 데이터베이스아니요Azure SQL 데이터 웨어하우스아니요병렬 데이터 웨어하우스

데이터베이스에 새 큐를 만듭니다. 큐는 메시지를 저장합니다. 서비스에 대한 메시지가 도착하면 Service Broker는 이 메시지를 서비스에 연결된 큐에 넣습니다.

Topic link icon Transact-SQL 구문 표기 규칙

  
CREATE QUEUE <object>  
   [ WITH  
     [ STATUS = { ON | OFF }  [ , ] ]  
     [ RETENTION = { ON | OFF } [ , ] ]   
     [ ACTIVATION (  
         [ STATUS = { ON | OFF } , ]   
           PROCEDURE_NAME = <procedure> ,  
           MAX_QUEUE_READERS = max_readers ,   
           EXECUTE AS { SELF | 'user_name' | OWNER }   
            ) [ , ] ]  
     [ POISON_MESSAGE_HANDLING (  
       [ STATUS = { ON | OFF } )  
    ]  
     [ ON { filegroup | [ DEFAULT ] } ]  
[ ; ]  
  
<object> ::=  
{  
    [ database_name. [ schema_name ] . | schema_name. ]  
        queue_name  
}   
  
<procedure> ::=  
{  
    [ database_name. [ schema_name ] . | schema_name. ]  
        stored_procedure_name  
}  
  

a s e _ (개체)
새 큐를 만들 데이터베이스의 이름입니다. a s e _ 기존 데이터베이스의 이름을 지정 해야 합니다. 때 database_name 을 제공 하지 않으면 현재 데이터베이스에는 큐가 만들어집니다.

schema_name (개체)
새로운 큐가 속할 스키마 이름입니다. 기본 스키마는 문을 실행하는 사용자의 기본 스키마입니다. Sysadmin 고정된 서버 역할의 멤버가 CREATE QUEUE 문을 실행 하거나 db_dbowner 또는 db_ddladmin의 멤버인 고정 데이터베이스 역할에 지정 된 데이터베이스의 경우 database_name, schema_name 현재 연결의 로그인과 연결 된 것 이외의 스키마를 지정할 수 있습니다. 그렇지 않으면 schema_name 문을 실행 하는 사용자에 대 한 기본 스키마 여야 합니다.

queue_name
만들 큐의 이름입니다. 이 이름은 SQL Server 식별자에 적용되는 지침을 준수해야 합니다.

STATUS (Queue)
큐의 사용 가능 여부(ON 또는 OFF)를 지정합니다. 큐를 사용할 수 없을 경우 큐에서 메시지를 추가하거나 제거할 수 없습니다. ALTER QUEUE 문으로 큐를 사용할 수 있게 설정할 때까지 메시지가 큐에 도착하지 않도록 하기 위해 사용할 수 없는 상태의 큐를 만들 수 있습니다. 이 절을 생략하면 기본값은 ON이며 큐를 사용할 수 있습니다.

RETENTION
큐에 대한 보존 설정을 지정합니다. RETENTION = ON인 경우 이 큐의 대화에서 주고 받은 모든 메시지가 대화가 끝날 때까지 큐에 남아 있습니다. 그러므로 오류가 발생할 때 보정 트랜잭션을 수행하기 위해 또는 감사할 목적으로 메시지를 유지할 수 있습니다. 이 절을 지정하지 않은 경우 보존 설정의 기본값은 OFF입니다.

System_CAPS_ICON_note.jpg 참고


RETENTION = ON으로 설정하면 성능이 저하될 수 있습니다. 이 설정은 응용 프로그램에 필요한 경우에만 사용해야 합니다.

ACTIVATION
이 큐에 있는 메시지를 처리하기 위해 시작해야 하는 저장 프로시저에 대한 정보를 지정합니다.

STATUS (Activation)
Service Broker에서 저장 프로시저를 시작할지 여부를 지정합니다. STATUS = ON이면 현재 실행 중인 프로시저 수가 MAX_QUEUE_READERS보다 작고, 큐에 도착하는 메시지가 저장 프로시저의 메시지 수신 속도보다 빠른 경우 큐에서 PROCEDURE_NAME에 지정된 저장 프로시저를 시작합니다. STATUS = OFF이면 큐에서 저장 프로시저를 시작하지 않습니다. 이 절을 지정하지 않은 경우 기본값은 ON입니다.

PROCEDURE_NAME =<>>
이 큐에 있는 메시지를 처리하기 위해 시작할 저장 프로시저의 이름을 지정합니다. 이 값은 SQL Server 식별자여야 합니다.

a s e _(프로시저)
저장 프로시저가 포함된 데이터베이스의 이름입니다.

schema_name(프로시저)
저장 프로시저를 포함한 스키마의 이름입니다.

procedure_name
저장 프로시저의 이름입니다.

MAX_QUEUE_READERS =max_readers
큐에서 동시에 시작하는 활성화 저장 프로시저의 최대 인스턴스 수를 지정합니다. 값 max_readers 사이의 숫자 여야 032767합니다.

EXECUTE AS
활성화 저장 프로시저를 실행하는 SQL Server 데이터베이스 사용자 계정을 지정합니다. 큐에서 저장 프로시저를 시작할 때 SQL Server에서 이 사용자의 권한을 확인할 수 있어야 합니다. 도메인 사용자의 경우 프로시저를 시작할 때 서버가 도메인에 연결되어 있어야 합니다. 그렇지 않으면 활성화가 실패합니다. SQL Server 사용자의 경우에는 서버에서 항상 권한을 확인할 수 있습니다.

SELF
저장 프로시저가 현재 사용자로 실행되도록 지정합니다(이 CREATE QUEUE 문을 실행하는 데이터베이스 보안 주체).

'user_name'
저장 프로시저가 실행되는 사용자의 이름입니다. user_name 매개 변수는 유효 해야 SQL Server 로 지정 된 사용자는 SQL Server 식별자입니다. 현재 사용자에 대 한 IMPERSONATE 권한이 있어야 합니다.는 user_name 지정 합니다.

OWNER
저장 프로시저가 큐의 소유자로 실행되도록 지정합니다.

POISON_MESSAGE_HANDLING
큐에 대해 포이즌 메시지 처리를 사용하는지 여부를 지정합니다. 기본값은 ON입니다.

포이즌 메시지 처리가 OFF로 설정된 큐는 트랜잭션 롤백이 연속으로&5;회 발생하더라도 비활성화되지 않습니다. 이렇게 하면 응용 프로그램에서 사용자 지정 포이즌 메시지 처리 시스템을 정의할 수 있습니다.

ON 파일 그룹 | [DEFAULT]
이 큐를 만들 SQL Server 파일 그룹을 지정합니다. 사용할 수는 파일 그룹 매개 변수를 파일 그룹을 식별 하거나 service broker 데이터베이스에 대 한 기본 파일 그룹을 사용 하 여 기본 식별자를 사용 합니다. 이 절의 컨텍스트에서 DEFAULT는 키워드가 아니므로 식별자로 구분해야 합니다. 파일 그룹을 지정하지 않으면 큐는 데이터베이스의 기본 파일 그룹을 사용합니다.

큐는 SELECT 문의 대상이 될 수 있습니다. 그러나 큐의 내용은 SEND, RECEIVE, END CONVERSATION 등 Service Broker 대화에서 실행되는 문을 사용해야만 수정할 수 있습니다. 큐는 INSERT, UPDATE, DELETE 또는 TRUNCATE 문의 대상이 될 수 없습니다.

큐는 임시 개체일 수 없습니다. 따라서 큐로 시작 하는 이름 ** # ** 유효 하지 않습니다.

비활성 상태의 큐를 만들면 큐에서 메시지를 받기 전까지 서비스를 위한 해당 인프라를 사용할 수 있습니다.

큐에 메시지가 없어도 Service Broker에서는 활성화 저장 프로시저를 중지하지 않습니다. 잠시 동안이라도 큐에 메시지가 없을 경우 활성화 저장 프로시저가 종료됩니다.

큐를 만들 때가 아니라 Service Broker에서 저장 프로시저를 시작할 때 활성화 저장 프로시저에 대한 권한이 검사됩니다. CREATE QUEUE 문은 EXECUTE AS 절에 지정된 사용자에게 PROCEDURE NAME 절에 지정된 저장 프로시저를 실행할 수 있는 권한이 있는지 확인하지 않습니다.

큐를 사용할 수 없는 경우 Service Broker는 데이터베이스 전송 큐에서 큐를 사용하는 서비스에 대한 메시지를 보유합니다. sys.transmission_queue 카탈로그 뷰에서는 전송 큐 보기를 제공합니다.

큐는 스키마가 소유한 개체입니다. 따라서 큐는 sys.objects 카탈로그 뷰에 표시됩니다.

다음 표에서는 큐의 열을 나열합니다.

열 이름데이터 형식Description
상태tinyint메시지의 상태입니다. RECEIVE 문은 메시지의 상태를 모두 반환 1합니다. 메시지 보존이 설정되면 상태는 0으로 설정됩니다. 메시지 보존이 설정되지 않으면 메시지는 큐에서 삭제됩니다. 큐의 메시지는 다음 값 중 하나를 포함할 수 있습니다.

 0= 메시지 받음

 1= 수신 준비

 2= 아직 완료 되지 않음

 3= 보낸 메시지 보유
prioritytinyint이 메시지에 할당된 우선 순위 수준입니다.
queuing_orderbigint큐 내의 메시지 정렬 번호입니다.
conversation_group_id고유 식별자이 메시지가 속하는 대화 그룹의 식별자입니다.
conversation_handle고유 식별자이 메시지가 속하는 대화의 핸들입니다.
message_sequence_numberbigint대화 내의 메시지 시퀀스 번호입니다.
service_namenvarchar (512)대화와 연관된 서비스의 이름입니다.
service_idint대화와 연관된 서비스의 SQL Server 개체 식별자입니다.
service_contract_namenvarchar (256)대화에서 준수하는 계약의 이름입니다.
service_contract_idint대화에서 준수하는 계약의 SQL Server 개체 식별자입니다.
message_type_namenvarchar (256)메시지를 설명하는 메시지 유형의 이름입니다.
message_type_idint메시지를 설명하는 메시지 유형의 SQL Server 개체 식별자입니다.
validationnchar(2)메시지에 사용된 유효성 검사입니다.

E=비어 있음

N=없음

X=XML
message_bodyvarbinary (max)메시지 내용입니다.
message_id고유 식별자메시지의 고유 식별자입니다.

큐를 만들 수 있는 권한은 기본적으로 ddl_admin 또는 db_owner 고정 데이터베이스 역할 및 sysadmin 고정 서버 역할의 멤버로 설정됩니다.

큐에 대한 REFERENCES 권한은 기본적으로 큐의 소유자, ddl_admin 또는 db_owner 고정 데이터베이스 역할의 멤버 및 sysadmin 고정 서버 역할의 멤버로 설정됩니다.

큐에 대한 RECEIVE 권한은 기본적으로 큐의 소유자, db_owner 고정 데이터베이스 역할의 멤버 및 sysadmin 고정 서버 역할의 멤버로 설정됩니다.

1. 매개 변수 없이 큐 만들기

다음 예에서는 메시지를 받을 수 있는 큐를 만듭니다. 큐에 대해 지정된 활성화 저장 프로시저가 없습니다.

CREATE QUEUE ExpenseQueue ;  

2. 사용할 수 없는 큐 만들기

다음 예에서는 메시지를 받을 수 없는 큐를 만듭니다. 큐에 대해 지정된 활성화 저장 프로시저가 없습니다.

CREATE QUEUE ExpenseQueue WITH STATUS=OFF ;  

3. 큐 만들기 및 내부 활성화 정보 지정

다음 예에서는 메시지를 받을 수 있는 큐를 만듭니다. 큐에서 메시지를 받으면 큐가 expense_procedure 저장 프로시저를 시작합니다. 이 저장 프로시저는 ExpenseUser 사용자로 실행됩니다. 큐는 최대 5개의 저장 프로시저 인스턴스를 시작합니다.

CREATE QUEUE ExpenseQueue  
    WITH STATUS=ON,  
    ACTIVATION (  
        PROCEDURE_NAME = expense_procedure,  
        MAX_QUEUE_READERS = 5,  
        EXECUTE AS 'ExpenseUser' ) ;  

4. 특정 파일 그룹에 큐 만들기

다음 예에서는 ExpenseWorkFileGroup 파일 그룹에 큐를 만듭니다.

CREATE QUEUE ExpenseQueue  
    ON ExpenseWorkFileGroup ;  

5. 여러 매개 변수로 큐 만들기

다음 예에서는 DEFAULT 파일 그룹에 큐를 만듭니다. 이 큐는 사용할 수 없습니다. 메시지가 속한 대화가 끝날 때까지 이 큐에 메시지가 보관됩니다. ALTER QUEUE를 사용하여 큐를 사용할 수 있게 설정하면 큐가 2008R2.dbo.expense_procedure 저장 프로시저를 시작하여 메시지를 처리합니다. 이 저장 프로시저는 CREATE QUEUE 문을 실행한 사용자로 실행됩니다. 큐는 최대 10개의 저장 프로시저 인스턴스를 시작합니다.

CREATE QUEUE ExpenseQueue  
    WITH STATUS = OFF,  
      RETENTION = ON,  
      ACTIVATION (  
          PROCEDURE_NAME = AdventureWorks2012.dbo.expense_procedure,  
          MAX_QUEUE_READERS = 10,  
          EXECUTE AS SELF )  
    ON [DEFAULT] ;  

ALTER QUEUE (TRANSACT-SQL)
서비스 (TRANSACT-SQL) 만들기
DROP QUEUE (TRANSACT-SQL)
수신 (TRANSACT-SQL)
EVENTDATA (TRANSACT-SQL)

커뮤니티 추가 항목

추가
표시: