Share via


2단원: 시작자 데이터베이스 만들기

새 설치: 2007년 9월 15일

이 단원에서는 시작자 데이터베이스를 만들고 이 자습서에서 사용할 모든 시작자 Service Broker 개체를 만드는 방법을 배웁니다. 이러한 단계는 데이터베이스 엔진의 시작자 인스턴스와 같은 컴퓨터에서 실행되는 Management Studio 복사본에서 실행하십시오.

절차

Service Broker 끝점 만들기

  1. 쿼리 편집기 창에 다음 코드를 복사하여 붙여 넣습니다. 그런 다음 이를 실행하여 이 데이터베이스 엔진 인스턴스에 대한 Service Broker 끝점을 만듭니다. Service Broker 끝점은 Service Broker 메시지가 전송되는 네트워크 주소를 지정합니다. 이 끝점은 Service Broker 기본값인 TCP 포트 4022를 사용하며 Windows 인증 연결을 사용하여 메시지를 전송하도록 원격 데이터베이스 엔진 인스턴스를 지정합니다.

    Windows 인증은 두 컴퓨터가 같은 도메인 또는 트러스트된 도메인에 있어야 작동합니다. 컴퓨터가 트러스트된 도메인에 있지 않으면 끝점에 대해 인증서 보안을 사용하십시오. 자세한 내용은 방법: Service Broker 전송 보안에 대한 인증서 만들기(Transact-SQL)를 참조하십시오.

    USE master;
    GO
    IF EXISTS (SELECT * FROM sys.endpoints
               WHERE name = N'InstInitiatorEndpoint')
         DROP ENDPOINT InstInitiatorEndpoint;
    GO
    CREATE ENDPOINT InstInitiatorEndpoint
    STATE = STARTED
    AS TCP ( LISTENER_PORT = 4022 )
    FOR SERVICE_BROKER (AUTHENTICATION = WINDOWS );
    GO
    

시작자 데이터베이스, 마스터 키 및 사용자 만들기

  1. 쿼리 편집기 창에 다음 코드를 복사하여 붙여 넣습니다. CREATE MASTER KEY 문의 암호를 변경합니다. 그런 다음 코드를 실행하여 이 자습서에 사용할 대상 데이터베이스를 만듭니다. 기본적으로 새 데이터베이스의 ENABLE_BROKER 옵션은 활성화되어 있습니다. 코드는 암호와 및 원격 연결을 지원하는 데 사용되는 마스터 키 및 사용자도 만듭니다.

    USE master;
    GO
    IF EXISTS (SELECT * FROM sys.databases
               WHERE name = N'InstInitiatorDB')
         DROP DATABASE InstInitiatorDB;
    GO
    CREATE DATABASE InstInitiatorDB;
    GO
    USE InstInitiatorDB;
    GO
    
    CREATE MASTER KEY
           ENCRYPTION BY PASSWORD = N'<EnterStrongPassword2Here>';
    GO
    CREATE USER InitiatorUser WITHOUT LOGIN;
    GO
    

시작자 인증서 만들기

  1. 쿼리 편집기 창에 다음 코드를 복사하여 붙여 넣습니다. BACKUP CERTIFICATE 문에 지정된 파일 이름을 사용자 시스템의 폴더를 참조하도록 변경합니다. 그런 다음 코드를 실행하여 메시지를 암호화하는 데 사용할 시작자 인증서를 만듭니다. 지정한 폴더에는 사용자의 Windows 계정과 데이터베이스 엔진 인스턴스가 실행 중인 Windows 계정을 제외한 다른 계정의 액세스를 차단하는 권한이 있어야 합니다. 3단원에서는 InstInitiatorCertificate.cer 파일을 대상 인스턴스에서 액세스할 수 있는 폴더로 직접 복사해야 합니다.

    CREATE CERTIFICATE InstInitiatorCertificate
         AUTHORIZATION InitiatorUser
         WITH SUBJECT = N'Initiator Certificate',
              EXPIRY_DATE = N'12/31/2010';
    
    BACKUP CERTIFICATE InstInitiatorCertificate
      TO FILE = 
    N'C:\storedcerts\$ampleSSBCerts\InstInitiatorCertificate.cer';
    GO
    

메시지 유형 만들기

  1. 쿼리 편집기 창에 다음 코드를 복사하여 붙여 넣습니다. 그런 다음 이를 실행하여 대화를 위한 메시지 유형을 만듭니다. 여기에서 지정하는 메시지 유형 이름 및 속성은 이전 단원에서 InstTargetDB에 만든 이름 및 속성과 동일해야 합니다.

    CREATE MESSAGE TYPE [//BothDB/ 2InstSample/RequestMessage]
           VALIDATION = WELL_FORMED_XML;
    CREATE MESSAGE TYPE [//BothDB/ 2InstSample/ReplyMessage]
           VALIDATION = WELL_FORMED_XML;
    GO
    

계약 만들기

  1. 쿼리 편집기 창에 다음 코드를 복사하여 붙여 넣습니다. 그런 다음 이를 실행하여 대화를 위한 계약을 만듭니다. 여기에서 지정하는 계약 이름 및 속성은 다음 단원에서 InstInitiatorDB에 만들 계약과 동일해야 합니다.

    CREATE CONTRACT [//BothDB/ 2InstSample/SimpleContract]
          ([//BothDB/ 2InstSample/RequestMessage]
             SENT BY INITIATOR,
           [//BothDB/ 2InstSample/ReplyMessage]
             SENT BY TARGET
          );
    GO
    

시작자 큐 및 서비스 만들기

  1. 쿼리 편집기 창에 다음 코드를 복사하여 붙여 넣습니다. 그런 다음 이를 실행하여 대상에 사용될 큐 및 서비스를 만듭니다. CREATE SERVICE 문은 서비스를 InstInitiatorQueue와 연결합니다. 따라서 서비스로 전송되는 모든 이벤트는 InstInitiatorQueue에 수신됩니다. CREATE SERVICE는 또한 이전에 만든 //BothDB/ 2InstSample/SimpleContract를 사용하는 대화만 서비스를 대상 서비스로 사용할 수 있도록 합니다.

    CREATE QUEUE InstInitiatorQueue;
    
    CREATE SERVICE [//InstDB/2InstSample/InitiatorService]
           AUTHORIZATION InitiatorUser
           ON QUEUE InstInitiatorQueue;
    GO
    

대상 개체에 대한 참조 만들기

  1. 쿼리 편집기 창에 다음 코드를 복사하여 붙여 넣습니다. 1단원의 3단계에서 InstTargetCertficate.cer 파일을 복사한 폴더를 참조하도록 FROM FILE 절을 수정합니다. 그런 다음 코드를 실행하여 대상 사용자를 만들고 대상 인증서를 가져옵니다.

    CREATE USER TargetUser WITHOUT LOGIN;
    
    CREATE CERTIFICATE InstTargetCertificate 
       AUTHORIZATION TargetUser
       FROM FILE = 
    N'C:\storedcerts\$ampleSSBCerts\InstTargetCertificate.cer'
    GO
    

경로 만들기

  1. 쿼리 편집기 창에 다음 코드를 복사하여 붙여 넣습니다. MyTargetComputer 문자열을 대상 인스턴스를 실행하는 컴퓨터 이름으로 변경합니다. 그런 다음 코드를 실행하여 대상 서비스 및 시작자 서비스에 대한 경로, 그리고 TargetUser를 대상 서비스 경로에 연결하는 원격 서비스 바인딩을 만듭니다.

    다음 CREATE ROUTE 문은 대상 인스턴스에 중복되는 서비스 이름이 없다고 가정합니다. 대상 인스턴스의 여러 데이터베이스에 같은 이름의 서비스가 있는 경우 BROKER_INSTANCE 절을 사용하여 대화를 열려는 데이터베이스를 지정합니다.

    DECLARE @Cmd NVARCHAR(4000);
    
    SET @Cmd = N'USE InstInitiatorDB;
    CREATE ROUTE InstTargetRoute
    WITH SERVICE_NAME =
           N''//TgtDB/2InstSample/TargetService'',
         ADDRESS = N''TCP://MyTargetComputer:4022'';';
    
    EXEC (@Cmd);
    
    SET @Cmd = N'USE msdb
    CREATE ROUTE InstInitiatorRoute
    WITH SERVICE_NAME =
           N''//InstDB/2InstSample/InitiatorService'',
         ADDRESS = N''LOCAL''';
    
    EXEC (@Cmd);
    GO
    CREATE REMOTE SERVICE BINDING TargetBinding
          TO SERVICE
             N'//TgtDB/2InstSample/TargetService'
          WITH USER = TargetUser;
    
    GO
    

다음 단계

이것으로 자습서에 사용할 시작자 데이터베이스를 성공적으로 만들었습니다. 다음 단원에서는 시작자 개체에 대한 종속성이 있는 대상 개체를 만들어 대상 데이터베이스 구성을 완료합니다. 3단원: 대상 대화 개체 완료를 참조하십시오.

참고 항목

관련 자료

BACKUP CERTIFICATE(Transact-SQL)
CREATE CERTIFICATE(Transact-SQL)
CREATE CONTRACT(Transact-SQL)
CREATE DATABASE(Transact-SQL)
CREATE ENDPOINT(Transact-SQL)
CREATE MASTER KEY(Transact-SQL)
CREATE MESSAGE TYPE(Transact-SQL)
CREATE QUEUE(Transact-SQL)
CREATE REMOTE SERVICE BINDING(Transact-SQL)
CREATE ROUTE(Transact-SQL)
CREATE SERVICE(Transact-SQL)
CREATE USER(Transact-SQL)
EXECUTE(Transact-SQL)
sp_addlinkedserver(Transact-SQL)
Service Broker 대화 보안
대화(Conversation) 아키텍처
서비스 아키텍처

도움말 및 정보

SQL Server 2005 지원 받기