BACPAC 파일로 내보내기 - Azure SQL Database 및 Azure SQL Managed Instance

적용 대상:Azure SQL DatabaseAzure SQL Managed Instance

다른 플랫폼에 보관하거나 이동하기 위해 데이터베이스를 내보내야 할 경우 데이터베이스 스키마 및 데이터를 BACPAC 파일로 내보낼 수 있습니다. BACPAC 파일은 메타데이터 및 데이터베이스의 데이터를 포함하는 BACPAC의 확장명을 가진 ZIP 파일입니다. BACPAC 파일은 Azure Blob Storage 또는 온-프레미스 스토리지의 로컬 스토리지에 저장할 수 있으며 나중에 Azure SQL Database, Azure SQL Managed Instance 또는 SQL Server 인스턴스로 다시 가져올 수 있습니다.

고려 사항

  • 내보내기에서 트랜잭션이 일관되도록 하려면 내보내기 도중에 쓰기 작업을 수행하면 안 되며, 데이터베이스의 트랜잭션과 일치하는 복사본을 내보내야 합니다.

  • Blob Storage로 내보내는 경우 BACPAC 파일의 최대 크기는 200GB입니다. 더 큰 BACPAC 파일을 보관하려면 SqlPackage를 사용하여 로컬 스토리지로 내보냅니다.

  • Azure Storage 파일 이름은 공백 문자 또는 스페이스와 같은 특수 문자로 끝날 수 없으며 ., <, >, *, %, &, :, \, /, ?(을)를 포함할 수 없습니다. 파일 이름의 길이는 128자보다 적어야 합니다.

  • 내보내기 작업이 20시간을 초과하면 취소될 수 있습니다. 내보내는 중에 성능을 향상시키기 위해 다음을 수행할 수 있습니다.

    • 컴퓨팅 크기를 일시적으로 늘립니다.
    • 내보내기 중에 모든 읽기 및 쓰기 작업 중단
    • 모든 대형 테이블에 null이 아닌 값의 클러스터형 인덱스 를 사용합니다. 클러스터형 인덱스가 없으면 6~12시간보다 오래 걸리면 내보내기가 실패할 수 있습니다. 전체 테이블 내보내기를 시도하려면 내보내기 서비스에서 테이블 스캔을 완료해야 하기 때문입니다. 테이블이 내보내기에 최적화되었는지 확인하는 좋은 방법은 DBCC SHOW_STATISTICS(을)를 실행하고 RANGE_HI_KEY가 null이 아닌지, 해당 값이 잘 배포되어 있는지 검토하는 것입니다. 자세한 내용은 DBCC SHOW_STATISTICS를 참조하세요.
  • 대형 데이터베이스의 경우 BACPAC 내보내기/가져오기 실행이 오래 걸릴 수 있으며, 여러 가지 이유로 실패할 수 있습니다.

참고 항목

BACPAC는 백업에 사용되는 목적이 아니며 작업을 복원합니다. Azure에서는 모든 사용자 데이터베이스의 백업이 자동으로 생성됩니다. 자세한 내용은 비즈니스 연속성 개요Azure SQL Database의 자동화 백업 또는 Azure SQL Managed Instance의 자동화 백업을 참조하세요.

참고 항목

Private Link를 사용하여 가져오기 및 내보내기는 미리 보기로 제공됩니다.

Azure Portal

Azure 포털을 사용하여 Azure SQL Managed Instance에서 데이터베이스의 BACPAC를 내보내는 기능은 현재 지원되지 않습니다. 고려 사항을 참조하세요.

참고

Azure Portal 또는 PowerShell을 통해 제출된 가져오기/내보내기 요청을 처리하는 머신은 BACPAC 파일뿐만 아니라 DacFX(데이터 계층 애플리케이션 프레임워크)에서 생성한 임시 파일도 저장해야 합니다. 필요한 디스크 공간은 동일한 크기의 데이터베이스 간에도 크게 다르며, 데이터베이스 크기의 최대 3배까지 디스크 공간이 필요할 수 있습니다. 가져오기/내보내기 요청을 실행하는 머신에는 450GB의 로컬 디스크 공간만 있습니다. 따라서 일부 요청은 There is not enough space on the disk 오류로 실패할 수 있습니다. 이 경우 해결 방법은 충분한 로컬 디스크 공간이 있는 머신에서 SqlPackage를 실행하는 것입니다. 이 문제를 방지하려면 SQLPackage를 사용하여 150GB보다 큰 데이터베이스를 가져오거나 내보내는 것이 좋습니다.

  1. Azure Portal을 사용하여 데이터베이스를 내보내려면 데이터베이스 페이지를 열고 도구 모음에서 내보내기를 선택합니다.

    Screenshot that highlights the Export button.

  2. BACPAC 파일 이름을 지정하고 내보내기에 대해 기존 Azure Storage 계정 및 컨테이너를 선택한 다음, 원본 데이터베이스에 액세스할 수 있는 적절한 자격 증명을 제공합니다. Azure 관리자도 Azure SQL Database 또는 Azure SQL Managed Instance에서 관리자 권한을 보유하고 않고 있을 수 있으므로 SQL 서버 관리자 로그인이 필요합니다.

    Screenshot shows the Export Database page with username and password specified.

  3. 확인을 선택합니다.

  4. 내보내기 작업의 진행률을 모니터링하려면 내보낼 데이터베이스가 포함된 서버에 대한 페이지를 엽니다. 데이터 관리에서 가져오기/내보내기 기록을 선택합니다.

SQLPackage 유틸리티

대부분의 프로덕션 환경에서 규모 및 성능에 SQLPackage 유틸리티를 사용하는 것이 좋습니다. 테이블의 하위 집합에 대해 여러 SqlPackage 명령을 병렬로 실행하여 가져오기/내보내기 작업의 속도를 높일 수 있습니다.

SQLPackage 명령줄 유틸리티를 사용하여 SQL Database의 데이터베이스를 내보내려면 매개 변수 및 속성 내보내기를 참조하세요. SQLPackage 유틸리티는 Windows, macOS 및 Linux에서 사용할 수 있습니다.

이 예제에서는 Active Directory 유니버설 인증으로 SqlPackage를 사용하여 데이터베이스를 내보내는 방법을 보여 줍니다.

SqlPackage /a:Export /tf:testExport.BACPAC /scs:"Data Source=apptestserver.database.windows.net;Initial Catalog=MyDB;" /ua:True /tid:"apptest.onmicrosoft.com"

Azure Data Studio

Azure Data Studio는 무료 오픈 소스 도구이며 Windows, Mac 및 Linux에서 사용할 수 있습니다. “SQL Server dacpac” 확장은 내보내기 및 가져오기를 포함한 SqlPackage 작업에 대한 마법사 인터페이스를 제공합니다. 확장자 설치 및 사용에 대한 자세한 내용은 SQL Server dacpac 확장자 설명서를 참조하세요.

SSMS(SQL Server Management Studio)

최신 버전의 SQL Server Management Studio는 Azure SQL Database 또는 SQL Managed Instance 데이터베이스의 데이터베이스를 BACPAC 파일로 내보내는 마법사를 제공합니다. 데이터 계층 애플리케이션 내보내기를 참조하세요.

PowerShell

Azure SQL Managed Instance에서는 PowerShell을 사용하여 데이터베이스의 BACPAC를 내보낼 수 없습니다. 고려 사항을 참조하세요.

New-AzSqlDatabaseExport cmdlet을 사용하여 Azure SQL Database 서비스에 데이터베이스 내보내기 요청을 제출합니다. 데이터베이스 크기에 따라 내보내기 작업을 완료하는 데 다소 시간이 걸릴 수 있습니다.

$exportRequest = New-AzSqlDatabaseExport -ResourceGroupName $ResourceGroupName -ServerName $ServerName `
  -DatabaseName $DatabaseName -StorageKeytype $StorageKeytype -StorageKey $StorageKey -StorageUri $BacpacUri `
  -AdministratorLogin $creds.UserName -AdministratorLoginPassword $creds.Password

내보내기 요청의 상태를 확인하려면 Get-AzSqlDatabaseImportExportStatus cmdlet을 사용합니다. 요청 직후에 이 cmdlet을 실행하면 일반적으로 Status: InProgress가 반환됩니다. Status : Succeeded가 표시되면 내보내기가 완료된 것입니다.

$exportStatus = Get-AzSqlDatabaseImportExportStatus -OperationStatusLink $exportRequest.OperationStatusLink
[Console]::Write("Exporting")
while ($exportStatus.Status -eq "InProgress")
{
    Start-Sleep -s 10
    $exportStatus = Get-AzSqlDatabaseImportExportStatus -OperationStatusLink $exportRequest.OperationStatusLink
    [Console]::Write(".")
}
[Console]::WriteLine("")
$exportStatus

내보내기 요청 취소

데이터베이스 작업 - 취소 API 또는 PowerShell Stop-AzSqlDatabaseActivity 명령을 사용하여 내보내기 요청을 취소합니다. 다음은 PowerShell 명령의 예입니다.

Stop-AzSqlDatabaseActivity -ResourceGroupName $ResourceGroupName -ServerName $ServerName -DatabaseName $DatabaseName -OperationId $Operation.OperationId

참고 항목

내보내기 작업을 취소하려면 다음 역할 중 하나가 있어야 합니다.

제한 사항

  • 이 문서에서 Azure Premium Storage에서는 설명하는 방법을 사용하여 BACPAC 파일을 내보낼 수 없습니다.
  • 방화벽 뒤의 스토리지는 현재 지원되지 않습니다.
  • 변경할 수 없는 스토리지는 현재 지원되지 않습니다.
  • Azure SQL Managed Instance는 현재 Azure Portal 또는 Azure PowerShell을 사용하여 BACPAC 파일로 데이터베이스 내보내는 기능을 지원하지 않습니다. 관리되는 인스턴스를 BACPAC 파일로 내보내려면 SQL Server Management Studio 또는 SQLPackage를 사용합니다.
  • 현재 Import/Export 서비스는 MFA가 필요한 경우 Microsoft Entra ID 인증을 지원하지 않습니다.
  • Import\Export 서비스는 SQL 인증 및 Microsoft Entra ID만 지원합니다. Import\Export는 Microsoft ID 애플리케이션 등록과 호환되지 않습니다.