Copia de seguridad y restauración de SQL Server con el servicio de almacenamiento Blob de Windows Azure
En este tema se presentan conceptos, consideraciones y código muestra que son esenciales para configurar y escribir copias de seguridad de SQL Server en el servicio de almacenamiento Blob de Windows Azure y restaurarlas del mismo. También se proporciona un resumen de las ventajas de usar el servicio Blob de Windows Azure para almacenar copias de seguridad de SQL Server.
Esta característica incluida en SQL Server 2012 SP1 CU2 permite hacer copias de seguridad y restaurar SQL Server directamente en el servicio Blob de Windows Azure. Esta característica se puede usar para hacer copia de seguridad de bases de datos de SQL Server en una instancia local o en una instancia de SQL Server que ejecuta un entorno hospedado como Máquina virtual de Windows Azure. La copia de seguridad en la nube ofrece ventajas como disponibilidad, almacenamiento externo con replicación geográfica ilimitado y facilidad de migración de datos a la nube y desde la nube. En esta versión, puede emitir instrucciones BACKUP o RESTORE mediante tsql o SMO. La copia de seguridad o la restauración desde el servicio de almacenamiento Blob de Windows Azure mediante el Asistente para restauración o copia de seguridad de SQL Server Management Studio no está disponible en esta versión.
En SQL Server 2012 SP1 CU4, se puede realizar la copia de seguridad y la restauración desde el servicio de almacenamiento de blobs de Windows Azure con PowerShell. Para solicitar esta actualización, vea este artículo de Knowledge Base. En este tema se incluyen scripts de PowerShell en la sección de ejemplo. Para obtener scripts de PowerShell de ejemplo que administran varias copias de seguridad, vea Use PowerShell to Backup Multiple Databases to Windows Azure Blob Storage Service.
Ventajas de usar el servicio Blob de Windows Azure para las copias de seguridad de SQL Server
Almacenamiento externo flexible, confiable e ilimitado: el almacenamiento de las copias de seguridad en el servicio Blob de Windows Azure puede ser una opción externa cómoda, flexible y de fácil acceso. La creación de almacenamiento externo para las copias de seguridad de SQL Server puede ser tan sencillo como modificar los scripts y trabajos existentes. Normalmente, el almacenamiento externo debe estar suficientemente alejado de la ubicación de la base de datos de producción para impedir que un desastre afecte a las ubicaciones de las bases de datos externa y de producción. La elección de la replicación geográfica en el almacenamiento de blobs permite disponer de un nivel de protección adicional en caso de que se produzca un desastre que pueda afectar a toda la región. Además, las copias de seguridad están disponibles desde cualquier lugar y en cualquier momento y se puede tener acceso a ellas fácilmente para las restauraciones.
Archivado de copias de seguridad: el servicio de almacenamiento Blob de Windows Azure ofrece una alternativa mejor que la opción de cinta que se suele usar para archivar copias de seguridad. El almacenamiento en cinta puede requerir el transporte físico a una instalación externa y medidas para proteger los medios. El almacenamiento de las copias de seguridad en el servicio de almacenamiento Blob de Windows Azure proporciona una opción de archivado instantánea, de alta disponibilidad y duradera.
Sin sobrecarga de administración de hardware: no existe ninguna sobrecarga de administración de hardware con los servicios de Windows Azure. Los servicios de Windows Azure administran el hardware y proporcionan replicación geográfica para ofrecer redundancia y protección frente a errores de hardware.
Actualmente, para las instancias de SQL Server que se ejecutan en una máquina virtual de Windows Azure, se pueden realizar copias de seguridad en los servicios de almacenamiento de Windows Azure Blob mediante la creación de discos conectados. Sin embargo, hay un límite en cuanto al número de discos que puede conectar a una máquina virtual de Windows Azure. Este límite es de 16 discos para una instancia muy grande e inferior para instancias menores. Al habilitar una copia de seguridad directa en el almacenamiento de blobs de Windows Azure, puede eludir el límite de 16 discos.
Además, el archivo de copia de seguridad que ahora se almacena en el servicio de almacenamiento Blob de Windows Azure está disponible directamente en SQL Server local o en otro SQL Server que se ejecute en una máquina virtual de Windows Azure, sin necesidad de adjuntar/separar bases de datos o de descargar y conectar el disco duro virtual.
Ventajas de costo: solo se paga por el servicio que se emplea. Puede ser rentable como opción de archivado externo y de copia de seguridad. Vea la sección sobre Consideraciones sobre la facturación de Windows Azure para obtener más información y vínculos.
Consideraciones sobre la facturación de Windows Azure:
Entender los costos de almacenamiento de Windows Azure permite prever el costo de crear y almacenar copias de seguridad en Windows Azure.
La calculadora de precios de Windows Azure puede ayudarle a calcular los costos.
Almacenamiento: los cargos se basan en el espacio usado y se calculan según una escala graduada y el nivel de redundancia. Para obtener más detalles e información actualizada, vea la sección Administración de datos del artículo Detalles de precios.
Transferencias de datos: las transferencias de datos de entrada a Windows Azure son gratuitas. Las transferencias salientes se cobran por el uso de ancho de banda y se calculan según una escala graduada específica de la región. Para obtener más detalles, vea la sección Transferencias de datos del artículo Detalles de precios.
Requisitos, componentes y conceptos
Esta sección:
Seguridad
Introducción a los principales componentes y conceptos
Servicio de almacenamiento Blob de Windows Azure
Componentes de SQL Server
Limitaciones
Compatibilidad con instrucciones BACKUP y RESTORE
Seguridad
A continuación se muestran los requisitos y las consideraciones de seguridad al hacer copia de seguridad o restaurar desde los servicios de almacenamiento de blobs de Windows Azure.
Al crear un contenedor para el servicio de almacenamiento Blob de Windows Azure, se recomienda establecer el acceso en privado. Al configurar el acceso privado se restringe el acceso a los usuarios o las cuentas capaces de proporcionar la información necesaria para autenticarse en la cuenta de Windows Azure.
Nota de seguridad SQL Server necesita que el nombre de cuenta y la autenticación mediante clave de acceso de Windows Azure se almacene en una credencial de SQL Server. Esta información se emplea para autenticarse en la cuenta de Windows Azure cuando se realizan operaciones de copia de seguridad o de restauración.
La cuenta de usuario que se usa para emitir comandos BACKUP o RESTORE debe tener el rol de base de datos db_backup operator con permisos Alter any credential.
Requisitos previos de la instalación
SQL Server que se ejecuta en una máquina virtual de Windows Azure: si está instalando SQL Server en la máquina virtual de Windows Azure, instale SQL Server 2012 SP1 CU2 o actualice la instancia existente. Para solicitar la actualización al Servicio de soporte al cliente de Microsoft, vea este artículo.
SQL Server local: SQL Server 2012 SP1 CU2 y las versiones posteriores incluyen esta característica. Para solicitar la actualización al Servicio de soporte al cliente de Microsoft, vea este artículo.
Introducción a los principales componentes y conceptos
En las dos secciones siguientes se presentan el servicio de almacenamiento Blob de Windows Azure, y los componentes de SQL Server que se usan al realizar copia de seguridad o restaurar desde el servicio de almacenamiento Blob de Windows Azure. Es importante entender los componentes y la interacción entre ellos para realizar una copia de seguridad o una restauración desde el servicio de almacenamiento Blob de Windows Azure.
La creación de una cuenta de Windows Azure es el primer paso de este proceso. SQL Server usa el Windows Azure storage account name y sus valores de access key para autenticarse y escribir y leer blobs en el servicio de almacenamiento. La credencial de SQL Server almacena esta información de autenticación y se emplea durante las operaciones de copia de seguridad o restauración. Para obtener un tutorial completo sobre cómo crear una cuenta de almacenamiento y realizar una restauración simple, vea Tutorial: Introducción a las copias de seguridad y la restauración de SQL Server con el servicio de almacenamiento Blob de Windows Azurehttps://go.microsoft.com/fwlink/?LinkId=271615.
Servicio de almacenamiento Blob de Windows Azure
Cuenta de almacenamiento: la cuenta de almacenamiento es el punto de partida para todos los servicios de almacenamiento. Para obtener acceso al servicio de almacenamiento Blob de Windows Azure, cree primero una cuenta de almacenamiento de Windows Azure. El storage account name y sus propiedades de access key son necesarios para autenticarse en el servicio de almacenamiento Blob de Windows Azure y sus componentes.
Contenedor: un contenedor proporciona una agrupación de un conjunto de blobs y puede almacenar un número ilimitado de blobs. Para escribir una copia de seguridad de SQL Server en el servicio Blob de Windows Azure, debe haber creado al menos el contenedor raíz.
Blob: un archivo de cualquier tipo y tamaño. Se pueden almacenar dos tipos de blobs en el servicio de almacenamiento Blob de Windows Azure: blobs en bloques y blobs en páginas. La copia de seguridad de SQL Server usa blobs en páginas como tipo de blob. Los blobs son direccionables mediante el siguiente formato de dirección URL: https://<cuenta de almacenamiento>.blob.core.windows. net/<contenedor>/<blob>
Para obtener más información sobre el servicio de almacenamiento Blob de Windows Azure, vea Cómo usar el servicio de almacenamiento Blob de Windows Azure.
Para obtener más información sobre los blobs en páginas, vea Descripción de los blobs en bloques y los blobs en páginas.
Componentes de SQL Server
Dirección URL: una dirección URL especifica un identificador uniforme de recursos (URI) para un archivo de copia de seguridad único. La dirección URL se emplea para proporcionar la ubicación y el nombre del archivo de copia de seguridad de SQL Server. En esta implementación, la única dirección URL válida es una que apunta a un blob en páginas de una cuenta de almacenamiento de Windows Azure. La dirección URL debe apuntar a un blob real, no solo a un contenedor. Si el blob no existe, se crea. Si se especifica un blob existente, se produce un error en BACKUP, a menos que se especifique la opción “WITH FORMAT”.
Advertencia |
---|
Si elige copiar y cargar un archivo de copia de seguridad en el servicio de almacenamiento Blob de Windows Azure, use un blob en páginas como opción de almacenamiento. No se admiten restauraciones desde blobs en bloques. La instrucción RESTORE desde un tipo de blob en bloques produce un error. |
Este es un valor de dirección URL de ejemplo: http[s]://NOMBREDECUENTA.Blob.core.windows. net/<CONTENEDOR>/<NOMBREDEARCHIVO.bak>. HTTPS no es necesario, pero es recomendable.
Credencial: una credencial de SQL Server es un objeto que se usa para almacenar la información de autenticación necesaria para conectarse a un recurso fuera de SQL Server. Aquí, los procesos de copia de seguridad y restauración de SQL Server usan credenciales para autenticarse en el servicio de almacenamiento Blob de Windows Azure. La credencial contiene los valores de nombre y la clave de acceso de la cuenta de almacenamiento. Una vez creada la credencial, se debe especificar en la opción WITH CREDENTIAL al emitir las instrucciones BACKUP y RESTORE. Para obtener más información sobre cómo ver, copiar o regenerar access keys de cuentas de almacenamiento, vea Ver, copiar y regenerar las claves de acceso de una cuenta de almacenamiento de Windows Azure.
Para obtener instrucciones paso a paso sobre cómo crear una credencial de SQL Server, vea el ejemplo de Crear una credential más adelante en este tema.
Para obtener información general sobre las credenciales, vea Credenciales.
Para obtener información sobre otros ejemplos donde se usan credenciales, vea Crear un proxy del Agente SQL Server.
Limitaciones
El tamaño máximo de copia de seguridad admitido es 1 TB.
En esta implementación, puede emitir instrucciones de copia de seguridad o de restauración mediante TSQL o SMO. Actualmente no está habilitada la copia de seguridad o la restauración desde el servicio de almacenamiento Blob de Windows Azure mediante el Asistente para copia de seguridad o restauración de SQL Server Management Studio.
No se admite la creación de un nombre de dispositivo lógico. Por tanto, no se admite agregar URL como dispositivo de copia de seguridad mediante sp_dumpdevice o mediante SQL Server Management Studio.
No se admite anexar a blobs de copia de seguridad existentes. Las copias de seguridad en un blob existente solo se pueden sobrescribir mediante la opción WITH FORMAT.
No se admite la copia de seguridad en varios blobs en una sola operación de copia de seguridad. Por ejemplo, el código siguiente devuelve un error:
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
No se admite especificar un tamaño de bloque con BACKUP.
No se admite especificar MAXTRANSFERSIZE.
No se admite especificar opciones de backupset: RETAINDAYS y EXPIREDATE.
SQL Server tiene un límite máximo de 259 caracteres para un nombre de dispositivo de copia de seguridad. BACKUP TO URL consume 36 caracteres para los elementos necesarios usados para especificar la dirección URL: ‘https://.blob.core.windows. net//.bak, dejando 223 caracteres para los nombres de cuenta, contenedor y blob juntos.
Compatibilidad con instrucciones BACKUP y RESTORE
Instrucción BACKUP/RESTORE |
Admitida |
Excepciones |
Comentarios |
BACKUP |
√ |
No se admiten BLOCKSIZE y MAXTRANSFERSIZE. |
Es necesario especificar WITH CREDENTIAL |
RESTORE |
√ |
Es necesario especificar WITH CREDENTIAL |
|
RESTORE FILELISTONLY |
√ |
Es necesario especificar WITH CREDENTIAL |
|
RESTORE HEADERONLY |
√ |
Es necesario especificar WITH CREDENTIAL |
|
RESTORE LABELONLY |
√ |
Es necesario especificar WITH CREDENTIAL |
|
RESTORE VERIFYONLY |
√ |
Es necesario especificar WITH CREDENTIAL |
|
RESTORE REWINDONLY |
− |
Para conocer la sintaxis y obtener información general acerca de las instrucciones de copia de seguridad, vea BACKUP (Transact-SQL).
Para conocer la sintaxis y obtener información general acerca de las instrucciones de restauración, vea RESTORE (Transact-SQL).
Compatibilidad con los argumentos de copia de seguridad
Argumento |
Admitida |
Excepción |
Comentarios |
DATABASE |
√ |
||
LOG |
√ |
||
TO (URL) |
√ |
A diferencia de DISK y TAPE, URL no admite especificar o crear un nombre lógico. |
Este argumento se emplea para especificar la ruta de acceso de la dirección URL del archivo de copia de seguridad. |
MIRROR TO |
− |
||
OPCIONES DE WITH: |
|||
CREDENTIAL |
√ |
WITH CREDENTIAL solo se admite cuando se usa la opción BACKUP TO URL para hacer copia de seguridad en el servicio de almacenamiento Blob de Windows Azure. |
|
DIFFERENTIAL |
√ |
||
COPY_ONLY |
√ |
||
COMPRESSION|NO_COMPRESSION |
√ |
||
DESCRIPTION |
√ |
||
NAME |
√ |
||
EXPIREDATE | RETAINDAYS |
− |
||
NOINIT | INIT |
− |
Esta opción se omite si se usa. No es posible anexar a blobs. Para sobrescribir una copia de seguridad, use el argumento FORMAT. |
|
NOSKIP | SKIP |
− |
||
NOFORMAT | FORMAT |
√ |
Esta opción se omite si se usa. Una copia de seguridad realizada en un blob existente producirá un error a menos que se especifique WITH FORMAT. Se sobrescribe el blob existente si se especifica WITH FORMAT. |
|
MEDIADESCRIPTION |
√ |
||
MEDIANAME |
√ |
||
BLOCKSIZE |
− |
||
BUFFERCOUNT |
√ |
||
MAXTRANSFERSIZE |
− |
||
NO_CHECKSUM | CHECKSUM |
√ |
||
STOP_ON_ERROR | CONTINUE_AFTER_ERROR |
√ |
||
STATS |
√ |
||
REWIND | NOREWIND |
− |
||
UNLOAD | NOUNLOAD |
− |
||
NORECOVERY | STANDBY |
√ |
||
NO_TRUNCATE |
√ |
Para obtener más información sobre los argumentos de copia de seguridad, vea BACKUP (Transact-SQL).
Compatibilidad con los argumentos de restauración
Argumento |
Admitida |
Excepciones |
Comentarios |
DATABASE |
√ |
||
LOG |
√ |
||
FROM (URL) |
√ |
El argumento FROM URL se emplea para especificar la ruta de acceso de la dirección URL del archivo de copia de seguridad. |
|
Opciones de WITH: |
|||
CREDENTIAL |
√ |
WITH CREDENTIAL solo se admite cuando se usa la opción RESTORE FROM URL para restaurar desde el servicio de almacenamiento Blob de 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 obtener más información sobre los argumentos de restauración, vea RESTORE (argumentos, Transact-SQL).
Ejemplos
Esta sección contiene los siguientes ejemplos.
Crear una credential
Realizar una copia de seguridad completa de la base de datos
Realizar una copia de seguridad de la base de datos y el registro
Crear una copia de seguridad de archivos completa del grupo de archivos principal
Crear una copia de seguridad de archivos diferencial de los grupos de archivos principales
Restaurar una base de datos y mover archivos
Restaurar a un momento dado con STOPAT
Crear una credential
En el ejemplo siguiente se crea una credencial que almacena la información de autenticación de Almacenamiento 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
Realizar una copia de seguridad completa de la base de datos
En el ejemplo siguiente se hace copia de seguridad de la base de datos AdventureWorks2012 en el servicio de almacenamiento Blob de 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
Realizar una copia de seguridad de la base de datos y el registro
En el ejemplo siguiente se realiza la copia de seguridad de la base de datos de ejemplo AdventureWorks2012, que usa de forma predeterminada el modelo de recuperación simple. Para admitir copias de seguridad de registros, se ha modificado la base de datos AdventureWorks2012 para usar el modelo de recuperación completa. A continuación, en el ejemplo se crea una copia de seguridad de base de datos completa en Blob de Windows Azure y, tras un periodo de actividad de actualización, se hace una copia de seguridad del registro. En este ejemplo se crea un nombre de archivo de copia de seguridad con una marca de fecha y 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
Crear una copia de seguridad de archivos completa del grupo de archivos principal
En el ejemplo siguiente se crea una copia de seguridad de archivos completa del grupo de archivos 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
Crear una copia de seguridad de archivos diferencial del grupo de archivos principal
En el ejemplo siguiente se crea una copia de seguridad de archivos diferencial del grupo de archivos 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
Restaurar una base de datos y mover archivos
Para restaurar una copia de seguridad completa y mover la base de datos restaurada al directorio C:\Archivos de programa\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data, realice los pasos siguientes.
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)
Restaurar a un momento dado con STOPAT
En el ejemplo siguiente se restaura una base de datos a su estado en un momento dado y se muestra una operación de restauración.
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()