SQL Server 2016のデータベースエンジンの新機能の1つに「SQL Server Managed Backup to Azure(単にManaged Backupと表記されることもある)」があります。
機能概要
Microsoft Azure Blobストレージに自動的にSQL Serverのバックアップをとったり、管理するための機能です。
バックアップタイミングは次の2パターンを選ぶことができます。
- データベースのワークロードをベースにした自動バックアップ
- オプションで設定したバックアップのスケジュール(時間)定義に基づいたバックアップ
Microsoft Azure Blobストレージにバックアップファイルを保存する期間を設定できます。
メリット
これまでは、時間指定のバックアップを設定するか、カスタムコードを書かないと自動バックアップを設定することができなかったのです。
しかし、SQL Server Managed Backup to Windows Azureを使用すると、バックアップファイルの保持期間と、保存場所を指定すれば自動的にバックアップされます。オプションでスケジュールを指定することもできますが不要です。
設定対象
次の範囲で、Managed Backupを設定できます。
- インスタンスレベル
- データベースレベル(インスタンスレベルの設定を上書き可能)
インスタンスレベルで定義をしておくと、新しいデータベースを作成したときにも自動的にバックアップされます。
前提条件
次のサービス、アカウント、認証情報が必要です。
- Microsoft Azure アカウント
- Azure ストレージアカウント
- Blobコンテナー
- Shared Access Signature:SAS(共有アクセス署名)
- SQL Server Agent サービス
SQL Server 2014 と SQL Server 2016のManaged Backupの機能差異
項目 | SQL Server 2014 | SQL Server 2016 |
名前空間 | smart_admin | managed_backup |
ストアド | sp_set_db_backUP sp_set_instance_backup | sp_backup_config_basic sp_backup_config_advance |
セキュリティ | ストレージアカウント アクセスキー | 共有アクセス署名 |
ストレージ | ページBlob | ブロックBlob |
SQL Server 2016では次のような機能特徴がある
- コストの安いブロックBlobを使用する
- ストライピングを使用し、最大12TB(ページBlobだと1TB)
- ストライピングにより、リストア時間の短縮
- システムデータベースに対応
- 単純復旧モードのデータベースも利用可能
フルバックアップが取得されるタイミング
- 機能を有効にしたタイミング
- 最後のフルバックアップからログが1GB以上拡張したとき
- 最後のフルバックアップから1週間経過したとき
- ログチェインが壊れたとき(トランザクションログが消されたとき)
トランザクションログバックアップが取得されるタイミング
- ログバックアップ履歴が無いとき(通常は機能を有効にしたとき)
- トランザクションログ要領を5MB以上使用したとき
- 最後のトランザクションログバックアップから2時間経過したとき
- フルバックアップが遅延しているとき
バックアップファイルの保存期間
- 保存期間は最少1日、最大30日を指定できる
- 保存期間内であれば、指定した時間にポイントタイムリカバリができる
注意事項
- ブロックBlobの最大サイズは200GB
- ストライピングを使用することで、最大12TBまで保存可能
- それ以上の場合は、圧縮を使用する
- CTP 2.1段階では、GUI(SQL Server Management Studio)での操作はできない
- ストアドかPowerShellで設定する
機能を有効にする手順
具体的な手順はドキュメントに記載されているので、簡単な流れのみ記載。
- Microsoft Azureにサインアップ
- ストレージアカウントの作成
- Blobコンテナーの作成
- 共有アクセス署名(SAS)の作成
- SQL証明書の作成
- SQL Server Agentサービスの開始
- SQL Server Managed Backup to Windows Azureの設定と有効化
- ヘルスステータス(エラーや警告)のメール通知の設定と有効化
Azure PowerShellでの操作
Azure PowerShellを使用して、バックアップファイルを格納するコンテナーのSASを取得します。以下の例は、既存のコンテナーのSASを取得する例。
Get-AzurePublishSettingsFile
Import-AzurePublishSettingsFile
Select-AzureSubscription
$context = New-AzureStorageContext -StorageAccountName ***atoya -StorageAccountKey (Get-AzureStorageKey -Storage
New-AzureStorageContainerSASToken -Name pub -Permission rwdl -FullUri -Context $context
SQL 証明書の作成
次に、SQL証明書を作成します。
CREATE CREDENTIAL [https://***atoya.blob.core.windows.net/pub]
WITH IDENTITY = ‘Shared Access Signature’,
SECRET = ‘sv=2014-02-14&sr=c&sig=********wUKKjd2d8%3D&se=2015-07-08T01%3A55%3A03Z&sp=rwdl’
SQL Server Managed Backup to Windows Azureの設定と有効化
Managed Backupを設定します。
Use msdb;
GO
EXEC msdb.managed_backup.sp_backup_config_basic
@enable_backup = 1,
@database_name = ‘test’,
@container_url = ‘https://y****a.blob.core.windows.net/pub’,
@retention_days = 30
GO
ストアドプロシージャーを設定すると、次のように設定しましたと出力されます。
裏側では、フルバックアップが実行されます。
Database backed up. Database: test, creation date(time): 2015/05/28(23:11:16), pages dumped: 369, first LSN: 36:376:37, last LSN: 36:395:1, number of dump devices: 1, device information: (FILE=1, TYPE=URL: {‘https://*****.blob.core.windows.net/pub/test_9806c8082c754fdcbca50ae99e2b1763_20150708100900+09.bak’}). This is an informational message only. No user action is required.
SQL Server Agentサービスを使用すると書いてあるので、てっきりジョブ登録されるのかと思ったのですが、ジョブには登録されていません。
ヘルスステータス(エラーや警告)のメール通知の設定と有効化
SQLデータベースメールを設定します。
SQL Server Agentメールの設定をします。
監視を追加します。
EXEC msdb.managed_backup.sp_set_parameter
@parameter_name = ‘SSMBackup2WANotificationEmailIds’,
@parameter_value = ‘<t.yam***ya@***ops.com>’
メール通知はこんな感じのが届きます。
バックアップファイルを確認します
バックアップ状況を確認します。
SELECT *
FROM managed_backup.fn_available_backups (‘test’)
取得できる情報は次のようなもの。
backup_path
backup_type
expiration_date
database_guid
first_lsn
last_lsn
backup_start_date
backup_finish_date
machine_name
last_recovery_fork_id
first_recovery_fork_id
fork_point_lsn
availability_group_guid