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é 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.
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>
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.
Attention |
---|
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.
Tsql
IF NOT EXISTS (SELECT * FROM sys.credentials WHERE credential_identity = 'mycredential') CREATE CREDENTIAL mycredential WITH IDENTITY = 'mystorageaccount' ,SECRET = '<storage access key>' ;
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);
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.
Tsql
BACKUP DATABASE AdventureWorks2012 TO URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012.bak' WITH CREDENTIAL = 'mycredential' ,COMPRESSION ,STATS = 5; GO
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);
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.
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
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);
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.
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
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);
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.
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
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);
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 :
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
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);
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.
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
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);
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()