Backup e restauração do SQL Server com o serviço de armazenamento de Blob do Windows Azure
Este tópico apresenta conceitos, considerações e o código de exemplo que é fundamental para configurar e gravar backups do SQL Server e restaurações no serviço de armazenamento de Blob do Windows Azure. Ele fornece também um resumo dos benefícios do uso do serviço de Blob do Windows Azure para armazenar backups do SQL Server.
Esse recurso, lançado no SQL Server SP1 2012 CU2, habilita o backup e a restauração do SQL Server diretamente no serviço de Blob do Windows Azure. Ele pode ser usado para fazer backup dos bancos de dados do SQL Server em uma instância local ou em uma instância do SQL Server que esteja executando um ambiente hospedado, como a máquina virtual do Windows Azure. O backup na nuvem oferece benefícios como disponibilidade, armazenamento externo ilimitado replicado geograficamente e facilidade de migração de dados para e da nuvem. Nesta versão, você pode emitir instruções BACKUP ou RESTORE por meio do TSQL ou SMO. O backup ou a restauração no serviço de armazenamento de Blob do Windows Azure usando o assistente de backup ou restauração do SQL Server Management Studio não estão disponíveis nesta versão.
No SQL Server 2012 SP1 CU4, o backup para o serviço de armazenamento de Blob do Windows Azure e a restauração dela usando o PowerShell têm suporte. Para solicitar esta atualização, consulte este artigo da Base de Dados de Conhecimento. Este tópico inclui scripts do PowerShell na seção de exemplo. Para obter scripts do PowerShell de exemplo para gerenciar vários backups, consulte Use PowerShell to Backup Multiple Databases to Windows Azure Blob Storage Service.
Benefícios do uso do serviço de Blob do Windows Azure para backups do SQL Server
Armazenamento externo flexível, confiável e ilimitado: armazenar os backups no serviço de Blob do Windows Azure pode ser uma opção conveniente, flexível e de fácil acesso externo. Criar o armazenamento externo para backups do SQL Server pode ser tão fácil quanto modificando scripts/trabalhos existentes. O armazenamento externo deve estar, normalmente, distante o suficiente do local do banco de dados de produção para evitar um único desastre que possa afetar os locais dos bancos de dados externo e de produção. Ao optar por replicar geograficamente o armazenamento de Blob, você terá uma camada adicional de proteção caso ocorra algum desastre que possa afetar a região inteira. Além disso, os backups estão disponíveis em qualquer lugar e a qualquer momento, e podem ser facilmente acessados para restaurações.
Arquivamento do backup: o serviço de armazenamento de Blob do Windows Azure oferece uma alternativa melhor para a opção de fita geralmente usada para arquivar backups. O armazenamento em fita pode exigir o transporte físico para uma instalação externa e medidas para proteger a mídia. O armazenamento dos backups no armazenamento de Blob do Windows Azure oferece uma opção de arquivamento imediata, altamente disponível e durável.
Sem sobrecarga de gerenciamento de hardware: não há sobrecarga de gerenciamento de hardware nos serviços do Windows Azure. Os serviços do Windows Azure gerenciam o hardware e fornecem replicação geográfica para redundância e proteção contra falhas de hardware.
No momento, para instâncias do SQL Server executadas em uma máquina virtual do Windows Azure, o backup para os serviços de armazenamento de Blob do Windows Azure pode ser feito através da criação de discos conectados. No entanto, há um limite para o número de discos que você pode anexar à máquina virtual do Windows Azure. O limite é 16 discos para uma instância grande adicional, e menos que isso para instâncias menores. Ao habilitar um backup direto para o armazenamento de Blob do Windows Azure, você poderá ignorar o limite de 16 discos.
Além disso, o arquivo de backup que, agora, é armazenado no serviço de armazenamento de Blob do Windows Azure está diretamente disponível para um SQL Server no local ou outro SQL Server em execução em uma máquina virtual do Windows Azure, sem que seja necessário anexar/desanexar o banco de dados ou baixar e anexar o VHD.
Benefícios do custo: pague apenas pelo serviço utilizado. Pode ser tão econômico quanto uma opção de arquivamento externo e de backup. Consulte a seção Considerações sobre cobrança do Windows Azure para obter mais informações e links.
Considerações sobre cobrança do Windows Azure:
Se você compreender os custos de armazenamento do Windows Azure, conseguirá fazer uma previsão do custo da criação e do armazenamento de backups no Windows Azure.
A calculadora de preços do Windows Azure pode ajudar a estimar os custos.
Armazenamento: os encargos baseiam-se no espaço usado, e são calculados em uma escala graduada e no nível de redundância. Para obter mais detalhes e informações atualizadas, consulte a seção Gerenciamento de dados do artigo Detalhes do preço.
Transferências de dados: as transferências de dados de entrada para o Windows Azure são gratuitas. As transferências de saída são cobradas de acordo com o uso da largura de banda e calculadas com base em uma escala graduada específica de região. Para obter mais detalhes, consulte a seção Transferências de dados do artigo Detalhes do preço.
Requisitos, componentes e conceitos
Nesta seção:
Segurança
Introdução aos principais componentes e conceitos
Serviço de armazenamento de Blob do Windows Azure
Componentes do SQL Server
Limitações
Suporte a instruções de backup/restauração
Segurança
Estes são os requisitos e as considerações de segurança para backup e restauração dos serviços de armazenamento de Blob do Windows Azure.
Ao criar um contêiner para o serviço de armazenamento de Blob do Windows Azure, recomendamos que você defina o acesso para privado. A definição do acesso para privado restringe o acesso a usuários ou contas capazes de fornecer as informações necessárias para realizar a autenticação na conta do Windows Azure.
Observação sobre segurança O SQL Server requer que a autenticação da chave de acesso e do nome da conta do Windows Azure seja armazenada em uma credencial do SQL Server. Essas informações são usadas para realizar a autenticação na conta do Windows Azure quando ele executa as operações de backup ou restauração.
A conta de usuário usada para emitir os comandos BACKUP ou RESTORE deve estar na função de banco de dados db_backup operator com as permissões Alter any credential.
Pré-requisitos para instalação
SQL Server em execução em uma máquina virtual do Azure: se você estiver instalando o SQL Server na máquina virtual do Windows Azure, instale o SQL Server 2012 SP1 CU2 ou atualize a instância existente. Para solicitar a atualização no Atendimento ao Cliente da Microsoft, consulte este artigo.
SQL Server no local: o SQL Server 2012, SP1 CU2, ou versões posteriores, inclui esse recurso. Para solicitar a atualização no Atendimento ao Cliente da Microsoft, consulte este artigo.
Introdução aos principais componentes e conceitos
As duas seções a seguir apresentam o serviço de armazenamento de Blob do Windows Azure, e os componentes do SQL Server usados durante o backup ou a restauração do serviço de armazenamento de Blob do Windows Azure. É importante entender os componentes e a interação entre eles para fazer um backup ou uma restauração no serviço de armazenamento de Blob do Windows Azure.
A criação de uma conta do Windows Azure é a primeira etapa desse processo. O SQL Server usa o Windows Azure storage account name e os respectivos valores de access key para autenticar, e gravar e ler blobs no serviço de armazenamento. A credencial do SQL Server armazena essas informações de autenticação e é usada durante as operações de backup ou restauração. Para obter um passo a passo completo de como criar uma conta de armazenamento e executar uma restauração simples, consulte Tutorial sobre uso do serviço de armazenamento do Windows Azure para backup e restauração do SQL Server.
Serviço de armazenamento de Blob do Windows Azure
Conta de armazenamento: a conta de armazenamento é o ponto de partida de todos os serviços de armazenamento. Para acessar o serviço de armazenamento de Blob do Windows Azure, primeiro crie uma conta de armazenamento do Windows Azure. O storage account name e as respectivas propriedades de access key são necessários para realizar a autenticação no serviço de armazenamento de Blob do Windows Azure e seus componentes.
Contêiner: um contêiner fornece o agrupamento de um conjunto de Blobs e pode armazenar um número ilimitado de blobs. Para gravar um backup do SQL Server no serviço de Blob do Windows Azure, você deve ter pelo menos o contêiner raiz criado.
Blob: um arquivo de qualquer tipo e tamanho. Há dois tipos de blobs que podem ser armazenados no serviço de armazenamento de Blob do Windows Azure: blobs de bloco e de página. O backup do SQL Server usa Blobs de página. Os blobs são endereçados através do seguinte formato de URL: https://<conta de armazenamento>.blob.core.windows. net/<contêiner>/<blob>
Para obter mais informações sobre o serviço de armazenamento de Blob do Windows Azure, consulte Como usar o serviço de armazenamento de Blob do Windows Azure
Para obter mais informações sobre Blobs de página, consulte Noções básicas sobre Blobs de bloco e de página
SQL Server Componentes
URL: uma URL especifica um URI para um arquivo de backup exclusivo. A URL é usada para fornecer o local e o nome do arquivo de backup do SQL Server. Nessa implementação, a única URL válida é a que aponta para um Blob de página em uma conta de armazenamento do Windows Azure. A URL deve apontar para um Blob real, e não apenas para um contêiner. Se o Blob não existir, ele será criado. Se um Blob existente for especificado, o BACKUP falhará, a não ser que a opção “WITH FORMAT” seja especificada.
Cuidado |
---|
Se você optar por copiar e carregar um arquivo de backup para o serviço de armazenamento de Blob do Windows Azure, use o blob de página como opção de armazenamento. Não há suporte para restaurações de Blobs de bloco. A RESTAURAÇÃO de um blob de bloco falhará. |
Aqui está um valor de exemplo de URL: http[s]://NOMEDACONTA.Blob.core.windows. net/<CONTÊINER>/<NOMEDOARQUIVO.bak>. O HTTPS não é obrigatório, mas é recomendado.
Credencial: uma credencial do SQL Server é um objeto usado para armazenar as informações de autenticação necessárias para se conectar a um recurso fora do SQL Server. Aqui, os processos de backup e restauração do SQL Server usam a credencial para autenticação no serviço de armazenamento de Blob do Windows Azure. A Credencial armazena o nome da conta de armazenamento e os valores de chave de acesso da conta de armazenamento. Depois que a credencial for criada, ela deverá ser especificada na opção WITH CREDENTIAL ao emitir instruções BACKUP/RESTORE. Para obter mais informações sobre como exibir, copiar ou gerar novamente as access keys da conta de armazenamento, consulte Chaves de acesso da conta de armazenamento.
Para obter instruções passo a passo sobre como criar uma credencial do SQL Server, consulte o exemplo Criar uma credencial mais adiante neste tópico.
Para obter informações gerais sobre credenciais, consulte Credenciais
Para obter informações sobre outros exemplos em que as credenciais são usadas, consulte Criar um proxy do SQL Server Agent.
Limitações
O tamanho máximo de backup com suporte é 1 TB.
Nessa implementação, você pode emitir instruções de backup ou restauração por meio do TSQL ou SMO. Um backup ou uma restauração no serviço de armazenamento de Blob do Windows Azure usando o assistente de backup ou restauração do SQL Server Management Studio não estão habilitados no momento.
Não há suporte para a criação de um nome de dispositivo lógico. Portanto, não há suporte para a adição de uma URL como dispositivo de backup por meio de sp_dumpdevice ou do SQL Server Management Studio.
Não há suporte para a anexação de blobs de backup. Os backups em um Blob existente só podem ser substituídos através da opção WITH FORMAT.
Não há suporte para backup em vários blobs em uma única operação de backup. O exemplo a seguir retornará um erro:
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
Não há suporte para a especificação de um tamanho de bloco com BACKUP.
Não há suporte para a especificação de MAXTRANSFERSIZE.
Não há suporte para a especificação das opções de conjunto de backup - RETAINDAYS e EXPIREDATE.
O SQL Server tem um limite máximo de 259 caracteres em um nome de dispositivo de backup. O BACKUP TO URL consome 36 caracteres nos elementos necessários usados para especificar a URL – ‘https://.blob.core.windows. net//.bak, deixando 223 caracteres para a conta, o contêiner e os nomes de blob juntos.
Suporte a instruções de backup/restauração
Instrução de backup/restauração |
Com suporte |
Exceções |
Comentários |
BACKUP |
√ |
Não há suporte para BLOCKSIZE e MAXTRANSFERSIZE. |
Requer a especificação de WITH CREDENTIAL |
RESTORE |
√ |
Requer a especificação de WITH CREDENTIAL |
|
RESTORE FILELISTONLY |
√ |
Requer a especificação de WITH CREDENTIAL |
|
RESTORE HEADERONLY |
√ |
Requer a especificação de WITH CREDENTIAL |
|
RESTORE LABELONLY |
√ |
Requer a especificação de WITH CREDENTIAL |
|
RESTORE VERIFYONLY |
√ |
Requer a especificação de WITH CREDENTIAL |
|
RESTORE REWINDONLY |
− |
Para obter a sintaxe e informações gerais sobre as instruções de backup, consulte BACKUP (Transact-SQL).
Para obter a sintaxe e informações gerais sobre as instruções de restauração, consulte RESTORE (Transact-SQL).
Suporte para argumentos de backup
Argumento |
Com suporte |
Exceção |
Comentários |
DATABASE |
√ |
||
LOG |
√ |
||
TO (URL) |
√ |
Diferente de DISK e TAPE, a URL não oferece suporte para a especificação ou criação de um nome lógico. |
Esse argumento é usado para especificar o caminho da URL para o arquivo de backup. |
MIRROR TO |
− |
||
WITH OPTIONS: |
|||
CREDENTIAL |
√ |
Há suporte para WITH CREDENTIAL somente quando a opção BACKUP TO URL é usada para fazer backup no serviço de armazenamento de Blob do Windows Azure. |
|
DIFFERENTIAL |
√ |
||
COPY_ONLY |
√ |
||
COMPRESSION|NO_COMPRESSION |
√ |
||
DESCRIPTION |
√ |
||
NAME |
√ |
||
EXPIREDATE | RETAINDAYS |
− |
||
NOINIT | INIT |
− |
Esta opção será ignorada se for usada. Não é possível anexar aos blobs. Para substituir um backup, use o argumento FORMAT. |
|
NOSKIP | SKIP |
− |
||
NOFORMAT | FORMAT |
√ |
Esta opção será ignorada se for usada. Um backup feito em um blob existente falhará, a menos que WITH FORMAT seja especificado. O blob existente será substituído quando WITH FORMAT for especificado. |
|
MEDIADESCRIPTION |
√ |
||
MEDIANAME |
√ |
||
BLOCKSIZE |
− |
||
BUFFERCOUNT |
√ |
||
MAXTRANSFERSIZE |
− |
||
NO_CHECKSUM | CHECKSUM |
√ |
||
STOP_ON_ERROR | CONTINUE_AFTER_ERROR |
√ |
||
STATS |
√ |
||
REWIND | NOREWIND |
− |
||
UNLOAD | NOUNLOAD |
− |
||
NORECOVERY | STANDBY |
√ |
||
NO_TRUNCATE |
√ |
Para obter mais informações sobre os argumentos de backup, consulte BACKUP (Transact-SQL).
Suporte para argumentos de restauração
Argumento |
Com suporte |
Exceções |
Comentários |
DATABASE |
√ |
||
LOG |
√ |
||
FROM (URL) |
√ |
O argumento FROM URL é usado para especificar o caminho da URL do arquivo de backup. |
|
WITH Options: |
|||
CREDENTIAL |
√ |
Há suporte para WITH CREDENTIAL somente quando a opção RESTORE FROM URL é usada para realizar a restauração no serviço de armazenamento de Blob do 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 |
√ |
Para obter mais informações sobre os argumentos de restauração, consulte Argumentos de RESTORE (Transact-SQL).
Exemplos
Esta seção contém os seguintes exemplos:
Criar uma credencial
Fazendo backup de um banco de dados completo
Fazendo backup do banco de dados e do log
Criando um backup de arquivo completo do grupo de arquivos primário
Criando um backup de arquivo diferencial dos grupos de arquivos primários
Restaurando um banco de dados e movendo arquivos
Restauração pontual usando STOPAT
Criar uma credencial
O exemplo a seguir cria uma credencial que armazena as informações sobre autenticação do armazenamento do 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
Fazendo backup de um banco de dados completo
O exemplo a seguir faz backup do banco de dados AdventureWorks2012 no serviço do armazenamento de Blob do 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
Fazendo backup do banco de dados e do log
O exemplo a seguir faz backup do banco de dados de exemplo AdventureWorks2012, que, por padrão, usa o modelo de recuperação simples. Para oferecer suporte a backups de log, o banco de dados AdventureWorks2012 é modificado para usar o modelo de recuperação completa. Em seguida, o exemplo cria um backup de banco de dados completo no Blob do Windows Azure e, após um período de atividades de atualização, faz o backup do log. Esse exemplo cria um nome de arquivo de backup com um carimbo de data/hora.
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
Criando um backup de arquivo completo do grupo de arquivos primário
O exemplo a seguir cria um backup de arquivo completo do grupo de arquivos primário.
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
Criando um backup de arquivo diferencial dos grupo de arquivos primário
O exemplo a seguir cria um backup de arquivo diferencial do grupo de arquivos primário.
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
Restaurar um banco de dados e mover arquivos
Para restaurar um backup de banco de dados completo e mover o banco de dados restaurado para o diretório C:\Arquivos de Programas\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data, execute as etapas a seguir.
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)
Restauração pontual usando STOPAT
O exemplo a seguir restaura um banco de dados para seu estado em um determinado ponto e mostra uma operação de restauração.
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()