Резервное копирование и восстановление SQL Server с помощью службы хранилищ больших двоичных объектов Windows Azure
В данном разделе приведены основные сведения, замечания и примеры кода, имеющие решающее значение для настройки и написания скриптов резервного копирования SQL Server и последующего восстановления из службы хранилища больших двоичных объектов Windows Azure. В разделе также описаны основные преимущества использования службы хранилища больших двоичных объектов Windows Azure для создания SQL Server резервных копий.
Эта функция, появившаяся в пакете обновления SQL Server 2012 1 (SP1) CU2, позволяет SQL Server выполнять резервное копирование и восстановление непосредственно через службу хранилища больших двоичных объектов Windows Azure. Эту функцию можно использовать для резервного копирования SQL Server локального экземпляра базы данных или экземпляра SQL Server, размещенного где-либо, например на виртуальной машине Windows Azure. Резервное копирование в облако дает такие преимущества, как доступность, безлимитное геореплицированное удаленное хранение и простота миграции данных в облако и обратно. В этой версии можно выполнять инструкции BACKUP и RESTORE с помощью tsql или SMO. В этой версии функции резервного копирования и восстановления через службу хранилища больших двоичных объектов Windows Azure с помощью SQL Server мастера архивации или восстановления Management Studio недоступны.
В SQL Server 2012 с пакетом обновления 1 (SP1) и накопительным обновлением (CU) 4 поддерживается резервное копирование и восстановление в службе хранилища больших двоичных объектов Windows Azure с использованием PowerShell. Для запроса этого обновления см. данную статью базы знаний. В этом разделе включены скрипты PowerShell в подразделе с примерами. Примеры скриптов PowerShell для управления несколькими операциями резервного копирования см. в разделе Use PowerShell to Backup Multiple Databases to Windows Azure Blob Storage Service.
Преимущества использования службы хранилища больших двоичных объектов Windows Azure для SQL Server резервного копирования
Гибкое, надежное и безлимитное удаленное хранилище: Хранение резервных копий с помощью службы хранилища больших двоичных объектов Windows Azure является удобным и гибким, а также позволяет реализовать доступ к данным из-за пределов вычислительной системы. Для создания удаленного хранилища для резервных копий SQL Server достаточно внести изменения в существующие скрипты и задания. Удаленное хранилище обычно должно быть расположено достаточно далеко от рабочей базы данных, чтобы одна авария не могла повлиять одновременно и на удаленную копию, и на рабочую базу данных. Георепликация хранилища больших двоичных объектов обеспечивает дополнительный уровень защиты в случае аварии регионального масштаба. Кроме того, резервные копии доступны в любом месте и в любое время, а также к ним легко получить доступ для восстановления.
Архив резервных копий: Служба хранилища больших двоичных объектов Windows Azure — это лучшая альтернатива часто применяемому созданию архива резервных копий на магнитной ленте. Может потребоваться физически транспортировать накопители на магнитной ленте в удаленное помещение и принимать меры для защиты носителей. Хранение резервных копий в хранилище больших двоичных объектов Windows Azure обеспечивает быстрое, доступное и надежное архивирование.
Нет необходимости поддерживать аппаратуру: службы Windows Azure не требуют поддержки оборудования. Службы Windows Azure сами управляют аппаратным обеспечением и обеспечивают георепликацию для избыточности и защиты от сбоев оборудования.
В настоящее время для экземпляров SQL Server, запущенных в виртуальной машине Windows Azure, создание резервных копий с помощью службы хранилища больших двоичных объектов Windows Azure можно выполнить, создав подключенные диски. Однако количество дисков, которые можно подключить к виртуальной машине Windows Azure, ограниченно. Для сверхбольших экземпляров данное ограничение составляет 16 дисков, а для небольших экземпляров это количество меньше. С осуществлением резервного копирования непосредственно в хранилище больших двоичных объектов Windows Azure есть возможность обойти предел в 16 дисков.
Кроме того, файл резервной копии, который сохраняется в службе хранилища больших двоичных объектов Windows Azure, напрямую доступен в локальной службе SQL Server или удаленной службе SQL Server в виртуальной машине Windows Azure. Присоединение и отсоединение базы данных, а также скачивание и подключение виртуального жесткого диска не требуется.
Экономические преимущества: Оплата только тех услуг, которые используются. Может применяться в качестве экономически эффективного решения по удаленному резервному копированию и архивированию. Для получения дополнительной информации и ссылок см. раздел Возможности оплаты Windows Azure.
Возможности оплаты Windows Azure:
Понимание стоимости хранения Windows Azure позволяет прогнозировать стоимость создания и хранения резервных копий в Windows Azure.
Ценовой калькулятор Windows Azure может помочь оценить затраты.
Хранение. Стоимость основывается на используемом пространстве и высчитывается по градуированной шкале и уровню избыточности. Дополнительные сведения и обновленную информацию см. в разделе Управление данными статьи Расчет цен.
Передача данных: Входящие передачи данных в Windows Azure бесплатны. Исходящие передачи оцениваются по пропускной способности, а их стоимость высчитывается по градуированной шкале, привязанной к региону. Дополнительные сведения см. в разделе Передача данных в статье «Расчет цен».
Требования, компоненты и основные понятия
В этом разделе:
Безопасность
Введение в основные компоненты и понятия
Служба хранилища больших двоичных объектов Windows Azure
Компоненты SQL Server
Ограничения
Поддержка инструкций резервного копирования и восстановления
Безопасность
Далее описаны вопросы безопасности и требования к резервному копированию и восстановлению с помощью службы хранилища больших двоичных объектов Windows Azure.
При создании контейнера для службы хранилища больших двоичных объектов Windows Azure рекомендуется установить для него закрытые права доступа. Установка закрытых прав доступа означает, что доступ предоставляется только тем пользователям и учетным записям, которые могут предоставить необходимую информацию для проверки подлинности в учетной записи Windows Azure.
Примечание по безопасности SQL Server требует, чтобы имя учетной записи Windows Azure и проверка подлинности ключа доступа сохранялась в учетных данных SQL Server. Эта информация используется для проверки подлинности в учетной записи Windows Azure при выполнении операций резервного копирования или восстановления.
Учетная запись пользователя, применяемая для выдачи команды BACKUP или RESTORE, должна находиться в db_backup operator роли базы данных с разрешениями Alter any credential.
Компоненты, необходимые для установки
SQL Server выполняется на виртуальной машине Azure. Если SQL Server устанавливается на виртуальной машине Windows Azure, установите версию SQL Server 2012 с пакетом обновления 1 (SP1) CU2 или обновите существующий экземпляр. Для запроса обновления у службы поддержки пользователей Microsoft см. данную статью.
SQL Server локальные: SQL Server 2012 с пакетом обновления 1 (SP1) или более поздней версии CU2 включают эту функцию. Для запроса обновления у службы поддержки пользователей Microsoft см. данную статью.
Введение в основные компоненты и понятия
В следующих двух разделах описана служба хранилища больших двоичных объектов Windows Azure, а также компоненты SQL Server, которые используются в момент создания резервных копий или восстановления из службы хранилища больших двоичных объектов Windows Azure. Чтобы выполнять резервное копирование или восстановление с помощью службы хранилища больших двоичных объектов Windows Azure, важно понимать компоненты и то, как они взаимосвязаны.
Создание учетной записи Windows Azure является первым этапом этого процесса. SQL Server использует Windows Azure storage account name и его значения access key для проверки подлинности, а также для записи и чтения больших двоичных объектов с помощью службы хранилища. Учетные данные службы SQL Server хранят эту информацию для проверки подлинности и используются при выполнении операций резервного копирования или восстановления. Полное пошаговое руководство создания учетной записи для хранения и выполнения простого восстановления см. в руководстве использования службы хранения Windows Azure для создания резервных копий и восстановления SQL Server.
Служба хранилища больших двоичных объектов Windows Azure
Учетная запись хранилища: Учетная запись хранилища является отправной точкой для всех служб хранилища. Для доступа к службе хранилища больших двоичных объектов Windows Azure необходимо сначала создать учетную запись хранилища Windows Azure. Для проверки подлинности в службе хранилища больших двоичных объектов Windows Azure и его компонентах необходимы storage account name и его свойства access key.
Контейнер: Контейнер обеспечивает группирование набора больших двоичных объектов и может хранить их неограниченное количество. Для создания резервных копий SQL Server в службе хранилища больших двоичных объектов Windows Azure необходимо как минимум создать корневой контейнер.
Большой двоичный объект: Файл любого типа и размера. Существуют два типа больших двоичных объектов, которые можно хранить в службе хранилища больших двоичных объектов Windows Azure: блочные и страничные большие двоичные объекты. В резервном копировании SQL Server используются страничные большие двоичные объекты. Обращаться к большим двоичным объектам можно с помощью URL-адреса следующего вида: https://<учетная_запись_хранилища>.blob.core.windows. net/<контейнер>/<большой_двоичный_объект>
Дополнительную информацию о службе хранилища больших двоичных объектов Windows Azure см. в разделе Как использовать службу хранилища больших двоичных объектов Windows Azure
Дополнительную информацию о больших двоичных объектах см. в разделе Основные сведения о блочных и страничных больших двоичных объектах
SQL Server Компоненты
URL-адрес: URL-адрес указывает универсальный идентификатор ресурса (URI) для уникального файла резервной копии. URL-адрес используется для предоставления местоположения и имени файла резервной копии SQL Server. В этой реализации единственным допустимым URL-адресом является тот, который указывает на страничный большой двоичный объект в учетной записи хранилища Windows Azure. URL-адрес должен указывать на фактический большой двоичный объект, а не просто контейнер. Если большой двоичный объект не существует, он будет создан. Если указан существующий большой двоичный объект, то команда BACKUP завершится ошибкой, если только не указан параметр «WITH FORMAT».
Внимание! |
---|
Если скопировать и загрузить файл резервной копии в службу хранилища больших двоичных объектов Windows Azure, используйте в качестве хранилища большой двоичный объект страничного типа. Восстановление из блочных больших двоичных объектов не поддерживается. Попытка выполнить RESTORE из большого двоичного объекта блочного типа приводит к ошибке. |
Пример URL-адреса: http[s]://ИМЯ_УЧЕТНОЙ_ЗАПИСИ.Blob.core.windows. net/<КОНТЕЙНЕР>/<ИМЯ_ФАЙЛА.bak>. Указывать HTTPS не обязательно, но рекомендуется.
Учетные данные: Учетные данные SQL Server — это объект, который используется для хранения сведений, необходимых для проверки подлинности при подключении к ресурсу вне SQL Server. В данном случае процессы резервного копирования и восстановления SQL Server используют учетные данные для проверки подлинности в службе хранилища больших двоичных объектов Windows Azure. Учетные данные хранят имя учетной записи хранилища и значения ключа доступа учетной записи хранилища. После создания учетных данных их необходимо указать в параметре WITH CREDENTIAL при выполнении инструкций BACKUP/RESTORE. Дополнительную информацию о просмотре, копировании или повторном создании учетной записи хранилища access keys см. в разделе Ключи доступа к учетной записи.
Пошаговые инструкции по созданию учетных данных SQL Server см. в примере Создание учетных данных далее в этом разделе.
Общие сведения об учетных данных см. в разделе Учетные данные
Сведения о других примерах использования учетных данных см. в разделе Создание учетной записи-посредника агента SQL Server.
Ограничения
Максимальный поддерживаемый размер резервной копии — 1 ТБ.
В этой реализации можно выполнить инструкции резервного копирования или восстановления с помощью объектов SMO или TSQL. Функция резервного копирования или восстановления из службы хранилища больших двоичных объектов Windows 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 для резервного копирования с помощью службы хранилища больших двоичных объектов Windows Azure. |
|
DIFFERENTIAL (разностная) |
√ |
||
COPY_ONLY |
√ |
||
COMPRESSION|NO_COMPRESSION |
√ |
||
DESCRIPTION |
√ |
||
NAME |
√ |
||
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: |
|||
CREDENTIAL |
√ |
Функция WITH CREDENTIAL поддерживается только при использовании параметра RESTORE FROM URL для восстановления из службы хранилища больших двоичных объектов 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 |
√ |
Дополнительные сведения об аргументах восстановления см. в разделе Аргументы инструкции RESTORE (Transact-SQL).
Примеры.
В этом разделе содержатся следующие примеры.
Создание учетных данных
Создание резервной копии всей базы данных
Создание резервной копии базы данных и журнала
Создание полной резервной копии первичной файловой группы
Создание разностной резервной копии файлов первичных файловых групп
Восстановление базы данных и перемещение файлов
Восстановление состояния на определенный момент времени с помощью STOPAT
Создание учетных данных
В следующем примере создаются учетные данные для хранения сведений о проверке подлинности информации хранилища 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
Создание резервной копии всей базы данных
Следующий пример производит резервное копирование базы данных AdventureWorks2012 в службу хранилища больших двоичных объектов 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
Создание резервной копии базы данных и журнала
В следующем примере используется образец базы данных AdventureWorks2012, которая по умолчанию использует простую модель восстановления. Для поддержки резервного копирования журналов база данных AdventureWorks2012 перенастраивается на использование модели полного восстановления. Затем выполняется полное резервное копирование базы данных в большой двоичный объект Windows Azure и после обновления резервное копирование журнала. В этом примере будет создано имя резервной копии файла с отметкой времени.
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
Создание полной резервной копии первичной файловой группы
В следующем примере создается полная резервная копия файлов первичной файловой группы.
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
Создание разностной резервной копии файлов первичной файловой группы
В следующем примере создается разностная резервная копия файлов первичной файловой группы.
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
Восстановление базы данных и перемещение файлов
Чтобы восстановить полную резервную копию базы данных и переместить восстановленную базу данных в папку C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data directory, выполните следующие действия.
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)
Восстановление состояния на определенный момент времени с помощью STOPAT
В следующем примере производится восстановление базы данных к состоянию на определенный момент времени и демонстрируется операция восстановления.
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()