저장 프로시저 작업을 사용하여 SSIS 패키지 실행

적용 대상: Azure Data Factory Azure Synapse Analytics

기업용 올인원 분석 솔루션인 Microsoft Fabric의 Data Factory를 사용해 보세요. Microsoft Fabric은 데이터 이동부터 데이터 과학, 실시간 분석, 비즈니스 인텔리전스 및 보고에 이르기까지 모든 것을 다룹니다. 무료로 새 평가판을 시작하는 방법을 알아봅니다!

이 문서에서는 저장 프로시저 작업을 사용하여 Azure Data Factory 및 Synapse 파이프라인에서 SSIS 패키지를 실행하는 방법을 설명합니다.

필수 조건

Azure SQL Database

이 문서의 연습에서는 SSIS 카탈로그를 호스트하는 Azure SQL Database를 사용합니다. Azure SQL Managed Instance를 사용할 수도 있습니다.

Data Factory

이 연습을 구현하려면 Azure Data Factory 인스턴스가 필요합니다. 아직 프로비전되지 않은 경우 빠른 시작: Azure Portal 및 Azure Data Factory Studio를 사용하여 데이터 팩터리 만들기의 단계를 수행할 수 있습니다.

Azure-SSIS Integration Runtime

마지막으로 Azure-SSIS 통합 런타임이 없는 경우 자습서: SSIS 패키지 배포의 단계별 지침에 만들어야 합니다.

저장 프로시저 작업을 사용하여 파이프라인 만들기

이 단계에서는 Data Factory UI를 사용하여 파이프라인을 만듭니다. 아직 Azure Data Factory Studio로 이동하지 않은 경우 Azure Portal에서 데이터 팩터리를 열고 Azure Data Factory Studio 열기 단추를 클릭하여 엽니다.

Screenshot of the Azure Data Factory home page.

다음으로, 저장 프로시저 작업을 새 파이프라인에 추가하고 sp_executesql 저장 프로시저를 사용하여 SSIS 패키지를 실행하도록 구성합니다.

  1. 홈페이지에서 오케스트레이션을 클릭합니다.

    Screenshot that shows the Orchestrate button on the Azure Data Factory home page.

  2. 작업 도구 상자에서 저장 프로시저를 검색하고, 저장 프로시저 작업을 파이프라인 디자이너 화면으로 끌어서 놓습니다.

    Drag-and-drop stored procedure activity

  3. 디자이너 화면에 방금 추가한 저장 프로시저 작업을 선택한 다음, 설정 탭을 선택하고 연결된 서비스 옆에 있는 +새로 만들기를 클릭합니다. SSIS 카탈로그를 호스트하는 Azure SQL의 데이터베이스(SSIDB 데이터베이스)에 대한 연결을 만듭니다.

    New linked service button

  4. 새 연결된 서비스 창에서 다음 단계를 수행합니다.

    1. 유형에 대해 Azure SQL Database를 선택합니다.

    2. 기본 AutoResolveIntegrationRuntime을 선택하여 SSISDB 데이터베이스를 호스트하는 Azure SQL Database에 연결합니다.

    3. 서버 이름 필드에 대해 SSISDB 데이터베이스를 호스트하는 Azure SQL Database를 선택합니다.

    4. 데이터베이스 이름으로 SSISDB를 선택합니다.

    5. 사용자 이름으로 데이터베이스에 대한 액세스 권한이 있는 사용자의 이름을 입력합니다.

    6. 암호에 대해 사용자의 암호를 입력합니다.

    7. 연결 테스트 단추를 클릭하여 데이터베이스에 대한 연결을 테스트합니다.

    8. 저장 단추를 클릭하여 연결된 서비스를 저장합니다.

      Screenshot that shows the process for adding a new linked service.

  5. 설정 탭의 속성 창으로 돌아가서 다음 단계를 완료합니다.

    1. 편집을 선택합니다.

    2. 저장 프로시저 이름 필드에 sp_executesql을 입력합니다.

    3. 저장 프로시저 매개 변수 섹션에서 + 새로 만들기를 클릭합니다.

    4. 매개 변수의 이름으로 stmt를 입력합니다.

    5. 매개 변수의 형식으로 String을 입력합니다.

    6. 매개 변수의 으로 다음 SQL 쿼리를 입력합니다.

      SQL 쿼리에서 folder_name, project_namepackage_name 매개 변수의 올바른 값을 지정합니다.

      DECLARE @return_value INT, @exe_id BIGINT, @err_msg NVARCHAR(150)    EXEC @return_value=[SSISDB].[catalog].[create_execution] @folder_name=N'<FOLDER name in SSIS Catalog>', @project_name=N'<PROJECT name in SSIS Catalog>', @package_name=N'<PACKAGE name>.dtsx', @use32bitruntime=0, @runinscaleout=1, @useanyworker=1, @execution_id=@exe_id OUTPUT    EXEC [SSISDB].[catalog].[set_execution_parameter_value] @exe_id, @object_type=50, @parameter_name=N'SYNCHRONIZED', @parameter_value=1    EXEC [SSISDB].[catalog].[start_execution] @execution_id=@exe_id, @retry_count=0    IF(SELECT [status] FROM [SSISDB].[catalog].[executions] WHERE execution_id=@exe_id)<>7 BEGIN SET @err_msg=N'Your package execution did not succeed for execution ID: ' + CAST(@exe_id AS NVARCHAR(20)) RAISERROR(@err_msg,15,1) END
      

      Azure SQL Database linked service

  6. 파이프라인 구성에 대한 유효성을 검사하려면 도구 모음에서 유효성 검사를 클릭합니다. 파이프라인 유효성 검사 보고서를 닫으려면 >>를 클릭합니다.

    Validate pipeline

  7. 모두 게시 단추를 클릭하여 Data Factory에 파이프라인을 게시합니다.

    Publish

파이프라인 실행 및 모니터링

이 섹션에서는 파이프라인 실행을 트리거한 후 모니터링합니다.

  1. 파이프라인 실행을 트리거하려면 도구 모음에서 트리거를 클릭하고 지금 트리거를 클릭합니다.

    Trigger now

  2. 파이프라인 실행 창에서 마침을 선택합니다.

  3. 왼쪽의 모니터 탭으로 전환합니다. 다른 정보(예: 실행 시작 시간)와 함께 파이프라인 실행 및 해당 상태를 확인합니다. 보기를 새로 고치려면 새로 고침을 클릭합니다.

    Screenshot that shows pipeline runs

  4. 작업 열에서 작업 실행 보기 링크를 클릭합니다. 파이프라인에는 작업이 하나만 있으므로(저장 프로시저 작업) 하나의 작업 실행만 파이프라인으로 표시됩니다.

    Screenshot that shows activity runs

  5. SQL Database의 SSISDB 데이터베이스에 대해 다음 쿼리를 실행하여 패키지가 실행되었는지 확인할 수 있습니다.

    select * from catalog.executions
    

    Verify package executions

참고 항목

또한 파이프라인이 일정대로(시간별, 일별, 등) 실행되도록 파이프라인에 대해 예약된 트리거를 만들 수도 있습니다. 예를 들어 데이터 팩터리 만들기 - Data Factory UI를 참조하세요.

Azure PowerShell

참고 항목

Azure Az PowerShell 모듈을 사용하여 Azure와 상호 작용하는 것이 좋습니다. 시작하려면 Azure PowerShell 설치를 참조하세요. Az PowerShell 모듈로 마이그레이션하는 방법에 대한 자세한 내용은 Azure PowerShell을 AzureRM에서 Azure로 마이그레이션을 참조하세요.

이 섹션에서는 Azure PowerShell을 사용하여 SSIS 패키지를 호출하는 저장 프로시저 작업이 있는 Data Factory 파이프라인을 만듭니다.

Azure PowerShell을 설치 및 구성하는 방법의 지침에 따라 최신 Azure PowerShell 모듈을 설치합니다.

데이터 팩터리 만들기

Azure-SSIS IR이 있는 동일한 데이터 팩터리를 사용하거나 별도의 데이터 팩터리를 만들 수 있습니다. 다음 절차에서는 데이터 팩터리를 만드는 단계를 설명합니다. 이 데이터 팩터리의 저장 프로시저 작업을 사용하여 파이프라인을 만듭니다. 저장 프로시저 작업은 SSISDB 데이터베이스의 저장 프로시저를 실행하여 SSIS 패키지를 실행합니다.

  1. 나중에 PowerShell 명령에서 사용할 리소스 그룹 이름에 대한 변수를 정의합니다. PowerShell에 다음 명령 텍스트를 복사하고, 큰따옴표에 있는 Azure 리소스 그룹의 이름을 지정하고, 명령을 실행합니다. 예: "adfrg"

    $resourceGroupName = "ADFTutorialResourceGroup";
    

    리소스 그룹이 이미 있는 경우 덮어쓰지 않는 것이 좋습니다. $ResourceGroupName 변수에 다른 값을 할당하고 명령을 다시 시도하세요.

  2. 새 리소스 그룹을 만들려면 다음 명령을 실행합니다.

    $ResGrp = New-AzResourceGroup $resourceGroupName -location 'eastus'
    

    리소스 그룹이 이미 있는 경우 덮어쓰지 않는 것이 좋습니다. $ResourceGroupName 변수에 다른 값을 할당하고 명령을 다시 시도하세요.

  3. 데이터 팩터리 이름에 대한 변수를 정의합니다.

    Important

    데이터 팩터리 이름을 전역적으로 고유한 이름으로 업데이트합니다.

    $DataFactoryName = "ADFTutorialFactory";
    
  4. 데이터 팩터리를 만들려면 $ResGrp 변수의 Location 및 ResourceGroupName 속성을 사용하여 다음 Set-AzDataFactoryV2 cmdlet을 실행합니다.

    $DataFactory = Set-AzDataFactoryV2 -ResourceGroupName $ResGrp.ResourceGroupName -Location $ResGrp.Location -Name $dataFactoryName 
    

다음 사항에 유의하세요.

  • Azure Data Factory 이름은 전역적으로 고유해야 합니다. 다음 오류가 표시되면 이름을 변경하고 다시 시도하세요.

    The specified Data Factory name 'ADFv2QuickStartDataFactory' is already in use. Data Factory names must be globally unique.
    
  • Data Factory 인스턴스를 만들려면 Azure에 로그인하는 데 사용할 사용자 계정은 참여자 또는 소유자 역할의 구성원이거나, 또는 Azure 구독의 관리자이어야 합니다.

  • Data Factory를 현재 사용할 수 있는 Azure 지역 목록을 보려면 다음 페이지에서 관심 있는 지역을 선택한 다음, Analytics를 펼쳐서 Data Factory: 지역별 사용 가능한 제품을 찾습니다. 데이터 팩터리에서 사용되는 데이터 저장소(Azure Storage, Azure SQL Database 등) 및 계산(HDInsight 등)은 다른 지역에 있을 수 있습니다.

Azure SQL Database 연결된 서비스 만들기

SSIS 카탈로그를 호스트하는 데이터베이스를 데이터 팩터리에 연결하는 연결된 서비스를 만듭니다. 데이터 팩터리는 이 연결된 서비스의 정보를 사용하여 SSISDB 데이터베이스에 연결하고 저장 프로시저를 실행하여 SSIS 패키지를 실행합니다.

  1. C:\ADF\RunSSISPackage 폴더에 다음 내용이 포함된 AzureSqlDatabaseLinkedService.json이라는 JSON 파일을 만듭니다.

    Important

    파일을 저장하기 전에 <servername>, <username> 및 <password>를 Azure SQL Database의 값으로 바꿉니다.

    {
        "name": "AzureSqlDatabaseLinkedService",
        "properties": {
            "type": "AzureSqlDatabase",
            "typeProperties": {
                "connectionString": "Server=tcp:<servername>.database.windows.net,1433;Database=SSISDB;User ID=<username>;Password=<password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30"
            }
        }
    }
    
  2. Azure PowerShell에서 C:\ADF\RunSSISPackage 폴더로 전환합니다.

  3. Set-AzDataFactoryV2LinkedService cmdlet을 실행하여 연결된 서비스 AzureSqlDatabaseLinkedService를 만듭니다.

    Set-AzDataFactoryV2LinkedService -DataFactoryName $DataFactory.DataFactoryName -ResourceGroupName $ResGrp.ResourceGroupName -Name "AzureSqlDatabaseLinkedService" -File ".\AzureSqlDatabaseLinkedService.json"
    

저장 프로시저 작업을 사용하여 파이프라인 만들기

이 단계에서는 저장 프로시저 작업을 사용하여 파이프라인 만듭니다. 이 작업은 sp_executesql 저장 프로시저를 호출하여 SSIS 패키지를 실행합니다.

  1. C:\ADF\RunSSISPackage 폴더에 다음 내용이 포함된 RunSSISPackagePipeline.json이라는 JSON 파일을 만듭니다.

    Important

    파일을 저장하기 전에 <FOLDER NAME>, <PROJECT NAME>, <PACKAGE NAME>을 SSIS 카탈로그에 있는 폴더, 프로젝트 및 패키지의 이름으로 바꿉니다.

    {
        "name": "RunSSISPackagePipeline",
        "properties": {
            "activities": [
                {
                    "name": "My SProc Activity",
                    "description":"Runs an SSIS package",
                    "type": "SqlServerStoredProcedure",
                    "linkedServiceName": {
                        "referenceName": "AzureSqlDatabaseLinkedService",
                        "type": "LinkedServiceReference"
                    },
                    "typeProperties": {
                        "storedProcedureName": "sp_executesql",
                        "storedProcedureParameters": {
                            "stmt": {
                                "value": "DECLARE @return_value INT, @exe_id BIGINT, @err_msg NVARCHAR(150)    EXEC @return_value=[SSISDB].[catalog].[create_execution] @folder_name=N'<FOLDER NAME>', @project_name=N'<PROJECT NAME>', @package_name=N'<PACKAGE NAME>', @use32bitruntime=0, @runinscaleout=1, @useanyworker=1, @execution_id=@exe_id OUTPUT    EXEC [SSISDB].[catalog].[set_execution_parameter_value] @exe_id, @object_type=50, @parameter_name=N'SYNCHRONIZED', @parameter_value=1    EXEC [SSISDB].[catalog].[start_execution] @execution_id=@exe_id, @retry_count=0    IF(SELECT [status] FROM [SSISDB].[catalog].[executions] WHERE execution_id=@exe_id)<>7 BEGIN SET @err_msg=N'Your package execution did not succeed for execution ID: ' + CAST(@exe_id AS NVARCHAR(20)) RAISERROR(@err_msg,15,1) END"
                            }
                        }
                    }
                }
            ]
        }
    }
    
  2. RunSSISPackagePipeline 파이프라인을 만들려면 Set-AzDataFactoryV2Pipeline cmdlet을 실행합니다.

    $DFPipeLine = Set-AzDataFactoryV2Pipeline -DataFactoryName $DataFactory.DataFactoryName -ResourceGroupName $ResGrp.ResourceGroupName -Name "RunSSISPackagePipeline" -DefinitionFile ".\RunSSISPackagePipeline.json"
    

    샘플 출력은 다음과 같습니다.

    PipelineName      : Adfv2QuickStartPipeline
    ResourceGroupName : <resourceGroupName>
    DataFactoryName   : <dataFactoryName>
    Activities        : {CopyFromBlobToBlob}
    Parameters        : {[inputPath, Microsoft.Azure.Management.DataFactory.Models.ParameterSpecification], [outputPath, Microsoft.Azure.Management.DataFactory.Models.ParameterSpecification]}
    

파이프라인 실행 만들기

Invoke-AzDataFactoryV2Pipeline cmdlet을 사용하여 파이프라인을 실행합니다. Cmdlet은 향후 모니터링을 위해 파이프라인 실행 ID를 캡처합니다.

$RunId = Invoke-AzDataFactoryV2Pipeline -DataFactoryName $DataFactory.DataFactoryName -ResourceGroupName $ResGrp.ResourceGroupName -PipelineName $DFPipeLine.Name

파이프라인 실행 모니터링

다음 PowerShell 스크립트를 실행하여 데이터 복사가 완료될 때까지 지속적으로 파이프라인 실행 상태를 검사합니다. PowerShell 창에서 다음 스크립트를 복사/붙여넣기하고 ENTER 키를 누릅니다.

while ($True) {
    $Run = Get-AzDataFactoryV2PipelineRun -ResourceGroupName $ResGrp.ResourceGroupName -DataFactoryName $DataFactory.DataFactoryName -PipelineRunId $RunId

    if ($Run) {
        if ($run.Status -ne 'InProgress') {
            Write-Output ("Pipeline run finished. The status is: " +  $Run.Status)
            $Run
            break
        }
        Write-Output  "Pipeline is running...status: InProgress"
    }

    Start-Sleep -Seconds 10
}   

트리거 만들기

이전 단계에서는 파이프라인을 주문형으로 호출했습니다. 일정 트리거를 만들어 파이프라인을 예약형으로 실행할 수도 있습니다(매시간, 매일 등).

  1. C:\ADF\RunSSISPackage 폴더에 다음 내용이 포함된 MyTrigger.json이라는 JSON 파일을 만듭니다.

    {
        "properties": {
            "name": "MyTrigger",
            "type": "ScheduleTrigger",
            "typeProperties": {
                "recurrence": {
                    "frequency": "Hour",
                    "interval": 1,
                    "startTime": "2017-12-07T00:00:00-08:00",
                    "endTime": "2017-12-08T00:00:00-08:00"
                }
            },
            "pipelines": [{
                    "pipelineReference": {
                        "type": "PipelineReference",
                        "referenceName": "RunSSISPackagePipeline"
                    },
                    "parameters": {}
                }
            ]
        }
    }    
    
  2. Azure PowerShell에서 C:\ADF\RunSSISPackage 폴더로 전환합니다.

  3. Set-AzDataFactoryV2Trigger cmdlet을 실행하여 트리거를 만듭니다.

    Set-AzDataFactoryV2Trigger -ResourceGroupName $ResGrp.ResourceGroupName -DataFactoryName $DataFactory.DataFactoryName -Name "MyTrigger" -DefinitionFile ".\MyTrigger.json"
    
  4. 기본적으로 트리거는 중지된 상태입니다. Start-AzDataFactoryV2Trigger cmdlet을 실행하여 트리거를 시작합니다.

    Start-AzDataFactoryV2Trigger -ResourceGroupName $ResGrp.ResourceGroupName -DataFactoryName $DataFactory.DataFactoryName -Name "MyTrigger" 
    
  5. Get-AzDataFactoryV2Trigger cmdlet을 실행하여 트리거가 시작되었는지 확인합니다.

    Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"     
    
  6. 한 시간 후에 다음 명령을 실행합니다. 예를 들어 현재 시간이 오후 3:25(UTC)인 경우 오후 4시(UTC)에 명령을 실행합니다.

    Get-AzDataFactoryV2TriggerRun -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -TriggerName "MyTrigger" -TriggerRunStartedAfter "2017-12-06" -TriggerRunStartedBefore "2017-12-09"
    

    SQL Database의 SSISDB 데이터베이스에 대해 다음 쿼리를 실행하여 패키지가 실행되었는지 확인할 수 있습니다.

    select * from catalog.executions
    

Azure Portal을 사용하여 파이프라인을 모니터링 할 수도 있습니다. 단계별 지침은 파이프라인 모니터링을 참조하세요.