A partire da SQL Server 2016 avrai la possibilità di archiviare parti di un database nel cloud. Questa nuova capacità è nota come Stretch Database e la funzionalità sarà vantaggiosa per coloro che hanno bisogno di conservare i dati transazionali per lunghi periodi di tempo e per coloro che desiderano risparmiare denaro sullo spazio di archiviazione. Essere in grado di migrare senza problemi i dati su Microsoft Azure Cloud ti darà la possibilità di archiviare i dati senza dover cambiare il modo in cui le tue applicazioni interrogano i dati.
In SQL Server 2016 Community Technology Preview 2 (CTP2), Stretch Database esegue la migrazione di intere tabelle. Se il database è già configurato per archiviare i dati di archivio in tabelle separate dai dati correnti, sarà possibile migrare facilmente i dati di archivio in Azure. Dopo aver abilitato Stretch Database, i dati verranno migrati automaticamente a un database SQL di Azure. Stretch Database sfrutta la potenza di elaborazione in Azure per eseguire query su dati remoti riscrivendo la query. Lo vedrai come un operatore di "interrogazione remota" nel piano di query.
Un modo semplice per identificare i database e le tabelle che possono essere abilitati per l'estensione consiste nel scaricare ed eseguire l'Assistente di aggiornamento di SQL Server 2016 ed eseguire l'Assistente per l'estensione del database. Aaron Bertrand (@AaronBertrand) ne ha scritto di recente:
- Identifica le tabelle candidate per allungare i database di SQL Server 2016
Limiti per l'estensione del database
Non tutti i tavoli potranno essere abilitati per l'estensione. Non sono supportati alcune proprietà di tabella, tipi di dati e colonne, vincoli e indici, come ad esempio:
- Tabelle ottimizzate per la memoria e replicate
- Tabelle che contengono dati FILESTREAM, utilizzano il rilevamento delle modifiche o i dati delle modifiche
- Tipi di dati come timestamp, sql_variant, XML, geografia o colonne che sono sempre crittografati
- Verifica e vincoli di default o vincoli di chiave esterna che fanno riferimento alla tabella
- XML, full-text, spaziali, columnstore cluster e viste indicizzate che fanno riferimento alla tabella abilitata per Stretch
- Non è possibile eseguire istruzioni UPDATE o DELETE o eseguire operazioni CREATE INDEX o ALTER INDEX su una tabella abilitata per Stretch
Per un elenco completo delle limitazioni, puoi visitare:Requisiti e limitazioni per Stretch Database.
Configurazione di Stretch Database
Iniziare non è un compito complicato. Avrai bisogno di un account Azure e quindi abilita Stretch Database nell'istanza.
Per abilitare Stretch Database su un'istanza eseguita:
EXEC sys.sp_configure N'remote data archive', '1'; RECONFIGURE; GO
Per questa demo utilizzerò il database AdventureWorks2014 su un'istanza CPT2 di SQL Server 2016. Inizierò creando una nuova tabella:
USE [AdventureWorks2014]; GO CREATE TABLE dbo.StretchTest ( FirstName VARCHAR(50), LastName VARCHAR(50) ); GO
E poi compilerò la tabella di test StretchTest con alcuni dati:
USE [AdventureWorks2014]; GO INSERT INTO dbo.StretchTest(FirstName, LastName) VALUES('Paul', 'Randal'), ('Kimberly', 'Tripp'),('Jonathan', 'Kehayias'), ('Erin', 'Stellato'),('Glenn', 'Berry'), ('Tim', 'Radney'); GO
Ora ho una tabella che posso estendere a Microsoft Azure Cloud. Per fare ciò utilizzerò la GUI facendo clic con il pulsante destro del mouse su AdventureWorks2014, scegliendo Attività e selezionando Abilita database per allungamento.
Si aprirà la procedura guidata Abilita database per allungamento, come di seguito:
Farò clic su Avanti:
E accedi al mio account Microsoft Azure:
Mi viene quindi chiesto di verificare quale account voglio utilizzare:
Quindi seleziono la posizione di Azure che voglio usare e specifichi un accesso e una password di amministratore. Quando esegui questa operazione, assicurati di prendere nota del nome utente e della password dell'amministratore perché ne avrai bisogno in futuro per riconnetterti al database SQL di Azure se devi ripristinare il database.
Quindi faccio clic su Avanti:
Fare clic su Fine e il database avvia il provisioning nel server di database SQL di Azure.
Ho appena creato una definizione di server collegato sicuro nel mio server locale che ha il database SQL di Azure remoto come endpoint. Posso visualizzarlo in Oggetti server, Server collegati e nel mio account Azure in Database SQL. Si noti che solo i processi di sistema possono utilizzare questo server collegato; gli accessi utente non possono inviare query tramite il server collegato all'endpoint remoto.
Ora che Stretch Database è abilitato per l'istanza e per il database AdventureWorks2014, ora posso allungare la mia nuova tabella. Per estendere la tabella ad Azure devo modificare la tabella e abilitare l'archiviazione remota dei dati.
USE [AdventureWorks2014]; GO ALTER TABLE [StretchTest] ENABLE REMOTE_DATA_ARCHIVE WITH ( MIGRATION_STATE = ON ); GO
Oltre alle nuove funzionalità con SQL Server 2016, sono disponibili anche alcune nuove DMV. Per monitorare la migrazione dei dati ad Azure è possibile interrogare sys.dm_db_rda_migration_status. Quando ho interrogato il DMV dopo aver abilitato l'archiviazione dati remota, sono stato in grado di vedere che le 6 righe sono state migrate:
Backup e ripristino di un database esteso
Attualmente in SQL Server 2016 CTP2, quando viene eseguito il backup di un database abilitato per Stretch, viene creato un backup superficiale che non include i dati che sono stati migrati nel database SQL di Azure. Si prevede che con la versione RTM di SQL Server 2016 il backup di un database abilitato per Stretch creerà un backup completo che conterrà sia i dati locali che quelli estesi.
Quando si ripristina un database abilitato per Stretch, sarà necessario riconnettere il database locale al database SQL di Azure remoto. A tale scopo, eseguendo la procedura memorizzata sys.sp_reauthorize_remote_data_archive come db_owner.
Se ora eseguo il backup del database AdventureWorks2014 abilitato per Stretch e lo ripristino, non sarò più in grado di eseguire query sulla tabella StretchTest finché non mi riconnetterò al database SQL di Azure eseguendo:
USE [AdventureWorks2014]; GO EXEC sys.sp_reauthorize_remote_data_archive @azure_username, @azure_password; GO
Una volta riconnesso, ricevo un messaggio simile a quello di seguito e quindi posso interrogare nuovamente i dati allungati:
Copia del database remoto 'RDAAdventureWorks201467B6D9D4-E8E0-4C54-B3EF-7C2D3F1326C4' nel database remoto 'RDAAdventureWorks2014660B555C-8DD1-4750-9A04-2868CD1C646D'.In attesa del completamento della copia del database remoto.
br />Il database remoto 'RDAAdventureWorks2014660B555C-8DD1-4750-9A04-2868CD1C646D' ha completato la copia ed è ora online.
Quando si ripristina un database abilitato per Stretch in un'altra istanza, tale istanza deve avere "archivio dati remoto abilitato". Dopo aver ripristinato il database e abilitato "archivio dati remoto", è sufficiente riconnettersi al database SQL di Azure eseguendo la stored procedure sys.sp_reauthorize_remote_data_archive.
I backup dei database SQL di Azure per i livelli di servizio Basic, Standard e Premium vengono eseguiti ogni ora. Il periodo di conservazione del backup varia a seconda del livello di servizio. Al momento della stesura, per base è 7 giorni, standard 14 giorni e premium è 35 giorni. È possibile ripristinare i database SQL di Azure utilizzando il portale Web di Microsoft Azure.
Annulla migrazione dei dati
Per eseguire nuovamente la migrazione dei dati all'archiviazione locale da un database SQL di Azure, dovrai creare una nuova tabella locale con lo stesso schema della tabella abilitata per Stretch. È quindi necessario copiare i dati dalla tabella abilitata per Stretch nella nuova tabella locale. Una volta copiati i dati, si elimina la tabella abilitata per Stretch e si rinomina la nuova tabella locale con il nome della tabella abilitata per Stretch che è stata appena eliminata.
È possibile disabilitare Stretch per un database solo dopo che tutte le tabelle abilitate per Stretch sono state eliminate. Se si elimina un database abilitato per Stretch, il database locale viene rimosso ma i dati remoti no; dovrai eliminare il database remoto dal portale di gestione di Azure.
Riepilogo
Stretch Database è un modo semplice per migrare i dati di archivio in Microsoft Azure, se il database lo supporta. Attualmente in SQL Server 2016 CTP2 esistono molte limitazioni con proprietà di tabelle, dati e colonne, tipi di dati e colonne, vincoli e indici. Se non sei limitato da tali limitazioni, Stretch Database è un modo semplice per migrare i dati cronologici al database SQL di Azure e liberare prezioso spazio di archiviazione locale. La gestione dei backup diventerà un po' più complessa poiché i tuoi dati saranno suddivisi tra on premise e nel cloud.
Non vedo l'ora che queste restrizioni vengano revocate nella versione RTM e sono sicuro che molti di voi saranno in grado di utilizzare questa fantastica funzionalità.