Azure Blob Storage에 여러 데이터베이스 백업 - PowerShellBack up Multiple Databases to Azure Blob Storage - PowerShell

이 항목 적용 대상: 예SQL Server없습니다Azure SQL 데이터베이스없습니다Azure SQL 데이터 웨어하우스 없습니다 병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

이 항목에서는 PowerShell cmdlet을 사용하여 Windows Azure Blob 저장소 서비스에 대한 백업을 자동화하는 데 사용할 수 있는 예제 스크립트를 제공합니다.This topic provides sample scripts that can be used to automate backups to Windows Azure Blob storage service using PowerShell cmdlets.

백업 및 복원에 대한 PowerShell cmdlet 개요Overview of PowerShell cmdlets for Backup and Restore

Backup-SqlDatabaseRestore-SqlDatabase 는 백업 및 복원 작업을 수행하는 데 사용할 수 있는 두 가지 주요 cmdlet입니다.The Backup-SqlDatabase and Restore-SqlDatabase are the two main cmdlets available to do backup and restore operations. 또한 SqlCredential cmdlet 집합과 같이 Windows Azure Blob 저장소에 대한 백업을 자동화하는 데 필요할 수 있는 다른 cmdlet도 있습니다. 백업 및 복원 작업에서 사용되는, SQL Server 2017SQL Server 2017 에서 사용할 수 있는 PowerShell cmdlet의 목록은 다음과 같습니다.In addition, there are other cmdlets that may be required to automate backups to Windows Azure Blob storage like the set of SqlCredential cmdlets Following is a list of PowerShell cmdlets available in SQL Server 2017SQL Server 2017 that are used in backup and restore operations:

Backup-SqlDatabaseBackup-SqlDatabase
이 cmdlet은 SQL ServerSQL Server 백업을 만드는 데 사용됩니다.This cmdlet is used to create a SQL ServerSQL Server Backup.

Restore-SqlDatabaseRestore-SqlDatabase
데이터베이스를 복원하는 데 사용됩니다.Used to restore a database.

New-SqlCredentialNew-SqlCredential
이 cmdlet은 Windows Azure 저장소에 대한 SQL Server 백업에 사용할 SQL 자격 증명을 만드는 데 사용됩니다.This cmdlet is used to create a SQL Credential to use for SQL Server Backup to Windows Azure Storage. 자격 증명과 SQL Server 백업 및 복원에서 자격 증명의 사용에 대한 자세한 내용은 Microsoft Azure Blob 저장소 서비스로 SQL Server 백업 및 복원을 참조하세요.For more information on credentials and their use in SQL Server Backup and Restore, see SQL Server Backup and Restore with Microsoft Azure Blob Storage Service.

Get-SqlCredentialGet-SqlCredential
이 cmdlet은 자격 증명 개체와 해당 속성을 검색하는 데 사용됩니다.This cmdlet is used to retrieve the Credential object and its properties.

Remove-SqlCredentialRemove-SqlCredential
SQL 자격 증명 개체를 삭제합니다.Delete a SQL Credential object

Set-SqlCredentialSet-SqlCredential
이 cmdlet은 SQL 자격 증명 개체의 속성을 변경하거나 설정하는 데 사용됩니다.This cmdlet is used to change or set the properties of the SQL Credential Object.

Credential cmdlet은 Windows Azure Blob 저장소에 대한 백업 및 복원 시나리오에서 사용됩니다.The Credential cmdlets are used in Backup and Restore to Windows Azure Blob storage scenarios.

다중 데이터베이스, 다중 인스턴스 백업 작업에 대한 PowerShellPowerShell for Multi-Database, Multi-Instance Backup Operations

아래의 섹션들에는 여러 SQL Server 인스턴스에서 SQL 자격 증명을 만들고, 한 SQL Server 인스턴스의 모든 사용자 데이터베이스를 백업하는 등의 다양한 작업에 대한 스크립트가 포함되어 있습니다.The following sections include scripts for various operations like creating a SQL Credential on multiple instance of SQL Server, backing up all user databases in an instance of SQL Server, and such. 이러한 스크립트를 사용하여 사용자 환경의 요구 사항에 따라 백업 작업을 자동화하거나 예약할 수 있습니다.You can use these scripts to automate or schedule backup operations according to the requirements of your environment. 여기에 있는 스크립트는 예로 제공되었으며 사용자 환경에 맞게 수정하거나 확장할 수 있습니다.The scripts provided here are examples, and may be modified or extended for your environment.

예제 스크립트에 대한 고려 사항은 다음과 같습니다.The following are considerations for the sample scripts:

  1. SQL Server PowerShell 경로 탐색: Windows PowerShell은 cmdlet을 구현하여 PowerShell 공급자가 지원하는 개체의 계층 구조를 나타내는 경로 구조를 탐색합니다.Navigating SQL Server PowerShell paths: Windows PowerShell implements cmdlets to navigate the path structure that represents the hierarchy of objects supported by a PowerShell provider. 경로의 노드를 탐색한 후 다른 cmdlet을 사용하여 현재 개체에 대한 기본 작업을 수행할 수 있습니다.When you have navigated to a node in the path, you can use other cmdlets to perform basic operations on the current object.

  2. Get-ChildItem cmdlet: Get-ChildItem 이 반환하는 정보는 SQL Server PowerShell 경로에서의 위치에 따라 달라집니다.Get-ChildItem cmdlet: The information returned by the Get-ChildItem depends on the location in a SQL Server PowerShell path. 예를 들어 위치가 컴퓨터 수준에 있는 경우 이 cmdlet은 컴퓨터에 설치된 모든 SQL Server 데이터베이스 엔진 인스턴스를 반환합니다.For example, if the location is at the computer level, this cmdlet returns all the SQL Server database engine instances installed on the computer. 또 다른 예로, 위치가 데이터베이스와 같은 개체 수준에 있으면 이 cmdlet은 데이터베이스 개체의 목록을 반환합니다.As another example, if the location is at the object level such as databases, then this cmdlet returns a list of database objects. 기본적으로 Get-ChildItem cmdlet은 시스템 개체를 반환하지 않습니다.By default the Get-ChildItem cmdlet does not return system objects. –Force 매개 변수를 사용하면 시스템 개체를 표시할 수 있습니다.Using the –Force parameter you can see the system objects.

    자세한 내용은 Navigate SQL Server PowerShell Paths을 참조하세요.For more information, see Navigate SQL Server PowerShell Paths.

  3. 변수 값을 변경하여 각 코드 예제를 독립적으로 시도할 수 있지만, Windows Azure 저장소 계정과 SQL 자격 증명을 만드는 것은 사전 전제 조건이며 Windows Azure Blob 저장소 서비스에 대한 모든 백업 및 복원 작업에 필요합니다.Although each code sample can be tried independently by changing the variable values, creating a Windows Azure Storage Account and a SQL Credential are prerequisites and required for all backup and restore operations to Windows Azure Blob storage service.

모든 SQL Server 인스턴스에서 SQL 자격 증명 만들기Create a SQL Credential on All the Instances of SQL Server

두 가지 예제 스크립트가 있으며 둘 모두 컴퓨터의 모든 SQL Server 인스턴스에서 SQL 자격 증명 "mybackupToURL"을 만듭니다.There are two sample scripts, and both create a SQL Credential “mybackupToURL” on all the instances of SQL Server on a computer. 간단한 첫 번째 예에서는 자격 증명을 만들고 예외를 트래핑하지 않습니다.The first example creates is simple and creates the credential and does not trap exceptions. 예를 들어 컴퓨터의 인스턴스 중 하나에 동일한 이름의 기존 자격 증명이 이미 있는 경우 스크립트가 실패합니다.For example, if there was already an existing credential with the same name on one of the instances of the computer, the script would fail. 두 번째 예에서는 오류를 트래핑하여 스크립트가 계속 실행될 수 있도록 합니다.The second example traps errors and allows the script to continue.


import-module sqlps  

# create variables  
$storageAccount = "mystorageaccount"  
$storageKey = "<storageaccesskeyvalue>"  
$secureString = convertto-securestring $storageKey  -asplaintext -force  
$credentialName = "mybackuptoURL"  

#cd to computer level  
cd SQLServer:\SQL\$env:COMPUTERNAME  
# get the list of instances  
$instances = Get-childitem  
#pipe the instances to new-sqlcredentail cmdlet to create SQL credential  
$instances | new-sqlcredential -Name $credentialName  -Identity $storageAccount -Secret $secureString  

import-module sqlps  

# set the parameter values  

$storageAccount = "mystorageaccount"  
$storageKey = "<storageaccesskeyvalue>"  
$secureString = convertto-securestring $storageKey  -asplaintext -force  
$credentialName = "mybackuptoURL"  

#cd to computer level  
cd SQLServer:\SQL\$env:COMPUTERNAME  
# get the list of instances  
$instances = Get-childitem  
#loop through instances and create a SQL credential, output any errors  
foreach ($instance in $instances)  
{  
    Try  
{  
     new-sqlcredential -Name $credentialName -path "SQLServer:\SQL\$($instance.name)" -Identity $storageAccount -Secret $secureString -ea Stop   
}  
Catch [Exception]  
    {  

            write-host "instance - $($instance.name): "$_.Exception.Message  

    }  

 }  

모든 SQL Server 인스턴스에서 SQL 자격 증명 제거Remove A SQL Credential from All the Instances of SQL Server

이 스크립트를 사용하여 컴퓨터에 설치된 모든 SQL Server 인스턴스에서 특정 자격 증명을 제거할 수 있습니다.This script can be used to remove a specific credential from all the instances of SQL Server installed on the computer. 자격 증명 개체가 특정 인스턴스에 없는 경우 오류 메시지가 표시되고 모든 인스턴스가 확인될 때까지 스크립트가 계속 실행됩니다.If the Credential object does not exist on a specific instance, an error message is displayed, and the script continues until all instances are checked.


import-module sqlps  

cd SQLServer:\SQL\$env:COMPUTERNAME  
$credentialName = "mybackuptoURL"  

$instances = Get-childitem  

foreach ($instance in $instances)  
   {   
    try  
        {  
            $path = "SQLServer:\SQL\$($instance.name)\credentials\$credentialName"   
            Remove-sqlCredential -path $path -ea stop   
         }  
         catch [Exception]  
         {  
            write-host $_.Exception.Message  

        }  

    }  

시스템 데이터베이스를 비롯한 모든 데이터베이스에 대한 전체 데이터베이스 백업Full Database Backup for all Databases (INCLUDING SYSTEM DATABASES)

다음 스크립트에서는 컴퓨터에 있는 모든 데이터베이스의 백업을 만듭니다.The following script creates backups of all databases on the computer. 여기에는 사용자 데이터베이스뿐만 아니라 msdb 시스템 데이터베이스도 포함됩니다.This includes both user databases and msdb system database. 이 스크립트에서는 tempdbmodel 시스템 데이터베이스를 필터링합니다.The script filters out tempdb and model system databases.


import-module sqlps  
# set the parameter values  
$storageAccount = "mystorageaccount"  
$blobContainer = "privatecontainertest"  
$backupUrlContainer = "https://$storageAccount.blob.core.windows.net/$blobContainer/"  
$credentialName = "mybackuptoURL"  

# cd to computer level  

cd SQLServer:\SQL\$env:COMPUTERNAME  
$instances = Get-childitem   
# loop through each instances and backup up all the  databases -filter out tempdb and model databases  

 foreach ($instance in $instances)  
 {  
   $path = "sqlserver:\sql\$($instance.name)\databases"  
   $alldatabases = get-childitem -Force -path $path |Where-object {$_.name -ne "tempdb" -and $_.name -ne "model"}   

   $alldatabases | Backup-SqlDatabase -BackupContainer $backupUrlContainer -SqlCredential $credentialName -Compression On -script   
 }  

모든 사용자 데이터베이스에 대한 전체 데이터베이스 백업Full Database Backup for ALL User Databases

다음 스크립트를 사용하여 컴퓨터의 모든 SQL Server 인스턴스에서 모든 사용자 데이터베이스를 백업할 수 있습니다.The following script can be used to back up all the user databases on all the instances of SQL Server on the computer.


import-module sqlps   

$storageAccount = "mystorageaccount"  
$blobContainer = "privatecontainertest"  
$backupUrlContainer = "https://$storageAccount.blob.core.windows.net/$blobContainer/"  
$credentialName = "mybackuptoURL"  

# cd to computer level  

cd SQLServer:\SQL\$env:COMPUTERNAME  
$instances = Get-childitem   
# loop through each instances and backup up all the user databases  
 foreach ($instance in $instances)  
 {  
    $databases = dir "sqlserver:\sql\$($instance.name)\databases"  
   $databases | Backup-SqlDatabase -BackupContainer $backupUrlContainer -SqlCredential $credentialName -Compression On   
 }  

모든 SQL Server 인스턴스의 MASTER 및 MSDB(시스템 데이터베이스)에 대한 전체 데이터베이스 백업Full Database Backup for MASTER and MSDB (SYSTEM DATABASES) On All the Instances of SQL Server

다음 스크립트를 사용하여 컴퓨터에 설치된 모든 SQL Server 인스턴스에서 mastermsdb 데이터베이스를 백업할 수 있습니다.The following script can be used to back up master and msdb databases on all the instances of SQL Server installed on the computer.


import-module sqlps  

$storageAccount = "mystorageaccount"  
$blobContainer = "privatecontainertest"  
$backupUrlContainer = "https://$storageAccount.blob.core.windows.net/$blobContainer/"  
$credentialName = "mybackupToUrl"  
$sysDbs = "master", "msdb"  

#cd to computer level  
cd SQLServer:\SQL\$env:COMPUTERNAME  
$instances = Get-childitem   
foreach ($instance in $instances)  
 {  
      foreach ($s in $sysdbs)  
     {  
Backup-SqlDatabase -Database $s -path "sqlserver:\sql\$($instance.name)" -BackupContainer  $backupUrlContainer -SqlCredential $credentialName -Compression On   
}    
 }  

한 SQL Server 인스턴스의 모든 사용자 데이터베이스에 대한 전체 데이터베이스 백업Full Database Backup for All User Databases on an Instance of SQL Server

다음 스크립트는 SQL Server의 명명된 인스턴스에서 사용할 수 있는 사용자 데이터베이스만 백업하는 데 사용됩니다.The following script is used to back up only the user databases available on a named instance of SQL Server. $srvPath 매개 변수 값을 변경하여 같은 스크립트를 컴퓨터의 기본 인스턴스에 사용할 수 있습니다.The same script can be used for the default instance on the computer by changing the $srvPath parameter value.


import-module sqlps  

$storageAccount = "mystorageaccount"  
$blobContainer = "privatecontainertest"  
$backupUrlContainer = "https://$storageAccount.blob.core.windows.net/$blobContainer/"  
$srvPath = "SQLServer:\SQL\$env:COMPUTERNAME\INSTANCENAME"  # for default instance, the $srvpath variable is "SQLServer:\SQL\$env:COMPUTERNAME\DEFAULT"  
$credentialName = "mybackupToUrl"  

#cd to computer level  
cd SQLServer:\SQL\$env:COMPUTERNAME  

#retrieves the database objects for a specific instance  
$databases = dir $srvPath\databases  

#backup all the user databases  
$databases | Backup-SqlDatabase -BackupContainer $backupUrlContainer -SqlCredential $credentialName -Compression On  

한 SQL Server 인스턴스의 시스템 데이터베이스(MASTER 및 MSDB)에 대한 전체 데이터베이스 백업Full Database Backup for Only System Databases (MASTER AND MSDB) On an Instance of SQL Server

전체 스크립트를 사용하여 SQL Server의 명명된 인스턴스에서 mastermsdb 데이터베이스를 백업할 수 있습니다.The full script can be used to back up the master and the msdb databases on a named instance of SQL Server. $srvPath 매개 변수 값을 변경하여 같은 스크립트를 컴퓨터의 기본 인스턴스에 사용할 수 있습니다.The same script can be used for the default instance on the computer by changing the $srvpath parameter value.


import-module sqlps  

$storageAccount = "mystorageaccount"  
$blobContainer = "privatecontainertest"  
$backupUrlContainer = "https://$storageAccount.blob.core.windows.net/$blobContainer/"  
$srvPath = "SQLServer:\SQL\$env:COMPUTERNAME\INSTANCENAME" # for default instance, the $srvpath variable is "SQLServer:\SQL\$env:COMPUTERNAME\DEFAULT"  
$credentialName = "mybackupToUrl"  

#navigate to instance level  
cd $srvPath  

$sysDbs = "master", "msdb"  
foreach ($s in $sysDbs)   
{  
Backup-SqlDatabase -Database $s -BackupContainer $backupUrlContainer -SqlCredential $credentialName -Compression On  
}  

참고 항목See Also

Microsoft Azure Blob 저장소 서비스로 SQL Server 백업 및 복원 SQL Server Backup and Restore with Microsoft Azure Blob Storage Service
URL에 대한 SQL Server 백업 - 최상의 방법 및 문제 해결SQL Server Backup to URL Best Practices and Troubleshooting