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

적용 대상:SQL ServerAzure SQL Managed Instance

이 단원에서는 이 자습서에 사용되는 초기자 데이터베이스와 모든 초기자 Service Broker 개체를 만드는 방법을 알아봅니다. 이러한 단계는 데이터베이스 엔진의 초기자 인스턴스와 동일한 컴퓨터에서 실행 중인 Management Studio 복사본에서 실행합니다.

절차

Service Broker 엔드포인트 만들기

  • 다음 코드를 복사하여 쿼리 편집기 창에 붙여넣습니다. 그런 다음, 코드를 실행하여 이 데이터베이스 엔진 인스턴스에 대한 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
    

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

  • 다음 코드를 복사하여 쿼리 편집기 창에 붙여넣습니다. 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
    

초기자 인증서 만들기

  • 다음 코드를 복사하여 쿼리 편집기 창에 붙여넣습니다. 시스템의 폴더를 참조하도록 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
    

메시지 유형 만들기

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

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

계약 만들기

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

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

초기자 큐 및 서비스 만들기

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

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

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

  • 다음 코드를 복사하여 쿼리 편집기 창에 붙여넣습니다. 단원 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
    

경로 만들기

  • 다음 코드를 복사하여 쿼리 편집기 창에 붙여넣습니다. 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: 대상 대화 개체 완료를 참조하세요.

참고 항목