Ab SQL Server 2016 haben Sie die Möglichkeit, Teile einer Datenbank in der Cloud zu speichern. Diese neue Fähigkeit ist als Stretch Database bekannt und die Funktion wird für diejenigen von Vorteil sein, die Transaktionsdaten über lange Zeiträume aufbewahren müssen und diejenigen, die Geld bei der Speicherung sparen möchten. Die Möglichkeit, Daten nahtlos in die Microsoft Azure Cloud zu migrieren, gibt Ihnen die Möglichkeit, Daten zu archivieren, ohne die Art und Weise ändern zu müssen, wie Ihre Anwendungen die Daten abfragen.
In SQL Server 2016 Community Technology Preview 2 (CTP2) migriert Stretch Database ganze Tabellen. Wenn Ihre Datenbank bereits so eingerichtet ist, dass Archivdaten in separaten Tabellen von aktuellen Daten gespeichert werden, können Sie die Archivdaten problemlos zu Azure migrieren. Sobald Sie Stretch Database aktivieren, werden Ihre Daten im Hintergrund zu einer Azure SQL-Datenbank migriert. Stretch Database nutzt die Verarbeitungsleistung in Azure, um Abfragen für Remotedaten auszuführen, indem die Abfrage umgeschrieben wird. Dies wird im Abfrageplan als "Remote-Abfrage"-Operator angezeigt.
Eine einfache Möglichkeit, Datenbanken und Tabellen zu identifizieren, die für Stretch-fähig sind, besteht darin, den SQL Server 2016 Upgrade Advisor herunterzuladen und auszuführen und den Stretch Database Advisor auszuführen. Aaron Bertrand (@AaronBertrand) schrieb kürzlich darüber:
- Kandidatentabellen für SQL Server 2016-Stretch-Datenbanken identifizieren
Einschränkungen für die Stretch-Datenbank
Nicht alle Tische können Stretch-fähig gemacht werden. Bestimmte Tabelleneigenschaften, Daten- und Spaltentypen, Einschränkungen und Indizes werden nicht unterstützt, wie z. B.:
- Speicheroptimierte und replizierte Tabellen
- Tabellen, die FILESTREAM-Daten enthalten, verwenden Change Tracking oder Change Data
- Datentypen wie timestamp, sql_variant, XML, geography oder Spalten, die Always Encrypted sind
- Check- und Default-Constraints oder Fremdschlüssel-Constraints, die auf die Tabelle verweisen
- XML-, Volltext-, räumliche, gruppierte Columnstore- und indizierte Ansichten, die auf die Stretch-fähige Tabelle verweisen
- Sie können keine UPDATE- oder DELETE-Anweisungen oder CREATE INDEX- oder ALTER INDEX-Operationen für eine Stretch-aktivierte Tabelle ausführen
Eine vollständige Liste der Einschränkungen finden Sie unter:Anforderungen und Einschränkungen für die Stretch-Datenbank.
Stretch-Datenbank einrichten
Der Einstieg ist keine komplizierte Aufgabe. Sie benötigen ein Azure-Konto und aktivieren dann Stretch Database auf der Instanz.
So aktivieren Sie Stretch Database auf einer Instanz:
EXEC sys.sp_configure N'remote data archive', '1'; RECONFIGURE; GO
Für diese Demo verwende ich die AdventureWorks2014-Datenbank auf einer SQL Server 2016 CPT2-Instanz. Ich beginne mit dem Erstellen einer neuen Tabelle:
USE [AdventureWorks2014]; GO CREATE TABLE dbo.StretchTest ( FirstName VARCHAR(50), LastName VARCHAR(50) ); GO
Und dann fülle ich die Testtabelle StretchTest mit einigen Daten:
USE [AdventureWorks2014]; GO INSERT INTO dbo.StretchTest(FirstName, LastName) VALUES('Paul', 'Randal'), ('Kimberly', 'Tripp'),('Jonathan', 'Kehayias'), ('Erin', 'Stellato'),('Glenn', 'Berry'), ('Tim', 'Radney'); GO
Ich habe jetzt eine Tabelle, die ich auf die Microsoft Azure Cloud ausdehnen kann. Dazu verwende ich die GUI, indem ich mit der rechten Maustaste auf AdventureWorks2014 klicke, Aufgaben auswähle und Datenbank für Stretch aktivieren auswähle.
Der Assistent „Datenbank für Stretch aktivieren“ wird wie folgt geöffnet:
Ich klicke auf Weiter:
Und melden Sie sich bei meinem Microsoft Azure-Konto an:
Ich werde dann aufgefordert, zu bestätigen, welches Konto ich verwenden möchte:
Dann wähle ich aus, welchen Azure-Standort ich verwenden möchte, und gebe einen Administrator-Login und ein Kennwort an. Notieren Sie sich dabei den Benutzernamen und das Kennwort des Administrators, da Sie diese zukünftig benötigen, um sich erneut mit der Azure SQL-Datenbank zu verbinden, wenn Sie die Datenbank wiederherstellen müssen.
Ich klicke dann auf Weiter:
Klicken Sie auf „Fertig stellen“, und die Datenbank beginnt mit der Bereitstellung für Azure SQL-Datenbankserver.
Ich habe gerade eine sichere Verbindungsserverdefinition auf meinem lokalen Server erstellt, die die Azure SQL-Remotedatenbank als Endpunkt hat. Ich kann dies in Serverobjekten, verknüpften Servern sowie in meinem Azure-Konto unter SQL-Datenbanken anzeigen. Beachten Sie, dass nur Systemprozesse diesen Verbindungsserver verwenden können; Benutzeranmeldungen können keine Abfragen über den Verbindungsserver an den entfernten Endpunkt senden.
Jetzt, da Stretch Database für die Instanz und für die AdventureWorks2014-Datenbank aktiviert ist, kann ich jetzt meine neue Tabelle dehnen. Um die Tabelle auf Azure auszudehnen, muss ich die Tabelle ändern und die Remote-Datenarchivierung aktivieren.
USE [AdventureWorks2014]; GO ALTER TABLE [StretchTest] ENABLE REMOTE_DATA_ARCHIVE WITH ( MIGRATION_STATE = ON ); GO
Zusätzlich zu den neuen Funktionen von SQL Server 2016 gibt es auch einige neue DMVs. Um die Migration von Daten zu Azure zu überwachen, können Sie sys.dm_db_rda_migration_status abfragen. Als ich die DMV nach der Aktivierung des Remote-Datenarchivs abfragte, konnte ich sehen, dass die 6 Zeilen migriert wurden:
Sicherung und Wiederherstellung einer Stretch-Datenbank
Derzeit wird in SQL Server 2016 CTP2 beim Sichern einer Stretch-fähigen Datenbank eine flache Sicherung erstellt, die die Daten nicht enthält, die zur Azure SQL-Datenbank migriert wurden. Es wird erwartet, dass mit der RTM-Version von SQL Server 2016 beim Sichern einer Stretch-aktivierten Datenbank ein tiefes Backup erstellt wird, das sowohl lokale als auch gestreckte Daten enthält.
Beim Wiederherstellen einer Stretch-fähigen Datenbank müssen Sie die lokale Datenbank erneut mit der Azure SQL-Remotedatenbank verbinden. Führen Sie dazu die gespeicherte Prozedur sys.sp_reauthorize_remote_data_archive als db_owner aus.
Wenn ich jetzt die Stretch-aktivierte AdventureWorks2014-Datenbank sichere und wiederherstelle, kann ich die StretchTest-Tabelle nicht mehr abfragen, bis ich mich wieder mit Azure SQL-Datenbank verbinde, indem ich Folgendes ausführe:
USE [AdventureWorks2014]; GO EXEC sys.sp_reauthorize_remote_data_archive @azure_username, @azure_password; GO
Sobald die Verbindung wiederhergestellt ist, erhalte ich eine Meldung ähnlich der folgenden und kann die Stretched-Daten erneut abfragen:
Die entfernte Datenbank „RDAAdventureWorks201467B6D9D4-E8E0-4C54-B3EF-7C2D3F1326C4“ wird in die entfernte Datenbank „RDAAdventureWorks2014660B555C-8DD1-4750-9A04-2868CD1C646D“ kopiert.Warten, bis das Kopieren der entfernten Datenbank abgeschlossen ist.
Remote-Datenbank „RDAAdventureWorks2014660B555C-8DD1-4750-9A04-2868CD1C646D“ wurde vollständig kopiert und ist jetzt online.
Beim Wiederherstellen einer Stretch-aktivierten Datenbank auf einer anderen Instanz muss für diese Instanz „Remote-Datenarchivierung aktiviert“ sein. Nachdem Sie die Datenbank wiederhergestellt und „Remote-Datenarchivierung“ aktiviert haben, müssen Sie nur noch eine Verbindung mit der Azure SQL-Datenbank herstellen, indem Sie die gespeicherte Prozedur „sys.sp_reauthorize_remote_data_archive“ ausführen.
Die Sicherungen für Azure SQL-Datenbanken für die Dienstebenen „Basic“, „Standard“ und „Premium“ werden stündlich durchgeführt. Der Aufbewahrungszeitraum für Backups variiert je nach Service-Tier-Level. Zum Zeitpunkt des Verfassens dieses Artikels beträgt sie für Basic 7 Tage, für Standard 14 Tage und für Premium 35 Tage. Sie können Azure SQL-Datenbanken über das Microsoft Azure-Webportal wiederherstellen.
Datenmigration rückgängig machen
Um Daten aus einer Azure SQL-Datenbank zurück in den lokalen Speicher zu migrieren, müssen Sie eine neue lokale Tabelle mit demselben Schema wie die Stretch-fähige Tabelle erstellen. Anschließend müssen Sie die Daten aus der Stretch-fähigen Tabelle in die neue lokale Tabelle kopieren. Nachdem die Daten kopiert wurden, löschen Sie die Stretch-aktivierte Tabelle und benennen die neue lokale Tabelle in den Namen der gerade gelöschten Stretch-aktivierten Tabelle um.
Sie können Stretch erst dann für eine Datenbank deaktivieren, wenn alle Stretch-aktivierten Tabellen gelöscht wurden. Wenn Sie eine für Stretch aktivierte Datenbank löschen, wird die lokale Datenbank entfernt, die entfernten Daten jedoch nicht. Sie müssen die Remotedatenbank aus dem Azure-Verwaltungsportal löschen.
Zusammenfassung
Stretch Database ist eine einfache Möglichkeit, Archivdaten nach Microsoft Azure zu migrieren, sofern Ihre Datenbank dies unterstützt. Derzeit gibt es in SQL Server 2016 CTP2 viele Einschränkungen bei Tabellen-, Daten- und Spalteneigenschaften, Daten- und Spaltentypen, Einschränkungen und Indizes. Wenn Sie nicht durch diese Einschränkungen eingeschränkt sind, ist Stretch Database eine einfache Möglichkeit, historische Daten in Azure SQL-Datenbank zu migrieren und wertvollen lokalen Speicherplatz freizugeben. Die Verwaltung von Backups wird etwas komplexer, da Ihre Daten zwischen On-Premise und in der Cloud aufgeteilt werden.
Ich freue mich darauf, dass diese Beschränkungen in der RTM-Version aufgehoben werden, und ich bin sicher, dass viele von Ihnen diese coole Funktion nutzen können.