Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе представлены основные понятия, требования и компоненты, необходимые для использования службы хранилища BLOB-объектов Azure в качестве назначения резервного копирования. Функции резервного копирования и восстановления одинаковы или похожи на функции при использовании DISK или TAPE с несколькими различиями. В этом разделе описаны различия, любые заметные исключения, а также приведены несколько примеров кода.
Требования, компоненты и понятия
В этом разделе:
Поддержка инструкций резервного копирования и восстановления
Использование задачи резервного копирования в SQL Server Management Studio
Резервное копирование SQL Server в URL с помощью мастера плана обслуживания
Восстановление из хранилища Azure с помощью SQL Server Management Studio
Безопасность
Ниже приведены соображения по безопасности и требования при резервном копировании или восстановлении из служб хранилища Azure BLOB.
При создании контейнера для службы хранилища BLOB-объектов Azure рекомендуется задать доступ к частному. Настройка доступа к приватным ограничивает доступ к пользователям или учетным записям, которые могут предоставить необходимые сведения для проверки подлинности в учетной записи Azure.
Это важно
SQL Server требует, чтобы имя учетной записи Azure и проверка подлинности ключа доступа хранились в учетных данных SQL Server. Эта информация используется для проверки подлинности в учетной записи Azure при выполнении операций резервного копирования или восстановления.
Учетная запись пользователя, используемая для выдачи команд BACKUP или RESTORE, должна находиться в роли базы данных оператора db_backup с разрешениями 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-объектов. Чтобы создать резервную копию SQL Server в службу BLOB-объектов Azure, необходимо создать по крайней мере корневой контейнер.
Капля: Файл любого типа и размера. Существует два типа BLOB-объектов, которые можно хранить в службе хранилища BLOB-объектов Azure: блочные и страничные BLOB-объекты. Резервное копирование SQL Server использует страничные BLOBы в качестве типа BLOB. Можно адресовать объекты Blob с помощью следующего формата URL-адреса: https://<учетная запись хранилища>.blob.core.windows.net/<контейнер>/<blob>
Дополнительные сведения о службе хранилища BLOB-объектов Azure см. в статье "Использование службы хранилища BLOB-объектов Azure"
Дополнительные сведения о страничных BLOB-ах см. в статье Understanding Block and Page Blobs.
Компоненты SQL Server
URL-адрес: URL-адрес указывает универсальный идентификатор ресурса (URI) для уникального файла резервной копии. URL-адрес используется для предоставления расположения и имени файла резервного копирования SQL Server. В этой реализации единственным допустимым URL-адресом является тот, который указывает на страничный BLOB-объект в учетной записи хранения Azure. URL-адрес должен указывать на реальный Blob, а не только контейнер. Если объект Blob не существует, он создается. Если указан существующий 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 используют учетные данные для проверки подлинности в службе Azure Blob Storage. Учетные данные хранят имя учетной записи хранения и значения ключей доступа к учетной записи хранения. После создания учетных данных его необходимо указать в параметре WITH CREDENTIAL при выполнении инструкций BACKUP/RESTORE. Дополнительные сведения о том, как просматривать, копировать или повторно создавать ключи доступа к учетной записи хранения, см. в разделе "Ключи доступа к учетной записи хранения".
Пошаговые инструкции по созданию учетных данных SQL Server см. в разделе "Создание примера учетных данных " далее в этом разделе.
Общие сведения об учетных данных см. в разделе "Учетные данные"
Сведения о других примерах использования учетных данных см. в разделе "Создание прокси агента SQL Server".
Ограничения
Резервное копирование в хранилище класса Premium не поддерживается.
Максимальный размер резервного копирования, поддерживаемый, составляет 1 ТБ.
Инструкции резервного копирования или восстановления можно выдавать с помощью командлетов TSQL, SMO или PowerShell. Резервное копирование или восстановление из службы хранилища BLOB-объектов Azure с помощью мастера резервного копирования или восстановления SQL Server Management Studio в настоящее время не включено.
Создание имени логического устройства не поддерживается. Поэтому добавление URL-адреса в качестве устройства резервного копирования с помощью sp_dumpdevice или через SQL Server Management Studio не поддерживается.
Добавление к существующим blob-объектам резервного копирования не поддерживается. Резервные копии в существующий объект двоичных данных можно перезаписать только с помощью параметра WITH FORMAT.
Резервное копирование в несколько BLOBs за одну операцию резервного копирования не поддерживается. Например, следующее возвращает ошибку:
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 символа для имен учетной записи, контейнера и большого двоичного объекта.
Поддержка инструкций резервного копирования и восстановления
Инструкция резервного копирования и восстановления | Поддерживается | Исключения | Комментарии |
Резервное копирование | ✓ | BLOCKSIZE и MAXTRANSFERSIZE не поддерживаются. | Требуется указать "WITH CREDENTIAL" |
ВОССТАНОВИТЬ | ✓ | Требуется указать с использованием учетных данных | |
RESTORE FILELISTONLY | ✓ | Требуется указать С УДОСТОВЕРЕНИЕМ | |
RESTORE HEADERONLY (восстановить только заголовок) | ✓ | Требуется указать параметр "WITH CREDENTIAL" | |
ВОССТАНОВИТЬ labelonly | ✓ | Требуется указать учетные данные. | |
ВОССТАНОВИТЬ ТОЛЬКО ПРОВЕРКУ | ✓ | Требуется указать WITH CREDENTIAL (укажите учетные данные) | |
ВОССТАНОВИТЬ REWINDONLY | ✓ |
Сведения о синтаксисе и общих сведениях об инструкциях резервного копирования см. в статье BACKUP (Transact-SQL).
Сведения о синтаксисе и общих сведениях об инструкциях восстановления см. в разделе RESTORE (Transact-SQL).
Поддержка аргументов резервного копирования
Аргумент | Поддерживается | Исключение | Комментарии |
База данных | ✓ | ||
ЛОГ | ✓ | ||
TO (URL) | ✓ | В отличие от ДИСКА и ЛЕНТЫ, URL-адрес не поддерживает указание или создание логического имени. | Этот аргумент используется для указания пути URL-адреса для файла резервной копии. |
К ЗЕРКАЛУ | ✓ | ||
С ПАРАМЕТРАМИ: | |||
УЧЁТНЫЕ ДАННЫЕ | ✓ | WITH CREDENTIAL поддерживается только при использовании параметра BACKUP TO URL-адреса для резервного копирования в службу хранилища BLOB-объектов Azure. | |
DIFFERENTIAL (разностная) | ✓ | ||
Только копирование | ✓ | ||
СЖАТИЕ|БЕЗ_СЖАТИЯ | ✓ | ||
ОПИСАНИЕ | ✓ | ||
ИМЯ | ✓ | ||
СРОК ДЕЙСТВИЯ | ДНИ ХРАНЕНИЯ | ✓ | ||
NOINIT | INIT | ✓ | Этот параметр игнорируется при использовании. Добавление к blob-объектам невозможно. Чтобы перезаписать резервную копию, используйте аргумент FORMAT. |
|
NOSKIP | СКИП | ✓ | ||
NOFORMAT | ФОРМАТ | ✓ | Этот параметр игнорируется при использовании. Создание резервной копии в существующий блоб завершается ошибкой, если не указан параметр WITH FORMAT. Существующий большой двоичный объект перезаписывается при указании опции WITH FORMAT. |
|
ОПИСАНИЕ МЕДИА | ✓ | ||
MEDIANAME | ✓ | ||
РАЗМЕР БЛОКА | ✓ | ||
BUFFERCOUNT | ✓ | ||
Максимальный размер передачи | ✓ | ||
НЕТ_КОНТРОЛЬНОЙ_СУММЫ | КОНТРОЛЬНАЯ СУММА | ✓ | ||
ОСТАНОВИТЬ_ПРИ_ОШИБКЕ | ПРОДОЛЖИТЬ_ПОСЛЕ_ОШИБКИ | ✓ | ||
СТАТИСТИКА | ✓ | ||
REWIND | NOREWIND | ✓ | ||
ВЫГРУЗКА | НОУНЛОД | ✓ | ||
NORECOVERY | ОЖИДАНИЕ | ✓ | ||
NO_TRUNCATE | ✓ |
Дополнительные сведения о аргументах резервного копирования см. в статье BACKUP (Transact-SQL).
Поддержка аргументов восстановления
Аргумент | Поддерживается | Исключения | Комментарии |
База данных | ✓ | ||
ЛОГ | ✓ | ||
ИЗ (URL) | ✓ | Аргумент FROM URL используется для указания URL-адреса файла резервной копии. | |
С параметрами: | |||
УЧЁТНЫЕ ДАННЫЕ | ✓ | WITH CREDENTIAL поддерживается только при использовании параметра RESTORE FROM URL для восстановления из службы хранилища Azure Blob. | |
ЧАСТИЧНЫЙ | ✓ | ||
ВОССТАНОВЛЕНИЕ | БЕЗ ВОССТАНОВЛЕНИЯ | РЕЗЕРВНЫЙ | ✓ | ||
Загрузить историю | ✓ | ||
ПЕРЕМЕСТИТЬ | ✓ | ||
ЗАМЕНИТЬ | ✓ | ||
ПЕРЕЗАПУСК | ✓ | ||
Ограниченный_Пользователь | ✓ | ||
ФАЙЛ | ✓ | ||
пароль | ✓ | ||
MEDIANAME | ✓ | ||
Медиапароль | ✓ | ||
РАЗМЕР БЛОКА | ✓ | ||
BUFFERCOUNT | ✓ | ||
Максимальный размер передачи | ✓ | ||
КОНТРОЛЬНАЯ СУММА | БЕЗ КОНТРОЛЬНОЙ СУММЫ | ✓ | ||
STOP_ON_ERROR | CONTINUE_AFTER_ERROR | ✓ | ||
FILESTREAM | ✓ | ||
СТАТИСТИКА | ✓ | ||
REWIND | NOREWIND | ✓ | ||
ВЫГРУЗКА | NOUNLOAD | ✓ | ||
сохранить репликацию | ✓ | ||
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 в экземпляре ядра СУБД щелкните правой кнопкой мыши "Безопасность", выберите "Создать" и выберите "Учетные данные". Укажите имя учетной записи хранения в поле Идентификатор и ключ доступа в поле Пароль .
Контейнер хранилища 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. Файлы резервной копии, находящиеся в хранилище, отображаются на этой странице. Выберите файл, который вы хотите использовать для восстановления, и нажмите кнопку "ОК". Это вернёт вас к диалоговому окну выбора резервных копий, и нажав ОК в этом окне, вы вернётесь к основному диалоговому окну восстановления, где сможете завершить восстановление. Дополнительные сведения см. в следующих разделах:
Восстановление базы данных (страница "Общие")
Примеры кода
Этот раздел содержит следующие примеры.
Создать учетную запись
В следующем примере создаются учетные данные, которые хранят информацию для аутентификации в службе хранилища 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 изменяется для использования модели полного восстановления. Затем в примере создается полная резервная копия базы данных в Azure Blob, а после периода обновлений выполняется резервное копирование журнала. В этом примере создается имя файла резервной копии с меткой с датой и временем.
-- 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)