SQL Server 2016以降、データベースの一部をクラウドに保存できるようになります。この新しい機能はストレッチデータベースと呼ばれ、この機能は、トランザクションデータを長期間保持する必要がある人や、ストレージのコストを節約したい人に役立ちます。データをMicrosoftAzureクラウドにシームレスに移行できるため、アプリケーションがデータをクエリする方法を変更することなく、データをアーカイブすることができます。
SQL Server 2016 Community Technology Preview 2(CTP2)では、StretchDatabaseはテーブル全体を移行します。データベースがアーカイブデータを現在のデータとは別のテーブルに格納するように既に設定されている場合は、アーカイブデータをAzureに簡単に移行できます。 Stretch Databaseを有効にすると、データがAzureSQLデータベースにサイレントに移行されます。 Stretch Databaseは、Azureの処理能力を活用して、クエリを書き換えることにより、リモートデータに対してクエリを実行します。これは、クエリプランでは「リモートクエリ」演算子として表示されます。
Stretch対応の対象となるデータベースとテーブルを特定する簡単な方法は、SQL Server 2016 Upgrade Advisorをダウンロードして実行し、StretchDatabaseAdvisorを実行することです。 Aaron Bertrand(@AaronBertrand)は最近これについて書いています:
- SQLServer2016ストレッチデータベースの候補テーブルを特定する
ストレッチデータベースの制限
すべてのテーブルがストレッチ対応の対象となるわけではありません。次のような特定のテーブルプロパティ、データと列のタイプ、制約、およびインデックスはサポートされていません。
- メモリ最適化および複製されたテーブル
- FILESTREAMデータを含むテーブルは、変更追跡または変更データを使用します
- タイムスタンプ、sql_variant、XML、地域、または常に暗号化される列などのデータ型
- テーブルを参照する制約または外部キー制約をチェックしてデフォルト設定します
- Stretch対応テーブルを参照するXML、フルテキスト、空間、クラスター化された列ストア、およびインデックス付きビュー
- ストレッチが有効なテーブルでUPDATEまたはDELETEステートメントを実行したり、CREATEINDEXまたはALTERINDEX操作を実行したりすることはできません
制限の完全なリストについては、次のWebサイトにアクセスしてください。StretchDatabaseの要件と制限。
ストレッチデータベースの設定
始めるのは複雑な作業ではありません。 Azureアカウントが必要です。次に、インスタンスでStretchDatabaseを有効にします。
インスタンス実行でStretchDatabaseを有効にするには:
EXEC sys.sp_configure N'remote data archive', '1'; RECONFIGURE; GO
このデモでは、SQL Server2016CPT2インスタンスでAdventureWorks2014データベースを使用します。新しいテーブルを作成することから始めます:
USE [AdventureWorks2014]; GO CREATE TABLE dbo.StretchTest ( FirstName VARCHAR(50), LastName VARCHAR(50) ); GO
次に、テストテーブルStretchTestにいくつかのデータを入力します:
USE [AdventureWorks2014]; GO INSERT INTO dbo.StretchTest(FirstName, LastName) VALUES('Paul', 'Randal'), ('Kimberly', 'Tripp'),('Jonathan', 'Kehayias'), ('Erin', 'Stellato'),('Glenn', 'Berry'), ('Tim', 'Radney'); GO
これで、MicrosoftAzureCloudに拡張できるテーブルができました。これを行うには、AdventureWorks2014を右クリックし、[タスク]を選択し、[ストレッチ用のデータベースを有効にする]を選択してGUIを使用します。
以下のように、データベースのストレッチを有効にするウィザードが開きます。
次をクリックします:
そして、Microsoft Azureアカウントにサインインします:
次に、使用するアカウントを確認するように求められます。
次に、使用するAzureの場所を選択し、管理者のログインとパスワードを指定します。これを行うときは、管理者のユーザー名とパスワードを必ずメモしてください。データベースを復元する必要がある場合は、AzureSQLデータベースに再接続するために後で必要になるためです。
次に、[次へ]をクリックします:
[完了]をクリックすると、データベースはAzure SQLDatabaseServerへのプロビジョニングを開始します。
エンドポイントとしてリモートAzureSQLデータベースを持つローカルサーバー上に安全なリンクサーバー定義を作成しました。これは、サーバーオブジェクト、リンクサーバー、およびSQLデータベースのAzureアカウントで表示できます。このリンクサーバーを使用できるのはシステムプロセスのみであることに注意してください。ユーザーログインは、リンクサーバーを介してリモートエンドポイントにクエリを発行できません。
インスタンスとAdventureWorks2014データベースでStretchDatabaseが有効になったので、新しいテーブルをストレッチできます。テーブルをAzureに拡張するには、テーブルを変更してリモートデータアーカイブを有効にする必要があります。
USE [AdventureWorks2014]; GO ALTER TABLE [StretchTest] ENABLE REMOTE_DATA_ARCHIVE WITH ( MIGRATION_STATE = ON ); GO
SQL Server 2016の新機能に加えて、いくつかの新しいDMVもあります。 Azureへのデータの移行を監視するには、sys.dm_db_rda_migration_statusをクエリします。リモートデータアーカイブを有効にした後でDMVにクエリを実行すると、6つの行が移行されたことがわかりました。
ストレッチデータベースのバックアップと復元
現在、SQL Server 2016 CTP2では、Stretch対応のデータベースがバックアップされると、AzureSQLデータベースに移行されたデータを含まない浅いバックアップが作成されます。 SQL Server 2016のRTMリリースでは、ストレッチ対応データベースをバックアップすると、ローカルデータとストレッチデータの両方を含むディープバックアップが作成されることが期待されます。
Stretchが有効になっているデータベースを復元する場合は、ローカルデータベースをリモートのAzureSQLデータベースに再接続する必要があります。これを行うには、ストアドプロシージャsys.sp_reauthorize_remote_data_archiveをdb_ownerとして実行します。
Stretch対応のAdventureWorks2014データベースをバックアップして復元すると、次のコマンドを実行してAzure SQL Databaseに再接続するまで、StretchTestテーブルをクエリできなくなります。
USE [AdventureWorks2014]; GO EXEC sys.sp_reauthorize_remote_data_archive @azure_username, @azure_password; GO
再接続すると、次のようなメッセージが表示され、ストレッチデータをもう一度クエリできるようになります。
リモートデータベース'RDAAdventureWorks201467B6D9D4-E8E0-4C54-B3EF-7C2D3F1326C4'をリモートデータベース'RDAAdventureWorks2014660B555C-8DD1-4750-9A04-2868CD1C646D'にコピーしています。リモートデータベースのコピーが完了するのを待っています。
リモートデータベース'RDAAdventureWorks2014660B555C-8DD1-4750-9A04-2868CD1C646D'のコピーが完了し、オンラインになりました。
Stretch対応のデータベースを別のインスタンスに復元する場合、そのインスタンスで「リモートデータアーカイブを有効にする」必要があります。データベースを復元して「リモートデータアーカイブ」を有効にしたら、必要なのは、sys.sp_reauthorize_remote_data_archiveストアドプロシージャを実行してAzureSQLデータベースに再接続することだけです。
Basic、Standard、およびPremiumサービス層のAzure SQLデータベースのバックアップは、1時間ごとに実行されます。バックアップの保持期間は、サービス層レベルによって異なります。執筆時点では、基本は7日、標準は14日、プレミアムは35日です。 MicrosoftAzureWebポータルを使用してAzureSQLデータベースを復元できます。
データの移行を解除する
Azure SQLデータベースからローカルストレージにデータを移行するには、Stretch対応テーブルと同じスキーマを使用して新しいローカルテーブルを作成する必要があります。次に、Stretch対応テーブルから新しいローカルテーブルにデータをコピーする必要があります。データがコピーされたら、Stretch対応テーブルを削除し、新しいローカルテーブルの名前を、削除したばかりのStretch対応テーブルの名前に変更します。
データベースのStretchを無効にできるのは、Stretchが有効なすべてのテーブルが削除された後のみです。 Stretchが有効になっているデータベースを削除すると、ローカルデータベースは削除されますが、リモートデータは削除されません。 Azure管理ポータルからリモートデータベースを削除する必要があります。
概要
データベースがサポートしている場合、StretchDatabaseはアーカイブデータをMicrosoftAzureに移行する簡単な方法です。現在、SQL Server 2016 CTP2には、テーブル、データ、および列のプロパティ、データと列のタイプ、制約、およびインデックスに関する多くの制限があります。これらの制限に制限されていない場合、StretchDatabaseは履歴データをAzureSQL Databaseに移行し、貴重なローカルストレージを解放する簡単な方法です。データがオンプレミスとクラウドに分割されるため、バックアップの管理は少し複雑になります。
RTMリリースでこれらの制限が解除されることを楽しみにしています。多くの人がこのクールな機能を利用できると確信しています。