Sauvegarde et restauration SQL Server avec le service de stockage d'objets blob Windows Azure

Cette rubrique présente les concepts, les considérations et un exemple de code essentiels à la configuration et à l'écriture de sauvegardes/restaurations de SQL Server vers/depuis le service de stockage d'objets blob Windows Azure. Elle fournit également un résumé des avantages liés à l'utilisation du service d'objets blob Windows Azure pour stocker des sauvegardes de SQL Server.

Cette fonctionnalité disponible avec SQL Server 2012 SP1 CU2 permet de sauvegarder et de restaurer SQL Server directement dans le service d'objets blob Windows Azure. Elle peut être utilisée pour sauvegarder des bases de données SQL Server sur une instance sur site ou une instance de SQL Server exécutant un environnement intégré tel que l'ordinateur virtuel Windows Azure. La sauvegarde dans le Cloud offre des avantages en termes de disponibilité, de stockage hors site géorépliqué illimité et de facilité de migration des données vers et depuis le Cloud. Dans cette version, vous pouvez publier des instructions BACKUP ou RESTORE à l'aide de TSQL ou de SMO. Les fonctionnalités de sauvegarde vers ou la restauration depuis le service de stockage d'objets blob Windows Azure à l'aide de l'Assistant de sauvegarde ou de restauration SQL Server Management Studio ne sont pas disponibles dans cette version.

Dans SQL Server 2012 SP1 CU4, les procédures de sauvegarde et de restauration vers/depuis le service de stockage d'objets blob Windows Azure à l'aide de PowerShell sont prises en charge. Pour demander cette mise à jour, consultez cet article de la base de connaissances. Cette rubrique inclut des scripts PowerShell dans la section consacrée aux exemples. Pour obtenir des exemples de scripts PowerShell permettant de gérer plusieurs sauvegardes, consultez Use PowerShell to Backup Multiple Databases to Windows Azure Blob Storage Service.

Avantages de l'utilisation du service d'objets blob Windows Azure pour les sauvegardes SQL Server

  • Stockage hors site flexible, fiable et illimité : le stockage de vos sauvegardes sur le service d'objets blob Windows Azure peut représenter une option hors site pratique, flexible et facile d'accès. La création d'un stockage hors site pour vos sauvegardes SQL Server peut être aussi simple que la modification de vos scripts/tâches existants. Le stockage hors site doit généralement être suffisamment éloigné de l'emplacement de la base de données de production pour empêcher un sinistre unique susceptible d'affecter à la fois les emplacements des bases de données hors site et de production. En choisissant de géorépliquer le stockage d'objets blob, vous disposez d'un niveau de protection supplémentaire au cas où un sinistre affecterait l'ensemble de la région. En outre, les sauvegardes sont accessibles n'importe où et à tout moment, et vous pouvez y accéder facilement pour les restaurations.

  • Archive de sauvegarde : le service de stockage d'objets blob Windows Azure offre une meilleure alternative à l'option de stockage sur bande souvent utilisée pour archiver les sauvegardes. Le stockage sur bande peut nécessiter le transport physique vers un emplacement hors site, ainsi que des mesures de protection des supports. En stockant vos sauvegardes dans le stockage d'objets blob Windows Azure, vous disposez d'une option d'archivage instantanée, hautement disponible et durable.

  • Aucune surcharge de gestion du matériel : aucune surcharge de gestion du matériel avec les services Windows Azure. Les services Windows Azure gèrent le matériel et assurent la géoréplication pour la redondance et la protection contre les défaillances matérielles.

  • Actuellement, pour les instances de SQL Server s'exécutant sur un ordinateur virtuel Windows Azure, la sauvegarde dans les services stockage d'objets blob Windows Azure peut être réalisée en créant des disques attachés. Toutefois, le nombre de disques que vous pouvez attacher à un ordinateur virtuel Windows Azure est limité. Cette limite est de 16 disques pour une instance extra-large et inférieure pour les instances plus petites. En activant une sauvegarde directe dans le stockage d'objets blob Windows Azure, vous pouvez contourner la limite de 16 disques.

    En outre, le fichier de sauvegarde qui est maintenant stocké dans le service de stockage d'objets blob Windows Azure est directement accessible pour une instance sur site de SQL Server ou une autre instance de SQL Server s'exécutant sur un ordinateur virtuel Windows Azure, sans avoir besoin d'attacher/détacher la base de données ou de télécharger et attacher le disque dur virtuel.

  • Avantages en termes de coûts : payez uniquement pour le service utilisé. Peut être économique comme option d'archivage hors site et de sauvegarde. Pour plus d'informations et de liens, consultez la section Considérations sur la facturation Windows Azure.

Considérations sur la facturation Windows Azure :

En comprenant les coûts de stockage Windows Azure, vous pouvez prévoir le coût de création et de stockage des sauvegardes dans Windows Azure. 

La Calculatrice Windows Azure peut vous aider à évaluer les coûts.

Stockage : les tarifs sont basés sur l'espace utilisé et sont calculés sur une échelle graduée en fonction du niveau de redondance. Pour plus d'informations à jour, consultez la section Gestion des données de l'article Détails de la tarification.

Transferts de données : les transferts de données entrants vers Windows Azure sont gratuits. Les transferts sortants sont facturés en fonction de l'utilisation de la bande passante et calculés selon une échelle graduée spécifique à la région. Pour plus d'informations, consultez la section Transferts de données de l'article Détails de la tarification.

Configuration requise, composants et concepts

Dans cette section :

  • Sécurité

  • Présentation des principaux éléments et concepts

  • Service de stockage d'objets blob Windows Azure

  • Composants SQL Server

  • Limitations

  • Prise en charge des instructions de sauvegarde/restauration

Sécurité

Vous trouverez ci-dessous les considérations de sécurité et la configuration requise pour la sauvegarde vers ou la restauration depuis les services de stockage d'objets blob Windows Azure.

  • Lorsque vous créez un conteneur pour le service de stockage d'objets blob Windows Azure, nous vous recommandons de définir l'accès sur Privé. La définition d'un accès privé limite l'accès aux seuls utilisateurs ou comptes capables de fournir les informations nécessaires pour s'authentifier auprès du compte Windows Azure.

    Remarque relative à la sécuritéRemarque relative à la sécurité

    SQL Server requiert que le nom de compte Windows Azure et l'authentification par clé d'accès soient stockés dans les informations d'identification SQL Server. Ces informations sont utilisées pour l'authentification auprès d'un compte Windows Azure lors des opérations de sauvegarde ou de restauration.

  • Le compte d'utilisateur utilisé pour publier les commandes BACKUP ou RESTORE doit disposer du rôle de base de données db_backup operator avec les autorisations Alter any credential.

Configuration requise avant l'installation

  • SQL Server s'exécutant sur un ordinateur virtuel Windows Azure : si vous installez SQL Server sur un ordinateur virtuel Windows Azure, installez SQL Server 2012 SP1 CU2, ou mettez à jour votre instance existante. Pour demander une mise à jour auprès du support technique Microsoft, consultez cet article.

  • SQL Server sur site : SQL Server 2012 SP1 CU2 ou versions ultérieures inclut cette fonctionnalité. Pour demander une mise à jour auprès du support technique Microsoft, consultez cet article.

Présentation des principaux éléments et concepts

Les deux sections suivantes présentent le service de stockage d'objets blob Windows Azure, ainsi que les composants SQL Server utilisés lors de la sauvegarde vers ou la restauration depuis le service de stockage d'objets blob Windows Azure. Il est important de comprendre les composants et leur interaction pour effectuer une sauvegarde ou une restauration vers ou depuis le service de stockage d'objets blob Windows Azure.

La création d'un compte Windows Azure est la première étape de ce processus. SQL Server utilise le Windows Azure storage account name et ses valeurs de access key pour authentifier et écrire et lire les objets blob dans le service de stockage. Les informations d'identification de SQL Server stockent ces informations et sont utilisées lors des opérations de sauvegarde ou de restauration. Pour connaître la procédure détaillée de création d'un compte de stockage et la procédure de restauration de base, consultez le Didacticiel sur l'utilisation du service de stockage Windows Azure pour la sauvegarde et la restauration de SQL Server.

mappage de la compte de stockage à l'information d'identification

Service de stockage d'objets blob Windows Azure

Compte de stockage : le compte de stockage constitue le point de départ de tous les services de stockage. Pour accéder au service de stockage d'objets blob Windows Azure, commencez par créer un compte de stockage Windows Azure. Le storage account name et ses propriétés de access key sont requis pour s'authentifier auprès du service de stockage d'objets blob Windows Azure et de ses composants.

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

Objet blob : fichier de tout type et de toute taille. Il existe deux types d'objets blob qui peuvent être enregistrés dans le service de stockage d'objets blob Windows Azure : les objets blob de blocs et les objets blob de pages. La sauvegarde SQL Server utilise des objets blob de pages en tant que type d'objet blob. Les objets blob sont adressables au format d'URL suivant : https://<compte de stockage>.blob.core.windows. net/<conteneur>/<objet blob>

Stockage d'objets blob d'Azure

Pour plus d'informations sur le service de stockage d'objets blob Windows Azure, consultez Procédure d'utilisation du service de stockage d'objets blob Windows Azure

Pour plus d'informations sur les objets blob de pages, consultez Objets blob de blocs et objets blob de pages

Composants de SQL Server

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

AttentionAttention

Si vous choisissez de copier et télécharger un fichier de sauvegarde dans le service de stockage d'objets blob Windows Azure, utilisez un objet blob de pages 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]://NOMCOMPTE.blob.core.windows. net/<CONTENEUR>/<NOMFICHIER.bak> HTTPS n'est pas obligatoire, mais est recommandé.

Informations d'identification : les informations d'identification SQL Server sont des objets utilisés pour stocker les informations d'authentification requises pour la connexion à une ressource en dehors de SQL Server. Ici, les processus de sauvegarde et de restauration SQL Server utilisent les informations d'identification pour authentifier le service de stockage d'objets Blob de Windows Azure. Les informations d'identification contiennent le nom du compte de stockage et ses valeurs de clé d'accès. Une fois les informations d'identification créées, vous devez les spécifier dans l'option WITH CREDENTIAL lorsque vous publiez des instructions BACKUP/RESTORE. Pour plus d'informations sur l'affichage, la copie ou la régénération des access keys de compte de stockage, consultez Afficher, copier et régénérer les clés d'accès d'un compte de stockage Windows Azure.

Pour obtenir des instructions détaillées sur la création d'informations d'identification SQL Server, consultez l'exemple Créer des informations d'identification plus loin dans cette rubrique.

Pour plus d'informations sur les informations d'identification en général, consultez Informations d'identification.

Pour obtenir plus d'informations et d'autres exemples d'utilisation des informations d'identification, consultez Créer un proxy de SQL Server Agent.

Limitations

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

  • Dans cette implémentation, vous pouvez publier des instructions de sauvegarde ou de restauration à l'aide de TSQL ou de SMO. La sauvegarde vers ou la restauration depuis le service de stockage d'objets blob Windows Azure à l'aide de l'Assistant de sauvegarde ou de restauration SQL Server Management Studio ne sont pas disponibles actuellement.

  • La création d'un nom d'unité logique n'est pas prise en charge. Par conséquent, l'ajout d'une URL comme unité de sauvegarde à l'aide de sp_dumpdevice ou de SQL Server Management Studio n'est pas prise en charge.

  • L'ajout d'objets blob de sauvegarde existants n'est pas pris en charge. Les sauvegardes vers un objet blob existant peuvent uniquement être remplacées à l'aide de l'option WITH FORMAT.

  • La sauvegarde vers plusieurs objets blob dans le cadre d'une opération de sauvegarde n'est pas prise en charge. Par exemple, le code suivant 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 de MAXTRANSFERSIZE n'est pas prise en charge.

  • La spécification des options backupset RETAINDAYS et EXPIREDATE n'est pas prise 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 afin de spécifier l'URL `https://.blob.core.windows. net//.bak’, ce qui laisse 223 caractères pour les noms de comptes, de conteneurs et d'objets blob.

Prise en charge des instructions de sauvegarde/restauration

Instruction de sauvegarde/restauration

Prise en charge

Exceptions

Commentaires

BACKUP

BLOCKSIZE et MAXTRANSFERSIZE ne sont pas prises en charge.

Requiert la spécification de WITH SET CREDENTIAL

RESTORE

Requiert la spécification de WITH SET CREDENTIAL

RESTORE FILELISTONLY

Requiert la spécification de WITH SET CREDENTIAL

RESTORE HEADERONLY

Requiert la spécification de WITH SET CREDENTIAL

RESTORE LABELONLY

Requiert la spécification de WITH SET CREDENTIAL

RESTORE VERIFYONLY

Requiert la spécification de WITH SET CREDENTIAL

RESTORE REWINDONLY

Pour plus d'informations sur la syntaxe et les arguments de sauvegarde (BACKUP), consultez BACKUP (Transact-SQL).

Pour plus d'informations sur la syntaxe et les arguments de restauration (RESTORE), consultez RESTORE (Transact-SQL).

Prise en charge des arguments de sauvegarde

Argument

Pris en charge

Exception

Commentaires

DATABASE

LOG

TO (URL)

Contrairement à DISK et TAPE, 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'accès de l'URL du fichier de sauvegarde.

MIRROR TO

WITH OPTIONS :

CREDENTIAL

WITH CREDENTIAL est pris en charge uniquement en cas d'utilisation de l'option BACKUP TO URL pour une sauvegarde dans le service de stockage d'objets blob Windows Azure.

DIFFERENTIAL

COPY_ONLY

COMPRESSION|NO_COMPRESSION

DESCRIPTION

NAME

EXPIREDATE | RETAINDAYS

NOINIT | INIT

Cette option est ignorée si elle est utilisée.

L'ajout aux objets blob n'est pas possible. Pour remplacer une sauvegarde, utilisez l'argument FORMAT.

NOSKIP | SKIP

NOFORMAT | FORMAT

Cette option est ignorée si elle est utilisée.

Une sauvegarde effectuée sur un objet blob existant échoue à moins que WITH FORMAT ne soit spécifié. L'objet blob existant est remplacé lorsque WITH FORMAT est spécifié.

MEDIADESCRIPTION

MEDIANAME

BLOCKSIZE

BUFFERCOUNT

MAXTRANSFERSIZE

NO_CHECKSUM | CHECKSUM

STOP_ON_ERROR | CONTINUE_AFTER_ERROR

STATS

REWIND | NOREWIND

UNLOAD | NOUNLOAD

NORECOVERY | STANDBY

NO_TRUNCATE

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

Prise en charge des arguments de restauration

Argument

Pris en charge

Exceptions

Commentaires

DATABASE

LOG

FROM (URL)

L'argument FROM URL est utilisé pour spécifier le chemin d'accès de l'URL du fichier de sauvegarde.

Options WITH :

CREDENTIAL

WITH CREDENTIAL est pris en charge uniquement en cas d'utilisation de l'option RESTORE FROM pour une restauration depuis le service de stockage d'objets blob Windows Azure.

PARTIAL

RECOVERY | NORECOVERY | STANDBY

LOADHISTORY

MOVE

REPLACE

RESTART

RESTRICTED_USER

FILE

PASSWORD

MEDIANAME

MEDIAPASSWORD

BLOCKSIZE

BUFFERCOUNT

MAXTRANSFERSIZE

CHECKSUM | NO_CHECKSUM

STOP_ON_ERROR | CONTINUE_AFTER_ERROR

FILESTREAM

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 de restauration (RESTORE), consultez Arguments RESTORE (Transact-SQL).

Exemples

Cette section contient les exemples suivants :

  • Créer des informations d'identification

  • Sauvegarde d'une base de données complète

  • Sauvegarde de la base de données et du journal

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

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

  • Restauration d'une base de données et déplacement des fichiers

  • Restauration jusqu'à une date et heure en utilisant STOPAT

Créer des informations d'identification

L'exemple suivant crée des informations d'identification qui stockent les informations d'identification du stockage Windows Azure.

  1. Tsql

    IF NOT EXISTS
    (SELECT * FROM sys.credentials 
    WHERE credential_identity = 'mycredential')
    CREATE CREDENTIAL mycredential WITH IDENTITY = 'mystorageaccount'
    ,SECRET = '<storage access key>' ;
    
  2. C#

    // 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);
    
  3. PowerShell

    # 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 de stockage d'objets blob Windows Azure.

  1. Tsql

    BACKUP DATABASE AdventureWorks2012 
    TO URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012.bak' 
          WITH CREDENTIAL = 'mycredential' 
         ,COMPRESSION
         ,STATS = 5;
    GO 
    
  1. C#

    // 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);
    
  2. PowerShell

    # 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 par défaut le mode de récupération simple. Pour prendre en charge les sauvegardes de fichier journal, la base de données AdventureWorks2012 est modifiée pour utiliser le mode de récupération complète. Enfin, l'exemple crée une sauvegarde complète de la base de données dans l'objet blob Windows Azure, et après la mise à jour, sauvegarde le journal. Cet exemple crée un nom de fichier de sauvegarde avec un tampon d'horodatage.

  1. Tsql

    -- 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
    
  2. C#

    // 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);
    
  3. PowerShell

    #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 du groupe de fichiers principal

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

  1. Tsql

    --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
    
  2. C#

    // 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);
    
  3. PowerShell

    #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 du groupe de fichiers principal

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

  1. Tsql

    --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
    
  2. C#

    // 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);
    
  3. PowerShell

    #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  
    

Restaure une base de données et déplace les fichiers

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

  1. Tsql

    -- 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 
    
  2. C#

    // 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); 
    
  3. PowerShell

    #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 jusqu'à une date et heure en utilisant STOPAT

L'exemple suivant restaure une base de données dans l'état où elle se trouvait à un moment donné et montre une opération de restauration.

  1. Tsql

    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
    
  2. C#

    // 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);
    
  3. PowerShell

    #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()