Partager via


Sauvegarde SQL Server vers un URL

Cette rubrique présente les concepts, exigences et composants nécessaires pour utiliser le service stockage Blob Azure comme destination de sauvegarde. La fonctionnalité de sauvegarde et de restauration est identique ou similaire à l’utilisation de DISK ou DE TAPE, avec quelques différences. Les différences, ainsi que toutes les exceptions notables, et quelques exemples de code sont inclus dans cette rubrique.

Exigences, composants et concepts

Dans cette section :

Sécurité

Voici quelques considérations et exigences de sécurité lors de la sauvegarde ou de la restauration à partir des services de stockage Blob Azure.

  • Lors de la création d’un conteneur pour le service stockage Blob Azure, nous vous recommandons de définir l’accès privé. La définition de l’accès privé restreint l’accès aux utilisateurs ou aux comptes en mesure de fournir les informations nécessaires pour s’authentifier auprès du compte Azure.

    Important

    SQL Server nécessite que le nom du compte Azure et l’authentification par clé d’accès soient stockés dans des informations d’identification SQL Server. Ces informations sont utilisées pour s’authentifier auprès du compte Azure lorsqu’elles effectuent des opérations de sauvegarde ou de restauration.

  • Le compte d’utilisateur utilisé pour émettre des commandes BACKUP ou RESTORE doit être au rôle de base de données db_backup operator avec les autorisations Alter any credential.

Présentation des principaux composants et concepts

Les deux sections suivantes présentent le service Stockage Blob Azure et les composants SQL Server utilisés lors de la sauvegarde ou de la restauration à partir du service stockage Blob Azure. Il est important de comprendre les composants et l’interaction entre eux pour effectuer une sauvegarde ou une restauration à partir du service stockage Blob Azure.

La création d’un compte Azure est la première étape de ce processus. SQL Server utilise le nom du compte de stockage Azure et ses valeurs de clé d’accès pour authentifier et écrire et lire des objets blob dans le service de stockage. Les informations d’identification SQL Server stockent ces informations d’authentification et les utilisent durant les opérations de sauvegarde ou de restauration. Pour obtenir une procédure pas à pas complète de la création d’un compte de stockage et de l’exécution d’une restauration simple, consultez Tutoriel Utilisation du service stockage Azure pour la sauvegarde et la restauration SQL Server.

mappage d’un compte de stockage à des informations d’identification sql mappant le

Service Stockage Blob Azure

Compte de stockage : Le compte de stockage est le point de départ de tous les services de stockage. Pour accéder au service Stockage Blob Azure, commencez par créer un compte de stockage Azure. Le nom du compte de stockage et ses propriétés de clé d’accès sont nécessaires pour s’authentifier auprès du service Stockage Blob Azure et de ses composants.

Conteneur: Un conteneur fournit un regroupement d’un ensemble d’objets blob et peut stocker un nombre illimité d’objets blob. Pour écrire une sauvegarde SQL Server dans le service Blob Azure, vous devez avoir au moins le conteneur racine créé.

BLOB: Fichier de n’importe quel type et taille. Il existe deux types d’objets blob qui peuvent être stockés dans le service de stockage Azure Blob : les objets blob de bloc et de page. La sauvegarde SQL Server utilise des objets blob de pages comme type de Blob. Les objets blob sont adressables au format d’URL suivant : https://< storage account.blob.core.windows.net/>< container>/<blob>

Stockage Blob Azure

Pour plus d’informations sur le service Stockage Blob Azure, consultez Guide pratique pour utiliser le service Stockage Blob Azure

Pour plus d’informations sur les blobs, consultez Présentation des objets blob de blocs et des objets blob de pages

Composants SQL Server

URL: Une URL spécifie un URI (Uniform Resource Identifier) dans un fichier de sauvegarde unique. L’URL est utilisée pour fournir l’emplacement et le nom du fichier de sauvegarde SQL Server. Dans cette implémentation, la seule URL valide est une URL qui pointe vers un objet blob de pages dans un compte de stockage Azure. L’URL doit pointer vers un objet blob réel, pas seulement un conteneur. Si l’objet blob n’existe pas, il est créé. Si un objet blob existant est spécifié, BACKUP échoue, sauf si l’option « WITH FORMAT » est spécifiée.

Avertissement

Si vous choisissez de copier et de charger un fichier de sauvegarde dans le service Stockage Blob Azure, utilisez le blob de page comme option de stockage. Les restaurations à partir d'objets blob de blocs ne sont pas prises en charge. Une restauration à partir d'un type d'objet blob de blocs échoue avec une erreur.

Voici un exemple de valeur d’URL : http[s]://ACCOUNTNAME.Blob.core.windows.net/< CONTAINER>/<FILENAME.bak>. HTTPS n’est pas obligatoire, mais il est recommandé.

Credential: Les informations d’identification SQL Server sont un objet utilisé pour stocker les informations d’authentification requises pour se connecter à une ressource en dehors de SQL Server. Ici, les processus de sauvegarde et de restauration SQL Server utilisent des informations d’identification pour s’authentifier auprès du service stockage Blob Azure. Les informations d’identification stockent le nom du compte de stockage et les valeurs de clé d’accès du compte de stockage. Une fois les informations d’identification créées, elles doivent être spécifiées dans l’option WITH CREDENTIAL lors de l’émission des instructions BACKUP/RESTORE. Pour plus d’informations sur la façon d’afficher, copier ou régénérer des clés d’accès de compte de stockage, consultez Clés d’accès au compte de stockage.

Pour obtenir des instructions pas à pas sur la création d’informations d’identification SQL Server, consultez Créer un exemple d’informations d’identification plus loin dans cette rubrique.

Pour plus d’informations générales sur les informations d’identification, consultez Informations d’identification

Pour plus d’informations, sur d’autres exemples où les informations d’identification sont utilisées, consultez Créer un proxy SQL Server Agent.

Limites

  • La sauvegarde vers le stockage Premium n’est pas prise en charge.

  • La taille maximale de sauvegarde prise en charge est de 1 To.

  • Vous pouvez émettre des instructions de sauvegarde ou de restauration à l’aide des applets de commande TSQL, SMO ou PowerShell. Une sauvegarde vers ou une restauration à partir du service stockage Blob Azure à l’aide de l’Assistant Sauvegarde ou restauration de SQL Server Management Studio n’est actuellement pas activée.

  • La création d’un nom d’appareil logique n’est pas prise en charge. Par conséquent, l’ajout d’URL en tant qu’appareil de sauvegarde à l’aide de sp_dumpdevice ou via SQL Server Management Studio n’est pas pris en charge.

  • L’ajout à des objets blob de sauvegarde existants n’est pas pris en charge. Les sauvegardes sur un objet blob existant ne peuvent être remplacées qu’à l’aide de l’option WITH FORMAT.

  • La sauvegarde vers plusieurs objets blob dans une seule opération de sauvegarde n’est pas prise en charge. Par exemple, la commande suivante retourne une erreur :

    BACKUP DATABASE AdventureWorks2012
    TO URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012_1.bak'
       URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012_2.bak'
          WITH CREDENTIAL = 'mycredential'
         ,STATS = 5;  
    GO
    
  • La spécification d’une taille de bloc avec BACKUP n’est pas prise en charge.

  • La spécification n’est MAXTRANSFERSIZE pas prise en charge.

  • Spécification des options d’ensemble de sauvegarde et RETAINDAYSEXPIREDATE non prises en charge.

  • SQL Server est soumis à une limite de 259 caractères pour le nom d'une unité de sauvegarde. BACKUP TO URL utilise 36 caractères pour les éléments requis utilisés pour spécifier l’URL « https://.blob.core.windows.net//.bak  », ce qui laisse 223 caractères pour les noms de compte, de conteneur et d’objet blob réunis.

Prise en charge des instructions de sauvegarde/restauration

Backup/Restore, instruction Soutenu Exceptions Commentaires
SAUVEGARDE BLOCKSIZE et MAXTRANSFERSIZE ne sont pas pris en charge. Nécessite WITH CREDENTIAL spécifié
RESTAURER Nécessite WITH CREDENTIAL spécifié
RESTAURER FILELISTONLY Nécessite la spécification de WITH CREDENTIAL (AVEC IDENTIFIANTS)
RESTORER HEADERONLY Nécessite spécification des identifiants
RESTORER LABELONLY Nécessite que WITH CREDENTIAL spécifié
RESTAURER VERIFYONLY Nécessite que l'identifiant soit spécifié
RESTAURER REWINDONLY

Pour obtenir des informations générales sur les instructions de sauvegarde, consultez BACKUP (Transact-SQL).

Pour obtenir des informations générales sur les instructions de restauration, consultez RESTORE (Transact-SQL).

Prise en charge des arguments de sauvegarde

Raisonnement Soutenu Exception Commentaires
BASE DE DONNÉES
RAPPORT
TO (URL) Contrairement à DISK et TAPE, l’URL ne prend pas en charge la spécification ou la création d’un nom logique. Cet argument est utilisé pour spécifier le chemin d’URL du fichier de sauvegarde.
MIROIR VERS
AVEC LES OPTIONS :
INFORMATIONS D'IDENTIFICATION WITH CREDENTIAL est uniquement pris en charge lors de l’utilisation de l’option BACKUP TO URL pour sauvegarder dans le service stockage Blob Azure.
DIFFÉRENTIEL
Copier uniquement
COMPRESSION|SANS_COMPRESSION
Description
NOM
DATE D'EXPIRATION | JOURS DE CONSERVATION
NOINIT | INIT Cette option est ignorée si elle est utilisée.

L’ajout à des objets blob n’est pas possible. Pour remplacer une sauvegarde, utilisez l’argument FORMAT.
NOSKIP | PASSER
NOFORMAT | FORMAT Cette option est ignorée si elle est utilisée.

Une sauvegarde effectuée sur un objet blob existant échoue, sauf si WITH FORMAT est spécifié. L’objet blob existant est remplacé lorsque WITH FORMAT est spécifié.
DESCRIPTION MÉDIA
MEDIANAME
TAILLE DE BLOC
BUFFERCOUNT
MAXTRANSFERSIZE
NO_CHECKSUM | SOMME DE CONTRÔLE
ARRÊTER_EN_CAS_D_ERREUR | CONTINUER_APRÈS_ERREUR
STATS
REWIND | NOREWIND
UNLOAD | NOUNLOAD
NORECOVERY | ATTENTE
NO_TRUNCATE

Pour plus d’informations sur les arguments de sauvegarde, consultez BACKUP (Transact-SQL).

Prise en charge des arguments de restauration

Raisonnement Soutenu Exceptions Commentaires
BASE DE DONNÉES
RAPPORT
DE (URL) L’argument FROM URL est utilisé pour spécifier le chemin d’URL du fichier de sauvegarde.
OPTIONS WITH :
INFORMATIONS D'IDENTIFICATION L'utilisation de WITH CREDENTIAL est uniquement prise en charge lors de l'utilisation de l'option RESTORE FROM URL pour restaurer à partir du service de stockage Blob Azure.
PARTIEL
RECOVERY | NORECOVERY | VEILLE
CHARGERHISTORIQUE
BOUGER
REMPLACER
REDÉMARRER
UTILISATEUR_RESTREINT
FICHIER
MOT DE PASSE
MEDIANAME
MEDIAPASSWORD
TAILLE DE BLOC
BUFFERCOUNT
MAXTRANSFERSIZE
SOMME DE CONTRÔLE | PAS DE SOMME DE CONTRÔLE
ARRÊTER_EN_CAS_D_ERREUR | CONTINUER_APRÈS_ERREUR
FLUX DE FICHIER
STATS
REWIND | NOREWIND
UNLOAD | NOUNLOAD
KEEP_REPLICATION
KEEP_CDC
ENABLE_BROKER | ERROR_BROKER_CONVERSATIONS | NEW_BROKER
STOPAT | STOPATMARK | STOPBEFOREMARK

Pour plus d’informations sur les arguments Restore, consultez arguments RESTORE (Transact-SQL).

Utilisation de la tâche de sauvegarde dans SQL Server Management Studio

La tâche de sauvegarde dans SQL Server Management Studio a été améliorée pour inclure l’URL comme l’une des options de destination et d’autres objets de prise en charge nécessaires à la sauvegarde dans le stockage Azure, comme les informations d’identification SQL.

Les étapes suivantes décrivent les modifications apportées à la tâche sauvegarder la base de données pour permettre la sauvegarde dans le stockage Azure.

  1. Démarrez SQL Server Management Studio et connectez-vous à l’instance SQL Server. Sélectionnez une base de données à sauvegarder, puis cliquez avec le bouton droit sur Tâches, puis sélectionnez Sauvegarder... La boîte de dialogue Sauvegarder la base de données s’ouvre.

  2. Dans la page générale, l’option d’URL est utilisée pour créer une sauvegarde dans le stockage Azure. Lorsque vous sélectionnez cette option, vous voyez d’autres options activées sur cette page :

    1. Nom du fichier : Nom du fichier de sauvegarde.

    2. Informations d’identification SQL : Vous pouvez spécifier des informations d’identification SQL Server existantes ou en créer une nouvelle en cliquant sur Créer en regard de la zone Informations d’identification SQL.

      Important

      La boîte de dialogue qui s’ouvre lorsque vous cliquez sur Créer nécessite un certificat de gestion ou le profil de publication de l’abonnement. SQL Server prend actuellement en charge la version 2.0 du profil de publication. Pour télécharger la version prise en charge du profil de publication, consultez Télécharger le profil de publication 2.0.

      Si vous n’avez pas accès au certificat de gestion ou au profil de publication, vous pouvez créer des informations d’identification SQL en spécifiant le nom du compte de stockage et les informations de clé d’accès à l’aide de Transact-SQL ou de SQL Server Management Studio. Consultez l’exemple de code dans la section Créer des informations d’identification pour créer des informations d’identification à l’aide de Transact-SQL. Vous pouvez également utiliser SQL Server Management Studio, à partir de l’instance du moteur de base de données, cliquer avec le bouton droit sur Sécurité, sélectionner Nouveau et sélectionner Informations d’identification. Spécifiez le nom du compte de stockage pour l’identité et la clé d’accès dans le champ Mot de passe .

    3. Conteneur de stockage Azure : Nom du conteneur de stockage Azure pour stocker les fichiers de sauvegarde.

    4. Préfixe d’URL : Cette opération est générée automatiquement à l’aide des informations spécifiées dans les champs décrits dans les étapes précédentes. Si vous modifiez cette valeur manuellement, vérifiez qu’elle correspond aux autres informations que vous avez fournies précédemment. Par exemple, si vous modifiez l’URL de stockage, vérifiez que les informations d’identification SQL sont définies pour s’authentifier auprès du même compte de stockage.

Lorsque vous sélectionnez l’URL comme destination, certaines options de la page Options multimédias sont désactivées. Les rubriques suivantes contiennent plus d’informations sur la boîte de dialogue Sauvegarder la base de données :

Sauvegarder la base de données (page Général)

Sauvegarder la base de données (page Options du média)

Sauvegarder la base de données (page Options de sauvegarde)

Créer des informations d’identification - S’authentifier auprès du stockage Azure

Sauvegarde de SQL Server vers une URL avec l'Assistant du Plan de Maintenance

Comme pour la tâche de sauvegarde décrite précédemment, l’Assistant Plan de maintenance dans SQL Server Management Studio a été amélioré pour inclure l’URL comme l’une des options de destination et d’autres objets de prise en charge nécessaires à la sauvegarde vers le stockage Azure, comme les informations d’identification SQL. Pour plus d’informations, consultez la section Définir des tâches de sauvegarde dans l'Assistant Plan de Maintenance.

Restauration à partir du stockage Azure à l’aide de SQL Server Management Studio

Si vous restaurez une base de données, l’URL est incluse en tant qu’appareil à restaurer. Les étapes suivantes décrivent les modifications apportées à la tâche de restauration pour permettre la restauration à partir du stockage Azure :

  1. Lorsque vous sélectionnez Appareils dans la page Général de la tâche de restauration dans SQL Server Management Studio, vous accédez à la boîte de dialogue Sélectionner des appareils de sauvegarde qui inclut l’URL comme type de support de sauvegarde.

  2. Lorsque vous sélectionnez l’URL et cliquez sur Ajouter, la boîte de dialogue Se connecter au stockage Azure s’ouvre. Spécifiez les informations d’identification SQL pour l’authentification auprès du stockage Azure.

  3. SQL Server se connecte ensuite au stockage Azure à l’aide des informations d’identification SQL que vous avez fournies et ouvre la boîte de dialogue Localiser le fichier de sauvegarde dans Azure . Les fichiers de sauvegarde résidant dans le stockage sont affichés sur cette page. Sélectionnez le fichier que vous souhaitez utiliser pour restaurer, puis cliquez sur OK. Vous revenez ainsi à la boîte de dialogue Sélectionner les périphériques de sauvegarde , puis cliquez sur OK dans cette boîte de dialogue pour revenir à la boîte de dialogue de restauration principale dans laquelle vous serez en mesure de terminer la restauration. Pour plus d’informations, consultez les rubriques suivantes :

    Restaurer la base de données (page Général)

    Restaurer la base de données (page Fichiers)

    Restaurer la base de données (page Options)

Exemples de code

Cette section contient les exemples suivants.

Créer un identifiant

L’exemple suivant crée des informations d’identification qui stockent les informations d’authentification de Azure Storage.

IF NOT EXISTS  
(SELECT * FROM sys.credentials   
WHERE credential_identity = 'mycredential')  
CREATE CREDENTIAL mycredential WITH IDENTITY = 'mystorageaccount'  
,SECRET = '<storage access key>' ;  
// Connect to default sql server instance on local machine  
Server server = new Server(".");  
string identity = "mystorageaccount";  
string secret = "<storage access key>";  

// Create a Credential  
string credentialName = "mycredential";  
Credential credential = new Credential(server, credentialName);  
credential.Create(identity, secret);  
# create variables  
$storageAccount = "mystorageaccount"  
$storageKey = "<storage access key>"  
$secureString = ConvertTo-SecureString $storageKey  -asplaintext -force  
$credentialName = "mycredential"  

$srvPath = "SQLSERVER:\SQL\COMPUTERNAME\INSTANCENAME"  
# for default instance, the $srvpath variable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"  

# Create a credential  
New-SqlCredential -Name $credentialName -Path $srvpath -Identity $storageAccount -Secret $secureString

Sauvegarde d’une base de données complète

L’exemple suivant sauvegarde la base de données AdventureWorks2012 dans le service stockage Blob Azure.

BACKUP DATABASE AdventureWorks2012   
TO URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012.bak'   
      WITH CREDENTIAL = 'mycredential'   
      ,COMPRESSION  
      ,STATS = 5;  
GO
// Connect to default sql server instance on local machine  
Server server = new Server(".");  
string identity = "mystorageaccount";  

string credentialName = "mycredential";  
string dbName = "AdventureWorks2012";  
string blobContainerName = "mycontainer";  

// Generate Unique Url  
string url = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-{3}.bak",  
         identity,  
         blobContainerName,  
         dbName,  
         DateTime.Now.ToString("s").Replace(":", "-"));  

// Backup to Url  
Backup backup = new Backup();  
backup.CredentialName = credentialName;  
backup.Database = dbName;  
backup.CompressionOption = BackupCompressionOptions.On;  
backup.Devices.AddDevice(url, DeviceType.Url);  
backup.SqlBackup(server);  
# create variables  
$backupUrlContainer = "https://mystorageaccount.blob.core.windows.net/mycontainer/"  
$credentialName = "mycredential"  
$srvPath = "SQLSERVER:\SQL\COMPUTERNAME\INSTANCENAME"   
# for default instance, the $srvpath varilable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"  

# navigate to SQL Server Instance  
CD $srvPath   
$backupFile = $backupUrlContainer + "AdventureWorks2012" +  ".bak"  
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile  -SqlCredential $credentialName -CompressionOption On

Sauvegarde de la base de données et du journal

L’exemple suivant sauvegarde l’exemple de base de données AdventureWorks2012, qui utilise le modèle de récupération simple par défaut. Afin de prendre en charge les sauvegardes de journaux, la base de données AdventureWorks2012 est modifiée pour utiliser le mode de récupération complète. L’exemple crée ensuite une sauvegarde complète de la base de données sur Azure Blob, puis après une période d’activité de mise à jour, il sauvegarde le journal. Cet exemple crée un nom de fichier de sauvegarde avec un horodatage de date et d'heure.

-- To permit log backups, before the full database backup, modify the database   
-- to use the full recovery model.  
USE master;  
GO  
ALTER DATABASE AdventureWorks2012  
   SET RECOVERY FULL;  
GO  

-- Back up the full AdventureWorks2012 database.  
       -- First create a file name for the backup file with DateTime stamp  

DECLARE @Full_Filename AS VARCHAR (300);  
SET @Full_Filename = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012_Full_'+   
REPLACE (REPLACE (REPLACE (CONVERT (VARCHAR (40), GETDATE (), 120), '-','_'),':', '_'),' ', '_') + '.bak';   
--Back up Adventureworks2012 database  

BACKUP DATABASE AdventureWorks2012  
TO URL =  @Full_Filename  
WITH CREDENTIAL = 'mycredential';  
,COMPRESSION  
GO  
-- Back up the AdventureWorks2012 log.  
DECLARE @Log_Filename AS VARCHAR (300);  
SET @Log_Filename = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012_Log_'+   
REPLACE (REPLACE (REPLACE (CONVERT (VARCHAR (40), GETDATE (), 120), '-','_'),':', '_'),' ', '_') + '.trn';  
BACKUP LOG AdventureWorks2012  
 TO URL = @Log_Filename  
 WITH CREDENTIAL = 'mycredential'  
 ,COMPRESSION;  
GO  
// Connect to default sql server instance on local machine  
Server server = new Server(".");  
string identity = "mystorageaccount";  

string credentialName = "mycredential";  
string dbName = "AdventureWorks2012";  
string blobContainerName = "mycontainer";  

// Generate Unique Url for data backup  
string urlDataBackup = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}_Data-{3}.bak",  
         identity,  
         blobContainerName,  
         dbName,  
         DateTime.Now.ToString("s").Replace(":", "-"));  

// Backup Database to Url  
Backup backupData = new Backup();  
backupData.CredentialName = credentialName;  
backupData.Database = dbName;  
backup.CompressionOption = BackupCompressionOptions.On;  
backupData.Devices.AddDevice(urlDataBackup, DeviceType.Url);  
backupData.SqlBackup(server);  

// Generate Unique Url for data backup  
string urlLogBackup = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}_Log-{3}.bak",  
         identity,  
         blobContainerName,  
         dbName,  
         DateTime.Now.ToString("s").Replace(":", "-"));  

// Backup Database Log to Url  
Backup backupLog = new Backup();  
backupLog.CredentialName = credentialName;  
backupLog.Database = dbName;  
backup.CompressionOption = BackupCompressionOptions.On;  
backupLog.Devices.AddDevice(urlLogBackup, DeviceType.Url);  
backupLog.Action = BackupActionType.Log;  
backupLog.SqlBackup(server);  
#create variables  
$backupUrlContainer = "https://mystorageaccount.blob.core.windows.net/mycontainer/"  
$credentialName = "mycredential"  
$srvPath = "SQLSERVER:\SQL\COMPUTERNAME\INSTANCENAME"  
# for default instance, the $srvpath variable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"  

# navigate to theSQL Server Instance
CD $srvPath   
#Create a unique file name for the full database backup  
$backupFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") +  ".bak"  

#Backup Database to URL
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile  -SqlCredential $credentialName -CompressionOption On -BackupAction Database    

#Create a unique file name for log backup  

$backupFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") +  ".trn"  

#Backup Log to URL
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile  -SqlCredential $credentialName -CompressionOption On -BackupAction Log

Création d’une sauvegarde complète de fichiers du groupe de fichiers principal

L’exemple suivant crée une sauvegarde complète des fichiers du groupe de fichiers principal.

--Back up the files in Primary:  
BACKUP DATABASE AdventureWorks2012  
    FILEGROUP = 'Primary'  
    TO URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012files.bck'  
    WITH CREDENTIAL = 'mycredential'  
    ,COMPRESSION;  
GO  
// Connect to default sql server instance on local machine  
Server server = new Server(".");  
string identity = "mystorageaccount";  

string credentialName = "mycredential";  
string dbName = "AdventureWorks2012";  
string blobContainerName = "mycontainer";  

// Generate Unique Url  
string url = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-{3}.bck",  
         identity,  
         blobContainerName,  
         dbName,  
         DateTime.Now.ToString("s").Replace(":", "-"));  

// Backup to Url  
Backup backup = new Backup();  
backup.CredentialName = credentialName;  
backup.Database = dbName;  
backup.Action = BackupActionType.Files;  
backup.DatabaseFileGroups.Add("PRIMARY");  
backup.CompressionOption = BackupCompressionOptions.On;  
backup.Devices.AddDevice(url, DeviceType.Url);  
backup.SqlBackup(server);
#create variables  
$backupUrlContainer = "https://mystorageaccount.blob.core.windows.net/mycontainer/"  
$credentialName = "mycredential"  
$srvPath = "SQLSERVER:\SQL\COMPUTERNAME\INSTANCENAME"  
# for default instance, the $srvpath variable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"  

# navigate to the SQL Server Instance  

CD $srvPath   
#Create a unique file name for the file backup  
$backupFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") +  ".bck"  

#Backup Primary File Group to URL  

Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile  -SqlCredential $credentialName -CompressionOption On -BackupAction Files -DatabaseFileGroup Primary

Création d’une sauvegarde différentielle de fichiers du groupe de fichiers principal

L’exemple suivant crée une sauvegarde différentielle du groupe de fichiers principal.

--Back up the files in Primary:  
BACKUP DATABASE AdventureWorks2012  
    FILEGROUP = 'Primary'  
    TO URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012filesdiff.bck'  
    WITH   
       CREDENTIAL = 'mycredential'  
       ,COMPRESSION  
   ,DIFFERENTIAL;  
GO
// Connect to default sql server instance on local machine  
Server server = new Server(".");  
string identity = "mystorageaccount";  

string credentialName = "mycredential";  
string dbName = "AdventureWorks2012";  
string blobContainerName = "mycontainer";  

// Generate Unique Url  
string url = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-{3}.bak",  
         identity,  
         blobContainerName,  
         dbName,  
         DateTime.Now.ToString("s").Replace(":", "-"));  

// Backup to Url  
Backup backup = new Backup();  
backup.CredentialName = credentialName;  
backup.Database = dbName;  
backup.Action = BackupActionType.Files;  
backup.DatabaseFileGroups.Add("PRIMARY");  
backup.Incremental = true;  
backup.CompressionOption = BackupCompressionOptions.On;  
backup.Devices.AddDevice(url, DeviceType.Url);  
backup.SqlBackup(server); 
#create variables  
$backupUrlContainer = "https://mystorageaccount.blob.core.windows.net/mycontainer/"  
$credentialName = "mycredential"  
$srvPath = "SQLSERVER:\SQL\COMUTERNAME\INSTANCENAME"  
# for default instance, the $srvpath variable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"  

# navigate to SQL Server Instance
CD $srvPath   

#create a unique file name for the full backup  
$backupdbFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") +  ".bak"  

#Create a differential backup of the primary filegroup
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile  -SqlCredential $credentialName -CompressionOption On -BackupAction Files -DatabaseFileGroup Primary -Incremental

Restaurer une base de données et déplacer des fichiers

Pour restaurer une sauvegarde complète de la base de données et déplacer la base de données restaurée vers C :\Program Files\Microsoft SQL Server\MSSQL12. MSSQLSERVER\MSSQL\Data directory, procédez comme suit.

-- Backup the tail of the log first
DECLARE @Log_Filename AS VARCHAR (300);  
SET @Log_Filename = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012_Log_'+   
REPLACE (REPLACE (REPLACE (CONVERT (VARCHAR (40), GETDATE (), 120), '-','_'),':', '_'),' ', '_') + '.trn';  
BACKUP LOG AdventureWorks2012  
 TO URL = @Log_Filename  
 WITH CREDENTIAL = 'mycredential'  
 ,NORECOVERY;  
GO  

RESTORE DATABASE AdventureWorks2012 FROM URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012.bak'  
WITH CREDENTIAL = 'mycredential'  
 ,MOVE 'AdventureWorks2012_data' to 'C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.mdf'  
 ,MOVE 'AdventureWorks2012_log' to 'C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.ldf'  
 ,STATS = 5
// Connect to default sql server instance on local machine  
Server server = new Server(".");  
string identity = "mystorageaccount";  

string credentialName = "mycredential";  
string dbName = "AdventureWorks2012";  
string blobContainerName = "mycontainer";  

// Generate Unique Url  
string urlBackupData = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-Data{3}.bak",  
         identity,  
         blobContainerName,  
         dbName,  
         DateTime.Now.ToString("s").Replace(":", "-"));  

// Backup to Url  
Backup backup = new Backup();  
backup.CredentialName = credentialName;  
backup.Database = dbName;  
backup.Devices.AddDevice(urlBackupData, DeviceType.Url);  
backup.SqlBackup(server);  

// Generate Unique Url for tail log backup  
string urlTailLogBackup = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-TailLog{3}.bak",  
         identity,  
         blobContainerName,  
         dbName,  
         DateTime.Now.ToString("s").Replace(":", "-"));  

// Backup Tail Log to Url  
Backup backupTailLog = new Backup();  
backupTailLog.CredentialName = credentialName;  
backupTailLog.Database = dbName;  
backupTailLog.Action = BackupActionType.Log;  
backupTailLog.NoRecovery = true;  
backupTailLog.Devices.AddDevice(urlTailLogBackup, DeviceType.Url);  
backupTailLog.SqlBackup(server);  

// Restore a database and move files  
string newDataFilePath = server.MasterDBLogPath  + @"\" + dbName + DateTime.Now.ToString("s").Replace(":", "-") + ".mdf";  
string newLogFilePath = server.MasterDBLogPath  + @"\" + dbName + DateTime.Now.ToString("s").Replace(":", "-") + ".ldf";  

Restore restore = new Restore();  
restore.CredentialName = credentialName;  
restore.Database = dbName;  
restore.ReplaceDatabase = true;  
restore.Devices.AddDevice(urlBackupData, DeviceType.Url);  
restore.RelocateFiles.Add(new RelocateFile(dbName, newDataFilePath));  
restore.RelocateFiles.Add(new RelocateFile(dbName+ "_Log", newLogFilePath));  
restore.SqlRestore(server);
#create variables  
$backupUrlContainer = "https://mystorageaccount.blob.core.windows.net/mycontainer/"  
$credentialName = "mycredential"  
$srvPath = "SQLSERVER:\SQL\COMPUTERNAME\INSTNACENAME"  
# for default instance, the $srvpath variable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"  

# navigate to SQL Server Instance
CD $srvPath   

#create a unique file name for the full backup  
$backupdbFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") +  ".bak"  

# Full database backup to URL  
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupdbFile  -SqlCredential $credentialName -CompressionOption On      

#Create a unique file name for the tail log backup  
$backuplogFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") +  ".trn"  

#Backup tail log to URL
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile  -SqlCredential $credentialName  -BackupAction Log -NoRecovery    

# Restore Database and move files
$newDataFilePath = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile ("AdventureWorks_Data","C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.mdf")  
$newLogFilePath = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("AdventureWorks_Log","C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.ldf")  

Restore-SqlDatabase -Database AdventureWorks2012 -SqlCredential $credentialName -BackupFile $backupdbFile -RelocateFile @($newDataFilePath,$newLogFilePath)

Restauration vers un point dans le temps à l’aide de STOPAT

L’exemple suivant restaure une base de données à son état à un point dans le temps et affiche une opération de restauration.

RESTORE DATABASE AdventureWorks FROM URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012.bak'   
WITH   
  CREDENTIAL = 'mycredential'  
 ,MOVE 'AdventureWorks2012_data' to 'C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.mdf'  
 ,Move 'AdventureWorks2012_log' to 'C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.ldf'  
 ,NORECOVERY  
 --,REPLACE  
 ,STATS = 5;  
GO   

RESTORE LOG AdventureWorks FROM URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012.trn'   
WITH CREDENTIAL = 'mycredential'  
 ,RECOVERY   
 ,STOPAT = 'Oct 23, 2012 5:00 PM'   
GO  
// Connect to default sql server instance on local machine  
Server server = new Server(".");  
string identity = "mystorageaccount";  

string credentialName = "mycredential";  
string dbName = "AdventureWorks2012";  
string blobContainerName = "mycontainer";  

// Generate Unique Url  
string urlBackupData = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-Data{3}.bak",  
         identity,  
         blobContainerName,  
         dbName,  
         DateTime.Now.ToString("s").Replace(":", "-"));  

// Backup to Url  
Backup backup = new Backup();  
backup.CredentialName = credentialName;  
backup.Database = dbName;  
backup.Devices.AddDevice(urlBackupData, DeviceType.Url);  
backup.SqlBackup(server);  

// Generate Unique Url for Tail Log backup  
string urlTailLogBackup = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-TailLog{3}.bak",  
         identity,  
         blobContainerName,  
         dbName,  
         DateTime.Now.ToString("s").Replace(":", "-"));  

// Backup Tail Log to Url  
Backup backupTailLog = new Backup();  
backupTailLog.CredentialName = credentialName;  
backupTailLog.Database = dbName;  
backupTailLog.Action = BackupActionType.Log;  
backupTailLog.NoRecovery = true;  
backupTailLog.Devices.AddDevice(urlTailLogBackup, DeviceType.Url);  
backupTailLog.SqlBackup(server);  

// Restore a database and move files  
string newDataFilePath = server.MasterDBLogPath + @"\" + dbName + DateTime.Now.ToString("s").Replace(":", "-") + ".mdf";  
string newLogFilePath = server.MasterDBLogPath + @"\" + dbName + DateTime.Now.ToString("s").Replace(":", "-") + ".ldf";  

Restore restore = new Restore();  
restore.CredentialName = credentialName;  
restore.Database = dbName;  
restore.ReplaceDatabase = true;  
restore.NoRecovery = true;  
restore.Devices.AddDevice(urlBackupData, DeviceType.Url);  
restore.RelocateFiles.Add(new RelocateFile(dbName, newDataFilePath));  
restore.RelocateFiles.Add(new RelocateFile(dbName + "_Log", newLogFilePath));  
restore.SqlRestore(server);  
   
// Restore transaction Log with stop at   
Restore restoreLog = new Restore();  
restoreLog.CredentialName = credentialName;  
restoreLog.Database = dbName;  
restoreLog.Action = RestoreActionType.Log;  
restoreLog.Devices.AddDevice(urlBackupData, DeviceType.Url);  
restoreLog.ToPointInTime = DateTime.Now.ToString();   
restoreLog.SqlRestore(server);
#create variables  
$backupUrlContainer = "https://mystorageaccount.blob.core.windows.net/mycontainer/"  
$credentialName = "mycredential"  
$srvPath = "SQLSERVER:\SQL\COMPUTERNAME\INSTANCENAME"  
# for default instance, the $srvpath variable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"  

# Navigate to SQL Server Instance Directory
CD $srvPath   

#create a unique file name for the full backup  
$backupdbFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") +  ".bak"  

# Full database backup to URL  
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupdbFile  -SqlCredential $credentialName -CompressionOption On     

#Create a unique file name for the tail log backup  
$backuplogFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") +  ".trn"  

#Backup tail log to URL
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile  -SqlCredential $credentialName  -BackupAction Log -NoRecovery     

# Restore Database and move files
$newDataFilePath = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile ("AdventureWorks_Data","C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.mdf")  
$newLogFilePath = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("AdventureWorks_Log","C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.ldf")  

Restore-SqlDatabase -Database AdventureWorks2012 -SqlCredential $credentialName -BackupFile $backupdbFile -RelocateFile @($newDataFilePath,$newLogFilePath) -NoRecovery    

# Restore Transaction log with Stop At:  
Restore-SqlDatabase -Database AdventureWorks2012 -SqlCredential $credentialName -BackupFile $backuplogFile  -ToPointInTime (Get-Date).ToString()

Voir aussi

Meilleures pratiques et résolution des problèmes liés à la sauvegarde SQL Server vers l’URL
Sauvegarder et restaurer des bases de données système (SQL Server)