Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se presentan los conceptos, los requisitos y los componentes necesarios para usar el servicio de almacenamiento de blobs de Azure como destino de copia de seguridad. La funcionalidad de copia de seguridad y restauración es igual o similar a cuando se usa DISK o TAPE, con algunas diferencias. Las diferencias son y las excepciones importantes y algunos ejemplos de código se incluyen en este tema.
Requisitos, componentes y conceptos
En esta sección:
Compatibilidad con instrucciones de copia de seguridad y restauración
Uso de la tarea copia de seguridad en SQL Server Management Studio
SQL Server copia de seguridad en dirección URL mediante el Asistente para planes de mantenimiento
Restauración desde Azure almacenamiento mediante SQL Server Management Studio
Security
A continuación se muestran consideraciones y requisitos de seguridad al realizar copias de seguridad o restaurar desde los servicios de Blob Storage de Azure.
Al crear un contenedor para el servicio blob storage de Azure, se recomienda establecer el acceso a privado. Si se establece el acceso a privado, se restringe el acceso a usuarios o cuentas que pueden proporcionar la información necesaria para autenticarse en la cuenta de Azure.
Importante
SQL Server requiere que Azure nombre de cuenta y autenticación de clave de acceso se almacenen en una credencial de SQL Server. Esta información se usa para autenticarse en la cuenta de Azure cuando realiza operaciones de copia de seguridad o restauración.
La cuenta de usuario que se utiliza para emitir BACKUP o RESTORE comandos debe estar en el rol de base de datos db_backup operator con permisos de Alterar cualquier credencial.
Introducción a los componentes y conceptos clave
En las dos secciones siguientes se presenta el servicio de almacenamiento de blobs de Azure y los componentes de SQL Server que se usan al realizar copias de seguridad o restaurar desde el servicio Azure Blob Storage. Es importante comprender los componentes y la interacción entre ellos para realizar una copia de seguridad o restaurar desde el servicio de almacenamiento de blobs de Azure.
La creación de una cuenta de Azure es el primer paso para este proceso. SQL Server usa el nombre de la cuenta de almacenamiento de Azure y sus valores de clave de acceso para autenticar y escribir y leer blobs en el servicio de almacenamiento. La credencial de SQL Server almacena esta información de autenticación y se usa durante las operaciones de copia de seguridad o restauración. Para ver un tutorial completo sobre cómo crear una cuenta de almacenamiento y realizar una restauración sencilla, consulte Tutorial Using Azure Storage Service for SQL Server Backup and Restore ( Uso del servicio Azure Storage para SQL Server copia de seguridad y restauración).
de
servicio de Azure Blob Storage
Cuenta de almacenamiento: La cuenta de almacenamiento es el punto de partida para todos los servicios de almacenamiento. Para acceder al servicio Azure Blob Storage, cree primero una cuenta de almacenamiento Azure. El nombre de la cuenta de almacenamiento y sus propiedades de clave de acceso son necesarios para autenticarse en el servicio Azure Blob Storage 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 Azure, debe tener al menos el contenedor raíz creado.
Blob: Un archivo de cualquier tipo y tamaño. Hay dos tipos de blobs que se pueden almacenar en el servicio blob storage de Azure: blobs en bloques y en páginas. SQL Server copia de seguridad usa blobs en páginas como tipo de blob. Los blobs son direccionables mediante el siguiente formato de dirección URL: https://< storage account.blob.core.windows.net/>< container>/<blob>
Para obtener más información sobre el servicio Azure Blob storage, consulte Uso del servicio Azure Blob Storage
Para más información sobre los blobs en páginas, consulte la descripción de los blobs en bloques y en páginas
Componentes de SQL Server
URL: Una dirección URL especifica un identificador uniforme de recursos (URI) en un archivo de copia de seguridad único. La dirección URL se usa 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 aquella que apunta a un blob en páginas en una cuenta de almacenamiento de Azure. La dirección URL debe apuntar a un blob real, no solo un contenedor. Si el blob no existe, se crea. Si se especifica un blob existente, BACKUP se produce un error, a menos que se especifique la opción "WITH FORMAT".
Advertencia
Si decide copiar y cargar un archivo de copia de seguridad en el servicio de almacenamiento de blobs de Azure, use el blob en páginas como opción de almacenamiento. No se admiten restauraciones desde blobs en bloques. RESTORE en un tipo de blob en bloques se produce un error.
Este es un valor de dirección URL de ejemplo: http[s]://ACCOUNTNAME.Blob.core.windows.net/< CONTAINER>/<FILENAME.bak>. HTTPS no es necesario, pero se recomienda.
Credential: 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í, SQL Server los procesos de copia de seguridad y restauración usan credenciales para autenticarse en el servicio de almacenamiento de blobs de Azure. La credencial almacena el nombre de la cuenta de almacenamiento y los valores de clave de acceso de la cuenta de almacenamiento. Una vez creada la credencial, debe especificarse en la opción WITH CREDENTIAL al emitir las instrucciones BACKUP/RESTORE . Para obtener más información sobre cómo ver, copiar o regenerar las claves de acceso de la cuenta de almacenamiento, consulte Claves de acceso de la cuenta de almacenamiento.
Para obtener instrucciones paso a paso sobre cómo crear una credencial de SQL Server, consulte Creación de un ejemplo de credencial más adelante en este tema.
Para obtener información general sobre las credenciales, consulte Credenciales.
Para obtener información, en otros ejemplos en los que se usan las credenciales, consulte Creación de un proxy de Agente SQL Server.
Limitations
No se admite la copia de seguridad en Premium Storage.
El tamaño máximo de copia de seguridad admitido es de 1 TB.
Puede emitir instrucciones de copia de seguridad o restauración mediante cmdlets de TSQL, SMO o PowerShell. Actualmente no está habilitada una copia de seguridad en el servicio de almacenamiento de blobs de Azure mediante SQL Server Management Studio asistente para copia de seguridad o restauración.
No se admite la creación de un nombre de dispositivo lógico. Por lo tanto, no se admite la adición de direcciones URL como dispositivo de copia de seguridad mediante sp_dumpdevice o a través de SQL Server Management Studio.
No se admite la anexión 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, lo 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; GONo se admite la especificación de un tamaño de bloque con
BACKUP.No se admite la especificación
MAXTRANSFERSIZE.Especificar las opciones
RETAINDAYSdel conjunto de copias de seguridad: yEXPIREDATEno se admiten.SQL Server tiene un límite máximo de 259 caracteres para un nombre de dispositivo de copia de seguridad. La BACKUP dirección URL to consume 36 caracteres para los elementos necesarios que se usan 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 de copia de seguridad y restauración
| Instrucción Backup/Restore | Soportado | Excepciones | Comentarios |
| BACKUP | ✓ | BLOCKSIZE y MAXTRANSFERSIZE no se admiten. | Requiere WITH CREDENTIAL especificado |
| RESTORE | ✓ | Requiere WITH CREDENTIAL especificado | |
| RESTORE FILELISTONLY | ✓ | Requiere WITH CREDENTIAL especificado | |
| RESTORE HEADERONLY | ✓ | Requiere WITH CREDENTIAL especificado | |
| RESTORE LABELONLY | ✓ | Requiere WITH CREDENTIAL especificado | |
| RESTORE VERIFYONLY | ✓ | Requiere WITH CREDENTIAL especificado | |
| RESTORE REWINDONLY | ✓ |
Para obtener información general y sintaxis sobre las instrucciones de copia de seguridad, vea BACKUP (Transact-SQL).
Para obtener información general y sintaxis sobre instrucciones de restauración, vea RESTORE (Transact-SQL).
Compatibilidad con argumentos de copia de seguridad
| Argumento | Soportado | Exception | Comentarios |
| DATABASE | ✓ | ||
| LOG | ✓ | ||
| TO (URL) | ✓ | A diferencia de DISK y TAPE, la dirección URL no admite especificar ni 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. |
| REFLEJADO EN | ✓ | ||
| CON OPCIONES: | |||
| CREDENTIAL | ✓ | WITH CREDENTIAL solo se admite cuando se usa BACKUP la opción TO URL para realizar una copia de seguridad en el servicio de almacenamiento de blobs de Azure. | |
| DIFERENCIAL | ✓ | ||
| COPY_ONLY | ✓ | ||
| COMPRESSION|NO_COMPRESSION | ✓ | ||
| DESCRIPCIÓN | ✓ | ||
| 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 | FORMATO | ✓ | Esta opción se omite si se usa. Se produce un error en una copia de seguridad realizada en un blob existente a menos que se especifique WITH FORMAT. El blob existente se sobrescribe cuando 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 argumentos de restauración
| Argumento | Soportado | Excepciones | Comentarios |
| DATABASE | ✓ | ||
| LOG | ✓ | ||
| FROM (DIRECCIÓN URL) | ✓ | El argumento FROM URL se usa para especificar la ruta de acceso url del archivo de copia de seguridad. | |
| OPCIONES WITH: | |||
| CREDENTIAL | ✓ | WITH CREDENTIAL solo se admite cuando se usa la RESTORE opción FROM URL para restaurar desde Azure Blob Storage servicio. | |
| PARTIAL | ✓ | ||
| RECOVERY | NORECOVERY | STANDBY | ✓ | ||
| LOADHISTORY | ✓ | ||
| MOVER | ✓ | ||
| REPLACE | ✓ | ||
| RESTART | ✓ | ||
| RESTRICTED_USER | ✓ | ||
| ARCHIVO | ✓ | ||
| CONTRASEÑA | ✓ | ||
| 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 Restore, vea RESTORE Argumentos (Transact-SQL).
Uso de la tarea copia de seguridad en SQL Server Management Studio
La tarea Copia de seguridad de SQL Server Management Studio se ha mejorado para incluir la dirección URL como una de las opciones de destino y otros objetos auxiliares necesarios para realizar copias de seguridad en Azure almacenamiento como la credencial de SQL.
En los pasos siguientes se describen los cambios realizados en la tarea Copia de seguridad de la base de datos para permitir la copia de seguridad en Azure storage.
Inicie SQL Server Management Studio y conéctese a la instancia de SQL Server. Seleccione una base de datos que quiera realizar una copia de seguridad y haga clic con el botón derecho en Tareas y seleccione Copia de seguridad... Se abrirá el cuadro de diálogo Copia de seguridad de base de datos.
En la página general, la opción URL se usa para crear una copia de seguridad para Azure almacenamiento. Al seleccionar esta opción, verá otras opciones habilitadas en esta página:
Nombre de archivo: Nombre del archivo de copia de seguridad.
Credencial de SQL: Puede especificar una credencial de SQL Server existente o crear una nueva haciendo clic en el cuadro Crear junto a la credencial de SQL.
Importante
El cuadro de diálogo que se abre al hacer clic en Crear requiere un certificado de administración o el perfil de publicación de la suscripción. SQL Server admite actualmente la versión 2.0 del perfil de publicación. Para descargar la versión compatible del perfil de publicación, vea Descargar perfil de publicación 2.0.
Si no tiene acceso al certificado de administración o al perfil de publicación, puede crear una credencial de SQL especificando el nombre de la cuenta de almacenamiento y la información de la clave de acceso mediante Transact-SQL o SQL Server Management Studio. Consulte el código de ejemplo de la sección Crear una credencial para crear una credencial mediante Transact-SQL. Como alternativa, con SQL Server Management Studio, desde la instancia del motor de base de datos, haga clic con el botón derecho en Seguridad, seleccione Nuevoy, después, Credencial. Especifique el nombre de cuenta de almacenamiento para Identidad y la clave de acceso en el campo Contraseña .
Azure contenedor de almacenamiento: Nombre del contenedor de almacenamiento de Azure para almacenar los archivos de copia de seguridad.
Prefijo de dirección URL: Esto se crea automáticamente con la información especificada en los campos descritos en los pasos anteriores. Si edita este valor manualmente, asegúrese de que coincide con la otra información que proporcionó anteriormente. Por ejemplo, si modifica la dirección URL de almacenamiento, asegúrese de que la credencial de SQL esté establecida para autenticarse en la misma cuenta de almacenamiento.
Al seleccionar la dirección URL como destino, algunas opciones de la página Opciones multimedia están deshabilitadas. Los temas siguientes tienen más información sobre el cuadro de diálogo Copia de seguridad de base de datos:
Copia de seguridad de base de datos (página General)
Copia de seguridad de la base de datos (página Opciones de medios)
Copia de seguridad de la base de datos (página Opciones de copia de seguridad)
Crear credencial: autenticarse en Azure Storage
SQL Server copia de seguridad en dirección URL mediante el Asistente para planes de mantenimiento
De forma similar a la tarea de copia de seguridad descrita anteriormente, el Asistente para planes de mantenimiento de SQL Server Management Studio se ha mejorado para incluir la dirección URL como una de las opciones de destino y otros objetos auxiliares necesarios para realizar copias de seguridad en Azure almacenamiento como la credencial de SQL. Para obtener más información, vea la sección Definir tareas de copia de seguridad en El Asistente para planes de mantenimiento.
Restauración desde Azure almacenamiento mediante SQL Server Management Studio
Si va a restaurar una base de datos, la dirección URL se incluye como dispositivo desde el que se va a restaurar. En los pasos siguientes se describen los cambios en la tarea Restaurar para permitir la restauración desde Azure almacenamiento:
Al seleccionar Dispositivos en la página General de la tarea Restaurar en SQL Server Management Studio, se le lleva al cuadro de diálogo Seleccionar dispositivos de copia de seguridad que incluye la dirección URL como un tipo de medio de copia de seguridad.
Al seleccionar dirección URL y hacer clic en Agregar, se abre el cuadro de diálogo Conectar a Azure almacenamiento. Especifique la información de credenciales de SQL para autenticarse en Azure almacenamiento.
SQL Server después se conecta a Azure almacenamiento mediante la información de credenciales de SQL que proporcionó y abre el cuadro de diálogo Buscar archivo de copia de seguridad en Azure. Los archivos de copia de seguridad que residen en el almacenamiento se muestran en esta página. Seleccione el archivo que desea usar para restaurar y haga clic en Aceptar. Esto le lleva al cuadro de diálogo Seleccionar dispositivos de copia de seguridad y hacer clic en Aceptar en este cuadro de diálogo le lleva al cuadro de diálogo principal Restaurar donde podrá completar la restauración. Para obtener más información, consulte los temas siguientes:
Restaurar la base de datos (página General)
Ejemplos de código
Esta sección contiene los siguientes ejemplos.
Creación de una copia de seguridad de archivos completa del grupo de archivos principal
Creación de una copia de seguridad diferencial de archivos de los grupos de archivos principales
Crear una credencial
En el ejemplo siguiente se crea una credencial que almacena la información de autenticación Azure Storage.
IF NOT EXISTS
(SELECT * FROM sys.credentials
WHERE credential_identity = 'mycredential')
CREATE CREDENTIAL mycredential WITH IDENTITY = 'mystorageaccount'
,SECRET = '<storage access key>' ;
// Connect to default sql server instance on local machine
Server server = new Server(".");
string identity = "mystorageaccount";
string secret = "<storage access key>";
// Create a Credential
string credentialName = "mycredential";
Credential credential = new Credential(server, credentialName);
credential.Create(identity, secret);
# create variables
$storageAccount = "mystorageaccount"
$storageKey = "<storage access key>"
$secureString = ConvertTo-SecureString $storageKey -asplaintext -force
$credentialName = "mycredential"
$srvPath = "SQLSERVER:\SQL\COMPUTERNAME\INSTANCENAME"
# for default instance, the $srvpath variable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"
# Create a credential
New-SqlCredential -Name $credentialName -Path $srvpath -Identity $storageAccount -Secret $secureString
Copia de seguridad de una base de datos completa
En el ejemplo siguiente se realiza una copia de seguridad de la base de datos AdventureWorks2012 en el servicio Azure Blob Storage.
BACKUP DATABASE AdventureWorks2012
TO URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012.bak'
WITH CREDENTIAL = 'mycredential'
,COMPRESSION
,STATS = 5;
GO
// Connect to default sql server instance on local machine
Server server = new Server(".");
string identity = "mystorageaccount";
string credentialName = "mycredential";
string dbName = "AdventureWorks2012";
string blobContainerName = "mycontainer";
// Generate Unique Url
string url = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-{3}.bak",
identity,
blobContainerName,
dbName,
DateTime.Now.ToString("s").Replace(":", "-"));
// Backup to Url
Backup backup = new Backup();
backup.CredentialName = credentialName;
backup.Database = dbName;
backup.CompressionOption = BackupCompressionOptions.On;
backup.Devices.AddDevice(url, DeviceType.Url);
backup.SqlBackup(server);
# create variables
$backupUrlContainer = "https://mystorageaccount.blob.core.windows.net/mycontainer/"
$credentialName = "mycredential"
$srvPath = "SQLSERVER:\SQL\COMPUTERNAME\INSTANCENAME"
# for default instance, the $srvpath varilable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"
# navigate to SQL Server Instance
CD $srvPath
$backupFile = $backupUrlContainer + "AdventureWorks2012" + ".bak"
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile -SqlCredential $credentialName -CompressionOption On
Copia de seguridad de la base de datos y el registro
En el ejemplo siguiente se realiza una copia de seguridad de la base de datos de ejemplo AdventureWorks2012, que usa el modelo de recuperación simple de forma predeterminada. Para admitir copias de seguridad de registros, se modifica la base de datos AdventureWorks2012 para usar el modelo de recuperación completa. A continuación, el ejemplo crea una copia de seguridad completa de la base de datos en Azure Blob y, después de un período de actividad de actualización, realiza 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.
-- To permit log backups, before the full database backup, modify the database
-- to use the full recovery model.
USE master;
GO
ALTER DATABASE AdventureWorks2012
SET RECOVERY FULL;
GO
-- Back up the full AdventureWorks2012 database.
-- First create a file name for the backup file with DateTime stamp
DECLARE @Full_Filename AS VARCHAR (300);
SET @Full_Filename = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012_Full_'+
REPLACE (REPLACE (REPLACE (CONVERT (VARCHAR (40), GETDATE (), 120), '-','_'),':', '_'),' ', '_') + '.bak';
--Back up Adventureworks2012 database
BACKUP DATABASE AdventureWorks2012
TO URL = @Full_Filename
WITH CREDENTIAL = 'mycredential';
,COMPRESSION
GO
-- Back up the AdventureWorks2012 log.
DECLARE @Log_Filename AS VARCHAR (300);
SET @Log_Filename = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012_Log_'+
REPLACE (REPLACE (REPLACE (CONVERT (VARCHAR (40), GETDATE (), 120), '-','_'),':', '_'),' ', '_') + '.trn';
BACKUP LOG AdventureWorks2012
TO URL = @Log_Filename
WITH CREDENTIAL = 'mycredential'
,COMPRESSION;
GO
// Connect to default sql server instance on local machine
Server server = new Server(".");
string identity = "mystorageaccount";
string credentialName = "mycredential";
string dbName = "AdventureWorks2012";
string blobContainerName = "mycontainer";
// Generate Unique Url for data backup
string urlDataBackup = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}_Data-{3}.bak",
identity,
blobContainerName,
dbName,
DateTime.Now.ToString("s").Replace(":", "-"));
// Backup Database to Url
Backup backupData = new Backup();
backupData.CredentialName = credentialName;
backupData.Database = dbName;
backup.CompressionOption = BackupCompressionOptions.On;
backupData.Devices.AddDevice(urlDataBackup, DeviceType.Url);
backupData.SqlBackup(server);
// Generate Unique Url for data backup
string urlLogBackup = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}_Log-{3}.bak",
identity,
blobContainerName,
dbName,
DateTime.Now.ToString("s").Replace(":", "-"));
// Backup Database Log to Url
Backup backupLog = new Backup();
backupLog.CredentialName = credentialName;
backupLog.Database = dbName;
backup.CompressionOption = BackupCompressionOptions.On;
backupLog.Devices.AddDevice(urlLogBackup, DeviceType.Url);
backupLog.Action = BackupActionType.Log;
backupLog.SqlBackup(server);
#create variables
$backupUrlContainer = "https://mystorageaccount.blob.core.windows.net/mycontainer/"
$credentialName = "mycredential"
$srvPath = "SQLSERVER:\SQL\COMPUTERNAME\INSTANCENAME"
# for default instance, the $srvpath variable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"
# navigate to theSQL Server Instance
CD $srvPath
#Create a unique file name for the full database backup
$backupFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") + ".bak"
#Backup Database to URL
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile -SqlCredential $credentialName -CompressionOption On -BackupAction Database
#Create a unique file name for log backup
$backupFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") + ".trn"
#Backup Log to URL
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile -SqlCredential $credentialName -CompressionOption On -BackupAction Log
Creación de 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.
--Back up the files in Primary:
BACKUP DATABASE AdventureWorks2012
FILEGROUP = 'Primary'
TO URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012files.bck'
WITH CREDENTIAL = 'mycredential'
,COMPRESSION;
GO
// Connect to default sql server instance on local machine
Server server = new Server(".");
string identity = "mystorageaccount";
string credentialName = "mycredential";
string dbName = "AdventureWorks2012";
string blobContainerName = "mycontainer";
// Generate Unique Url
string url = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-{3}.bck",
identity,
blobContainerName,
dbName,
DateTime.Now.ToString("s").Replace(":", "-"));
// Backup to Url
Backup backup = new Backup();
backup.CredentialName = credentialName;
backup.Database = dbName;
backup.Action = BackupActionType.Files;
backup.DatabaseFileGroups.Add("PRIMARY");
backup.CompressionOption = BackupCompressionOptions.On;
backup.Devices.AddDevice(url, DeviceType.Url);
backup.SqlBackup(server);
#create variables
$backupUrlContainer = "https://mystorageaccount.blob.core.windows.net/mycontainer/"
$credentialName = "mycredential"
$srvPath = "SQLSERVER:\SQL\COMPUTERNAME\INSTANCENAME"
# for default instance, the $srvpath variable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"
# navigate to the SQL Server Instance
CD $srvPath
#Create a unique file name for the file backup
$backupFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") + ".bck"
#Backup Primary File Group to URL
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile -SqlCredential $credentialName -CompressionOption On -BackupAction Files -DatabaseFileGroup Primary
Creación de una copia de seguridad diferencial de archivos del grupo de archivos principal
En el ejemplo siguiente se crea una copia de seguridad diferencial de archivos del grupo de archivos principal.
--Back up the files in Primary:
BACKUP DATABASE AdventureWorks2012
FILEGROUP = 'Primary'
TO URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012filesdiff.bck'
WITH
CREDENTIAL = 'mycredential'
,COMPRESSION
,DIFFERENTIAL;
GO
// Connect to default sql server instance on local machine
Server server = new Server(".");
string identity = "mystorageaccount";
string credentialName = "mycredential";
string dbName = "AdventureWorks2012";
string blobContainerName = "mycontainer";
// Generate Unique Url
string url = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-{3}.bak",
identity,
blobContainerName,
dbName,
DateTime.Now.ToString("s").Replace(":", "-"));
// Backup to Url
Backup backup = new Backup();
backup.CredentialName = credentialName;
backup.Database = dbName;
backup.Action = BackupActionType.Files;
backup.DatabaseFileGroups.Add("PRIMARY");
backup.Incremental = true;
backup.CompressionOption = BackupCompressionOptions.On;
backup.Devices.AddDevice(url, DeviceType.Url);
backup.SqlBackup(server);
#create variables
$backupUrlContainer = "https://mystorageaccount.blob.core.windows.net/mycontainer/"
$credentialName = "mycredential"
$srvPath = "SQLSERVER:\SQL\COMUTERNAME\INSTANCENAME"
# for default instance, the $srvpath variable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"
# navigate to SQL Server Instance
CD $srvPath
#create a unique file name for the full backup
$backupdbFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") + ".bak"
#Create a differential backup of the primary filegroup
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile -SqlCredential $credentialName -CompressionOption On -BackupAction Files -DatabaseFileGroup Primary -Incremental
Restaurar una base de datos y mover archivos
Para restaurar una copia de seguridad completa de la base de datos y mover la base de datos restaurada a C:\Archivos de programa\Microsoft SQL Server\MSSQL12. Directorio MSSQLSERVER\MSSQL\Data, siga estos pasos.
-- Backup the tail of the log first
DECLARE @Log_Filename AS VARCHAR (300);
SET @Log_Filename = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012_Log_'+
REPLACE (REPLACE (REPLACE (CONVERT (VARCHAR (40), GETDATE (), 120), '-','_'),':', '_'),' ', '_') + '.trn';
BACKUP LOG AdventureWorks2012
TO URL = @Log_Filename
WITH CREDENTIAL = 'mycredential'
,NORECOVERY;
GO
RESTORE DATABASE AdventureWorks2012 FROM URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012.bak'
WITH CREDENTIAL = 'mycredential'
,MOVE 'AdventureWorks2012_data' to 'C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.mdf'
,MOVE 'AdventureWorks2012_log' to 'C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.ldf'
,STATS = 5
// Connect to default sql server instance on local machine
Server server = new Server(".");
string identity = "mystorageaccount";
string credentialName = "mycredential";
string dbName = "AdventureWorks2012";
string blobContainerName = "mycontainer";
// Generate Unique Url
string urlBackupData = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-Data{3}.bak",
identity,
blobContainerName,
dbName,
DateTime.Now.ToString("s").Replace(":", "-"));
// Backup to Url
Backup backup = new Backup();
backup.CredentialName = credentialName;
backup.Database = dbName;
backup.Devices.AddDevice(urlBackupData, DeviceType.Url);
backup.SqlBackup(server);
// Generate Unique Url for tail log backup
string urlTailLogBackup = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-TailLog{3}.bak",
identity,
blobContainerName,
dbName,
DateTime.Now.ToString("s").Replace(":", "-"));
// Backup Tail Log to Url
Backup backupTailLog = new Backup();
backupTailLog.CredentialName = credentialName;
backupTailLog.Database = dbName;
backupTailLog.Action = BackupActionType.Log;
backupTailLog.NoRecovery = true;
backupTailLog.Devices.AddDevice(urlTailLogBackup, DeviceType.Url);
backupTailLog.SqlBackup(server);
// Restore a database and move files
string newDataFilePath = server.MasterDBLogPath + @"\" + dbName + DateTime.Now.ToString("s").Replace(":", "-") + ".mdf";
string newLogFilePath = server.MasterDBLogPath + @"\" + dbName + DateTime.Now.ToString("s").Replace(":", "-") + ".ldf";
Restore restore = new Restore();
restore.CredentialName = credentialName;
restore.Database = dbName;
restore.ReplaceDatabase = true;
restore.Devices.AddDevice(urlBackupData, DeviceType.Url);
restore.RelocateFiles.Add(new RelocateFile(dbName, newDataFilePath));
restore.RelocateFiles.Add(new RelocateFile(dbName+ "_Log", newLogFilePath));
restore.SqlRestore(server);
#create variables
$backupUrlContainer = "https://mystorageaccount.blob.core.windows.net/mycontainer/"
$credentialName = "mycredential"
$srvPath = "SQLSERVER:\SQL\COMPUTERNAME\INSTNACENAME"
# for default instance, the $srvpath variable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"
# navigate to SQL Server Instance
CD $srvPath
#create a unique file name for the full backup
$backupdbFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") + ".bak"
# Full database backup to URL
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupdbFile -SqlCredential $credentialName -CompressionOption On
#Create a unique file name for the tail log backup
$backuplogFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") + ".trn"
#Backup tail log to URL
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile -SqlCredential $credentialName -BackupAction Log -NoRecovery
# Restore Database and move files
$newDataFilePath = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile ("AdventureWorks_Data","C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.mdf")
$newLogFilePath = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("AdventureWorks_Log","C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.ldf")
Restore-SqlDatabase -Database AdventureWorks2012 -SqlCredential $credentialName -BackupFile $backupdbFile -RelocateFile @($newDataFilePath,$newLogFilePath)
Restaurar a un momento dado mediante STOPAT
En el ejemplo siguiente se restaura una base de datos a su estado a un momento dado y se muestra una operación de restauración.
RESTORE DATABASE AdventureWorks FROM URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012.bak'
WITH
CREDENTIAL = 'mycredential'
,MOVE 'AdventureWorks2012_data' to 'C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.mdf'
,Move 'AdventureWorks2012_log' to 'C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.ldf'
,NORECOVERY
--,REPLACE
,STATS = 5;
GO
RESTORE LOG AdventureWorks FROM URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012.trn'
WITH CREDENTIAL = 'mycredential'
,RECOVERY
,STOPAT = 'Oct 23, 2012 5:00 PM'
GO
// Connect to default sql server instance on local machine
Server server = new Server(".");
string identity = "mystorageaccount";
string credentialName = "mycredential";
string dbName = "AdventureWorks2012";
string blobContainerName = "mycontainer";
// Generate Unique Url
string urlBackupData = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-Data{3}.bak",
identity,
blobContainerName,
dbName,
DateTime.Now.ToString("s").Replace(":", "-"));
// Backup to Url
Backup backup = new Backup();
backup.CredentialName = credentialName;
backup.Database = dbName;
backup.Devices.AddDevice(urlBackupData, DeviceType.Url);
backup.SqlBackup(server);
// Generate Unique Url for Tail Log backup
string urlTailLogBackup = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-TailLog{3}.bak",
identity,
blobContainerName,
dbName,
DateTime.Now.ToString("s").Replace(":", "-"));
// Backup Tail Log to Url
Backup backupTailLog = new Backup();
backupTailLog.CredentialName = credentialName;
backupTailLog.Database = dbName;
backupTailLog.Action = BackupActionType.Log;
backupTailLog.NoRecovery = true;
backupTailLog.Devices.AddDevice(urlTailLogBackup, DeviceType.Url);
backupTailLog.SqlBackup(server);
// Restore a database and move files
string newDataFilePath = server.MasterDBLogPath + @"\" + dbName + DateTime.Now.ToString("s").Replace(":", "-") + ".mdf";
string newLogFilePath = server.MasterDBLogPath + @"\" + dbName + DateTime.Now.ToString("s").Replace(":", "-") + ".ldf";
Restore restore = new Restore();
restore.CredentialName = credentialName;
restore.Database = dbName;
restore.ReplaceDatabase = true;
restore.NoRecovery = true;
restore.Devices.AddDevice(urlBackupData, DeviceType.Url);
restore.RelocateFiles.Add(new RelocateFile(dbName, newDataFilePath));
restore.RelocateFiles.Add(new RelocateFile(dbName + "_Log", newLogFilePath));
restore.SqlRestore(server);
// Restore transaction Log with stop at
Restore restoreLog = new Restore();
restoreLog.CredentialName = credentialName;
restoreLog.Database = dbName;
restoreLog.Action = RestoreActionType.Log;
restoreLog.Devices.AddDevice(urlBackupData, DeviceType.Url);
restoreLog.ToPointInTime = DateTime.Now.ToString();
restoreLog.SqlRestore(server);
#create variables
$backupUrlContainer = "https://mystorageaccount.blob.core.windows.net/mycontainer/"
$credentialName = "mycredential"
$srvPath = "SQLSERVER:\SQL\COMPUTERNAME\INSTANCENAME"
# for default instance, the $srvpath variable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"
# Navigate to SQL Server Instance Directory
CD $srvPath
#create a unique file name for the full backup
$backupdbFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") + ".bak"
# Full database backup to URL
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupdbFile -SqlCredential $credentialName -CompressionOption On
#Create a unique file name for the tail log backup
$backuplogFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") + ".trn"
#Backup tail log to URL
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile -SqlCredential $credentialName -BackupAction Log -NoRecovery
# Restore Database and move files
$newDataFilePath = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile ("AdventureWorks_Data","C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.mdf")
$newLogFilePath = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("AdventureWorks_Log","C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.ldf")
Restore-SqlDatabase -Database AdventureWorks2012 -SqlCredential $credentialName -BackupFile $backupdbFile -RelocateFile @($newDataFilePath,$newLogFilePath) -NoRecovery
# Restore Transaction log with Stop At:
Restore-SqlDatabase -Database AdventureWorks2012 -SqlCredential $credentialName -BackupFile $backuplogFile -ToPointInTime (Get-Date).ToString()
Véase también
Prácticas recomendadas y resolución de problemas de copias de seguridad al URL de SQL Server
Realizar copias de seguridad y restaurar bases de datos del sistema (SQL Server)