Резервное копирование в SQL Server по URL-адресу
В этом разделе представлены основные понятия, требования и компоненты, необходимые для использования службы хранилища BLOB-объектов Azure в качестве места назначения резервного копирования. Функции резервного копирования и восстановления аналогичны при использовании DISK и TAPE, но имеют некоторые отличия. В данном разделе описаны различия и все важные исключения, а также приведено несколько примеров кода.
Требования, компоненты и основные понятия
В этом разделе:
Поддержка инструкций резервного копирования и восстановления
Использование задачи резервного копирования в среде SQL Server Management Studio
Резервное копирование SQL Server на URL-адрес с помощью мастера планов обслуживания
Восстановление из хранилища Azure с помощью SQL Server Management Studio
Безопасность
Ниже приведены рекомендации по обеспечению безопасности и требования при резервном копировании или восстановлении из служб хранилища BLOB-объектов Azure.
При создании контейнера для службы хранилища BLOB-объектов Azure рекомендуется установить частный доступ. Установка закрытых прав доступа означает, что доступ получают только те пользователи и учетные записи, которые могут предоставить необходимую информацию для проверки подлинности в учетной записи Azure.
Важно!
SQL Server требуется, чтобы имя учетной записи Azure и проверка подлинности с помощью ключа доступа хранились в учетных данных SQL Server. Эти сведения используются для проверки подлинности в учетной записи Azure при выполнении операций резервного копирования или восстановления.
Учетная запись пользователя, применяемая для выдачи команды BACKUP или RESTORE, должна находиться в роли базы данных db_backup operator с разрешениями Alter any credential .
Введение в основные компоненты и понятия
В следующих двух разделах описана служба хранилища BLOB-объектов Azure и компоненты SQL Server, используемые при резервном копировании или восстановлении из службы хранилища BLOB-объектов Azure. Важно понимать компоненты и взаимодействие между ними для резервного копирования или восстановления из службы хранилища BLOB-объектов Azure.
Создание учетной записи Azure — это первый шаг к этому процессу. SQL Server использует имя учетной записи хранения Azure и значения ключа доступа для проверки подлинности, записи и чтения BLOB-объектов в службе хранилища. Учетные данные службы SQL Server хранят эту информацию для проверки подлинности и используются при выполнении операций резервного копирования или восстановления. Полное пошаговое руководство по созданию учетной записи хранения и выполнению простого восстановления см. в статье Руководство по использованию службы хранилища Azure для SQL Server резервного копирования и восстановления.
Служба Хранилище BLOB-объектов Azure
Учетная запись хранения. Учетная запись хранения является отправной точкой для всех служб хранилища. Чтобы получить доступ к службе Хранилище BLOB-объектов Azure, сначала создайте учетную запись хранения Azure. Имя учетной записи хранения и ее свойства ключа доступа необходимы для проверки подлинности в службе Хранилище BLOB-объектов Azure и ее компонентах.
Контейнер: Контейнер обеспечивает группирование набора BLOB-объектов и может хранить неограниченное количество BLOB-объектов. Чтобы записать резервную копию SQL Server в службу BLOB-объектов Azure, необходимо создать по крайней мере корневой контейнер.
Большой двоичный объект. Файл любого типа и размера. Существует два типа BLOB-объектов, которые можно хранить в службе хранилища BLOB-объектов Azure: блочные и страничные BLOB-объекты. SQL Server резервном копировании в качестве типа BLOB-объекта используются страничные BLOB-объекты. Большие двоичные объекты можно адресовать в следующем формате URL-адреса: https://< storage account.blob.core.windows.net/>< container>/<blob>
Дополнительные сведения о службе хранилища BLOB-объектов Azure см. в статье Использование службы Хранилище BLOB-объектов Azure.
Дополнительные сведения о страничных BLOB-объектах см. в статье Understanding Block and Page Blobs (Основные сведения о блочных, добавочных и страничных BLOB-объектах).
Компоненты SQL Server
URL-адрес. URL-адрес определяет универсальный идентификатор ресурса (URI) для уникального файла резервной копии. URL-адрес используется для предоставления местоположения и имени файла резервной копии SQL Server . В этой реализации единственным допустимым URL-адресом является url-адрес, указывающий на страничный BLOB-объект в учетной записи хранения Azure. URL-адрес должен указывать на фактический большой двоичный объект, а не просто контейнер. Если большой двоичный объект не существует, он будет создан. Если указан существующий BLOB-объект, резервное копирование завершается ошибкой, если не указан параметр WITH FORMAT.
Предупреждение
Если вы решили скопировать и отправить файл резервной копии в службу хранилища BLOB-объектов Azure, используйте страничный BLOB-объект в качестве хранилища. Восстановление из блочных больших двоичных объектов не поддерживается. Попытка выполнить RESTORE из большого двоичного объекта блочного типа приводит к ошибке.
Ниже приведен пример значения URL-адреса: http[s]://ACCOUNTNAME.Blob.core.windows.net/< CONTAINER>/<FILENAME.bak>. Указывать HTTPS необязательно, но рекомендуется.
Учетные данные. Учетные данные SQL Server являются объектом, который используется для хранения информации о проверке подлинности, которая необходима для подключения к источнику за пределами SQL Server. Здесь SQL Server процессах резервного копирования и восстановления используют учетные данные для проверки подлинности в службе хранилища BLOB-объектов Azure. Учетные данные хранят имя учетной записи хранилища и значения ключа доступа учетной записи хранилища. После создания учетных данных их необходимо указать в параметре WITH CREDENTIAL при выполнении инструкций BACKUP/RESTORE. Дополнительную информацию о просмотре, копировании или повторном создании учетной записи хранилища access keysсм. в разделе Ключи доступа к учетной записи.
Пошаговые инструкции по созданию учетных данных SQL Server см. в разделе Пример создания учетных данных далее в этой статье.
Общие сведения об учетных данных см. в разделе Учетные данные.
Дополнительные сведения о других примерах использования учетных данных см. в статье Создание прокси-сервера агент SQL Server.
Ограничения
Резервное копирование в хранилище класса Premium не поддерживается.
Максимальный поддерживаемый размер резервной копии — 1 ТБ.
Инструкции резервного копирования и восстановления можно выполнить с помощью TSQL, SMO и командлетов PowerShell. Резервное копирование или восстановление из службы хранилища BLOB-объектов Azure с помощью SQL Server Management Studio мастера резервного копирования или восстановления в настоящее время не включено.
Функция создания логического имени устройства не поддерживается. Таким образом, не поддерживается функция добавления URL-адреса в качестве устройства резервного копирования с помощью sp_dumpdevice или SQL Server Management Studio.
Функция присоединения к существующим резервным большим двоичным объектам не поддерживается. Создать резервную копию в существующем большом двоичном объекте можно только путем перезаписи с помощью параметра WITH FORMAT.
Функция создания резервных копий в нескольких больших двоичных объектах в одной операции резервного копирования не поддерживается. К примеру, следующие действия приводят к ошибке.
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
Функция указания размера блока с помощью
BACKUP
не поддерживается.Функция указания
MAXTRANSFERSIZE
не поддерживается.Указание набора параметров резервного набора данных
RETAINDAYS
иEXPIREDATE
не поддерживается.SQL Server — 259 символов. Функция BACKUP TO URL использует 36 символов для необходимых элементов, которые нужны для указания URL (https://.blob.core.windows.net//.bak ), оставляя 223 символа для имен учетной записи, контейнера и большого двоичного объекта.
Поддержка инструкций резервного копирования и восстановления
Инструкции BACKUP и RESTORE | Поддерживается | Исключения | Комментарии |
BACKUP | ✓ | BLOCKSIZE и MAXTRANSFERSIZE не поддерживаются. | Необходимо использовать инструкцию WITH CREDENTIAL |
RESTORE | ✓ | Необходимо использовать инструкцию WITH CREDENTIAL | |
RESTORE FILELISTONLY | ✓ | Необходимо использовать инструкцию WITH CREDENTIAL | |
инструкция RESTORE HEADERONLY | ✓ | Необходимо использовать инструкцию WITH CREDENTIAL | |
RESTORE LABELONLY | ✓ | Необходимо использовать инструкцию WITH CREDENTIAL | |
RESTORE VERIFYONLY | ✓ | Необходимо использовать инструкцию WITH CREDENTIAL | |
RESTORE REWINDONLY | ✓ |
Общую информацию и синтаксис инструкций резервного копирования см. в разделе BACKUP (Transact-SQL).
Общую информацию и синтаксис инструкций восстановления см. в разделе RESTORE (Transact-SQL).
Поддержка аргументов резервного копирования
Аргумент | Поддерживается | Исключение | Комментарии |
DATABASE | ✓ | ||
LOG | ✓ | ||
TO (URL) | ✓ | В отличие от DISK и TAPE URL-адрес не поддерживает функцию указания или создания логического имени. | Этот аргумент используется, чтобы указать URL-адрес для файла резервной копии. |
MIRROR TO | ✓ | ||
WITH OPTIONS: | |||
CREDENTIAL | ✓ | ПАРАМЕТР WITH CREDENTIAL поддерживается только при использовании параметра BACKUP TO URL для резервного копирования в службу хранилища BLOB-объектов Azure. | |
DIFFERENTIAL (разностная) | ✓ | ||
COPY_ONLY | ✓ | ||
COMPRESSION|NO_COMPRESSION | ✓ | ||
DESCRIPTION | ✓ | ||
ИМЯ | ✓ | ||
EXPIREDATE | RETAINDAYS | ✓ | ||
NOINIT | INIT | ✓ | Даже если этот параметр указан, он пропускается. Добавление к большим двоичным объектам невозможно. Для перезаписи резервной копии используйте аргумент FORMAT. |
|
NOSKIP | SKIP | ✓ | ||
NOFORMAT | FORMAT | ✓ | Даже если этот параметр указан, он пропускается. Создание резервных копий в существующем большом двоичном объекте завершается ошибкой, если не указан аргумент WITH FORMAT. Если аргумент 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 | ✓ |
Дополнительные сведения об аргументах резервного копирования см. в разделе BACKUP (Transact-SQL).
Поддержка аргументов восстановления
Аргумент | Поддерживается | Исключения | Комментарии |
DATABASE | ✓ | ||
LOG | ✓ | ||
FROM (URL) | ✓ | Аргумент FROM URL используется, чтобы указать URL-адрес для файла резервной копии. | |
WITH Options: | |||
CREDENTIAL | ✓ | ПАРАМЕТР WITH CREDENTIAL поддерживается только при использовании параметра RESTORE FROM URL для восстановления из Хранилище BLOB-объектов 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 | ✓ |
Дополнительные сведения об аргументах восстановления см. в разделе Аргументы RESTORE (Transact-SQL).
Использование задачи резервного копирования в среде SQL Server Management Studio
Задача резервного копирования в SQL Server Management Studio была расширена, чтобы включить URL-адрес в качестве одного из вариантов назначения и другие вспомогательные объекты, необходимые для резервного копирования в хранилище Azure, например учетные данные SQL.
Ниже описаны изменения, внесенные в задачу резервного копирования базы данных, чтобы обеспечить резервное копирование в службу хранилища Azure.
Запустите среду SQL Server Management Studio и подключитесь к экземпляру SQL Server. Выберите базу данных, для которой требуется создать резервную копию, щелкните правой кнопкой мыши Задачи и выберите Создать резервную копию... Откроется диалоговое окно Резервное копирование базы данных.
На странице "Общие" параметр URL-адреса используется для создания резервной копии в хранилище Azure. Если выбран этот параметр, на странице будут показаны другие параметры.
Имя файла. Имя файла резервной копии.
Учетные данные SQL: Вы можете указать существующие учетные данные SQL Server или создать новый, щелкнув Создать рядом с полем Учетные данные SQL.
Важно!
В диалоговом окне, которое открывается при нажатии кнопки Создать , необходимо ввести сертификат управления или профиль публикации подписки. SQL Server в настоящий момент поддерживает версию 2.0 профиля публикации. Для загрузки поддерживаемой версии профиля публикации см. раздел Загрузка профиля публикации 2.0.
Если у вас нет доступа к сертификату управления или профилю публикации, можно создать учетные данные SQL, указав имя учетной записи хранилища и сведения ключа доступа при помощи Transact-SQL или SQL Server Management Studio. Образец кода для создания учетных данных с помощью Transact-SQL см. в разделе Создание учетных данных . Также можно в среде SQL Server Management Studio, из экземпляра компонента database engine, щелкнуть правой кнопкой мыши Безопасностьи выбрать пункт Создать, а затем Учетные данные. Укажите имя учетной записи хранения в поле Идентификатор и ключ доступа в поле Пароль .
Контейнер службы хранилища Azure: Имя контейнера службы хранилища Azure для хранения файлов резервных копий.
Префикс URL-адреса. Создается автоматически на основе сведений, указанных в полях, описанных на предыдущих шагах. При изменении этого значения вручную убедитесь в том, что оно соответствует прочим данным, указанным ранее. Например, при изменении URL-адреса хранения убедитесь, что учетные данные SQL заданы для проверки подлинности в той же самой учетной записи хранения.
При выборе URL-адреса в качестве назначения некоторые параметры на странице Параметры носителя отключаются. Следующие разделы содержат дополнительные сведения о диалоговом окне «Резервное копирование базы данных»:
Резервное копирование базы данных (страница «Общие»)
Резервное копирование базы данных (страница «Параметры носителя»)
Резервное копирование базы данных (страница «Параметры резервного копирования»)
Создание учетных данных — проверка подлинности в хранилище Azure
Резервное копирование SQL Server на URL-адрес с помощью мастера планов обслуживания
Как и в описанной выше задаче резервного копирования, мастер планов обслуживания в SQL Server Management Studio был расширен, чтобы включить URL-адрес в качестве одного из вариантов назначения и другие вспомогательные объекты, необходимые для резервного копирования в хранилище Azure, такие как учетные данные SQL. Дополнительные сведения см. в разделе Определение задач резервного копирования мастера использования планов обслуживания.
Восстановление из хранилища Azure с помощью SQL Server Management Studio
При восстановлении базы данных URL-адрес включается в качестве устройства для восстановления с него. Ниже описаны изменения в задаче "Восстановление", чтобы разрешить восстановление из службы хранилища Azure.
При выборе пункта Устройства на странице Общие задачи восстановления в SQL Server Management Studio открывается диалоговое окно Выберите устройства резервного копирования , где в качестве типа носителя резервной копии можно выбрать URL-адрес .
Если выбрать вариант URL-адрес и нажать Добавить, откроется диалоговое окно Подключение к хранилищу Azure . Укажите учетные данные SQL для проверки подлинности в службе хранилища Azure.
SQL Server затем подключается к хранилищу Azure с помощью предоставленных учетных данных SQL и открывает диалоговое окно Поиск файла резервной копии в Azure. Файлы резервной копии, находящиеся в хранилище, отобразятся на этой странице. Выберите файл, который требуется использовать для восстановления, и нажмите кнопку ОК. Откроется диалоговое окно Выбор устройств резервного копирования. При нажатии кнопки ОК в этом диалоговом окне вы вернеесь в диалоговое окно восстановления main, где вы сможете завершить восстановление. Дополнительные сведения см. в разделах:
Восстановление базы данных (страница "Общие")
Примеры кода
В этом разделе содержатся следующие примеры.
Создание разностной резервной копии файлов первичных файловых групп
Восстановление состояния на определенный момент времени с помощью STOPAT
Создание учетных данных
В следующем примере создаются учетные данные, в котором хранятся сведения о проверке подлинности службы хранилища Azure.
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
Создание резервной копии всей базы данных
В следующем примере выполняется резервное копирование базы данных AdventureWorks2012 в службу хранилища BLOB-объектов Azure.
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
Создание резервной копии базы данных и журнала
В следующем примере используется образец базы данных AdventureWorks2012, которая по умолчанию использует простую модель восстановления. Для поддержки резервного копирования журналов база данных AdventureWorks2012 перенастраивается на использование модели полного восстановления. Затем в примере создается полная резервная копия базы данных в BLOB-объекте Azure, а по истечении периода обновления создается резервная копия журнала. В этом примере будет создано имя резервной копии файла с меткой времени.
-- 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
Создание полной резервной копии первичной файловой группы
В следующем примере создается полная резервная копия файлов первичной файловой группы.
--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
Создание разностной резервной копии файлов первичной файловой группы
В следующем примере создается разностная резервная копия файлов первичной файловой группы.
--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
Восстановление базы данных и перемещение файлов
Чтобы восстановить полную резервную копию базы данных и переместить восстановленную базу данных в папку C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Data, выполните следующие действия.
-- 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)
Восстановление состояния на определенный момент времени с помощью STOPAT
В следующем примере производится восстановление базы данных к состоянию на определенный момент времени и демонстрируется операция восстановления.
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()
См. также
Резервное копирование SQL Server на URL-адрес — рекомендации и устранение неполадок.
Резервное копирование и восстановление системных баз данных (SQL Server)