SQL Data Sync è un servizio di Azure che consente agli amministratori di creare relazioni di sincronizzazione bidirezionale tra installazioni di SQL Database e SQL Server. La sincronizzazione avviene attraverso una topologia a hub e spoke, in cui due o più database SQL fanno parte di un gruppo di sincronizzazione. Un database SQL è designato come il database hub, mentre uno o più altri sono database membri. Il traffico di sincronizzazione avviene esclusivamente tra il database hub e i database membri. Oltre ai database che partecipano al gruppo di sincronizzazione, esiste anche un database di metadati di sincronizzazione, che contiene i metadati e i log del processo di Data Sync.
Con l’utilizzo di SQL Data Sync, gli amministratori possono supportare applicazioni ibride sincronizzando un database SQL Server on-premises con un'installazione di Azure SQL Database. Un’altra applicazione possibile per Data Sync è quella di creare copie sincronizzate di un database per suddividere le operazioni: una copia può gestire le query in ingresso, mentre gli amministratori utilizzano l’altra copia per l'analisi dei dati.
Per configurare SQL Data Sync, l'amministratore apre un'installazione esistente di SQL Database nel portale di Azure, sceglie un database e seleziona "Sincronizza con altri database" nel menu Gestione dei dati. Nella pagina che appare, l'amministratore può quindi cliccare su +Nuovo gruppo di sincronizzazione per aprire la pagina "Crea gruppo di sincronizzazione", come mostrato nella Figura 1-51.
Dopo aver creato il gruppo di sincronizzazione, l'amministratore può aggiungere i database membri al gruppo. I database di altre installazioni di Azure SQL Database possono essere membri del gruppo di sincronizzazione, così come i database on-premises che eseguono SQL Server. Tuttavia, prima che un database da un SQL Server on-premises possa essere aggiunto come membro del gruppo di sincronizzazione, gli amministratori devono prima installare l'agente di sincronizzazione di Azure SQL Data Sync sul server. Questo agente si connette al database hub nel cloud, permettendo all'amministratore di aggiungere i database on-premises al gruppo di sincronizzazione come membri.
SQL Data Sync supporta solo database che eseguono Azure SQL Database e SQL Server come membri di un gruppo di sincronizzazione. Azure SQL Managed Instance non è supportato.
Una volta che i membri sono aggiunti al gruppo di sincronizzazione, gli amministratori possono selezionare tabelle specifiche da sincronizzare nella pagina del gruppo di sincronizzazione. Quando la configurazione di SQL Data Sync è completata, l'amministratore può attivare manualmente la sincronizzazione dalla pagina del gruppo di sincronizzazione o pianificarla per avvenire a un orario specifico.
Un altro scenario comune di migrazione è quello in cui un'organizzazione possiede database SQL Server on-premises e desidera migrarli nel cloud di Azure, sia come soluzione ibrida che permanente. Gli amministratori possono utilizzare diversi strumenti per questo tipo di migrazione. Per esempio, quando un abbonato ad Azure si connette al portale di Azure, la pagina iniziale include l'icona "Crea una risorsa", che fornisce accesso a un lungo elenco di servizi di Azure e prodotti Marketplace. Nella pagina "Crea una risorsa", è possibile selezionare la categoria "Migrazione", che fornisce l'accesso ai servizi Azure Data Migration Service e Azure Migrate, trattati precedentemente, oltre ad altri strumenti utili per il processo di migrazione.
Una delle migrazioni più comuni riguarda il trasferimento di un'applicazione o un database da una macchina virtuale che esegue SQL Server a una soluzione PaaS, come SQL Database o SQL Managed Instance. In questo caso, la migrazione può avvenire attraverso gli stessi strumenti utilizzati per la migrazione di database SQL Server on-premises verso il cloud, come Azure Database Migration Services o Azure Migrate.
Mentre le soluzioni di migrazione tra Azure SQL Database e SQL Managed Instance sono relativamente semplici, occorre comunque prendere in considerazione diverse variabili, come la compatibilità dei vari livelli di prodotto SQL coinvolti, le risorse necessarie dai database e il tempo di inattività che l'organizzazione è disposta a tollerare per una migrazione offline. Se non è possibile tollerare il downtime, è essenziale pianificare una migrazione online, che prevede il trasferimento dei dati senza interruzioni.
È importante considerare anche la necessità di monitorare costantemente lo stato della sincronizzazione e delle migrazioni, in quanto errori o interruzioni potrebbero compromettere l'integrità dei dati. Gli strumenti messi a disposizione da Azure, come Azure Monitor e Azure SQL Analytics, sono fondamentali per tracciare e analizzare l'andamento dei processi di sincronizzazione e migrazione, garantendo che le operazioni di dati siano sicure, veloci e senza imprevisti.
Come garantire l'integrità dei dati sensibili con Ledger in Azure SQL
La protezione dei dati sensibili è diventata una delle principali preoccupazioni per le organizzazioni moderne. Le soluzioni come Ledger in Azure SQL Database sono progettate per affrontare in modo efficace queste problematiche, offrendo una garanzia di integrità crittografica che tutela i dati contro manomissioni, che siano intenzionali o derivanti da errori accidentali. Implementando Ledger, le organizzazioni possono dimostrare a partner e auditor che i loro dati sono affidabili e che non sono stati alterati.
Ledger consente di utilizzare tabelle che registrano le transazioni in modo da rendere evidente qualsiasi alterazione. L'integrazione di Ledger nelle tabelle di una base di dati SQL crea una struttura di dati protetta, capace di tracciare ogni modifica attraverso un meccanismo di hashing crittografico. Questo processo genera una struttura dati interconnessa chiamata "blockchain", che è alla base della protezione e della trasparenza garantite da Ledger.
Le tabelle Ledger si suddividono in due tipologie principali:
-
Tabelle Ledger aggiornabili: Queste tabelle sono destinate a applicazioni che generano comandi di tipo UPDATE, INSERT e DELETE. La caratteristica principale di queste tabelle è la presenza di una tabella storica separata che conserva i valori precedenti delle righe aggiornate in una forma crittograficamente "hashata". Inoltre, le transazioni vengono nuovamente "hashe" per formare una struttura dati blockchain interconnessa. Un altro vantaggio di questa configurazione è la possibilità di generare digest del database per un eventuale salvataggio offline, che consente agli amministratori di verificare in seguito l'integrità dei dati.
-
Tabelle Ledger append-only: Destinate a applicazioni che generano solo comandi di tipo INSERT, come gli strumenti di gestione degli eventi o di logging, queste tabelle bloccano completamente i comandi UPDATE e DELETE. Non necessitano di tabelle storiche, poiché non ci sono modifiche o cancellazioni di dati da tracciare. L'approccio append-only garantisce che una volta inserito un dato, non venga mai modificato, ma solo aggiunto.
L'attivazione di Ledger a livello di database comporta la conversione di tutte le tabelle esistenti in tabelle Ledger aggiornabili, rendendo irreversibile questo processo. Le nuove tabelle create successivamente saranno anch'esse tabelle Ledger aggiornabili, a meno che non vengano definite in modo esplicito attraverso comandi T-SQL. A tal proposito, è possibile creare tabelle Ledger solo per singole tabelle, senza attivare Ledger a livello di database. Per farlo, basta aggiungere la parola chiave LEDGER = ON alla dichiarazione di creazione della tabella.
Oltre a Ledger, un altro importante strumento per la protezione dei dati in Azure SQL è la Sicurezza a livello di riga (Row-Level Security). Questa funzionalità consente di applicare politiche di sicurezza che limitano l'accesso ai dati a livello di singola riga, anziché a livello di tabella. Questo è particolarmente utile quando si desidera limitare l'accesso ai dati in base al ruolo o alle responsabilità di un utente. Ad esempio, in una tabella delle risorse umane contenente informazioni su tutti i dipendenti di un'azienda, un capo dipartimento potrebbe avere accesso solo alle righe che riguardano i dipendenti del suo reparto.
La sicurezza a livello di riga si configura utilizzando funzioni T-SQL che definiscono le righe specifiche che un determinato utente può visualizzare. Un esempio di utilizzo di questa funzione potrebbe essere un filtro che consente a un manager di visualizzare solo i dati riguardanti il proprio reparto, mentre ad altri utenti potrebbe essere negato l'accesso a tali informazioni.
L'implementazione di Microsoft Defender for SQL, parte di Microsoft Defender for Cloud, rappresenta un ulteriore livello di protezione. Questo servizio offre funzionalità avanzate di protezione contro le minacce, come la prevenzione e il rilevamento basato sull'intelligenza artificiale, che analizza il comportamento degli utenti e delle applicazioni per individuare possibili attacchi. In caso di anomalie, ad esempio un numero eccessivo di tentativi di accesso falliti o comandi T-SQL sospetti, il sistema è in grado di segnalarlo come possibile minaccia.
In aggiunta alla protezione dalle minacce, Microsoft Defender for SQL include anche un servizio di valutazione delle vulnerabilità che aiuta gli amministratori a identificare rischi potenziali, fornendo suggerimenti pratici per risolvere le problematiche riscontrate. La protezione offerta da Microsoft Defender è fondamentale per salvaguardare le informazioni sensibili e mantenere un elevato livello di sicurezza, in particolare nelle configurazioni cloud come Azure SQL Database.
Un altro aspetto importante da comprendere, oltre a quanto scritto, è che la gestione della sicurezza in ambienti come Azure SQL non si limita alla sola attivazione di funzionalità come Ledger o Row-Level Security. È essenziale monitorare continuamente l'integrità dei dati e valutare costantemente i rischi attraverso la configurazione di strumenti come Microsoft Defender. La protezione dei dati deve essere vista come un processo continuo e dinamico, che richiede un'attenzione costante per affrontare le nuove minacce e garantire che i dati siano sempre al sicuro.
Come Configurare e Monitorare il Query Store in SQL Server per Ottimizzare le Prestazioni
La modalità di cattura delle statistiche di attesa (Wait Statistics Capture Mode) deve essere impostata su "On" per garantire una raccolta efficace dei dati relativi alle prestazioni delle query in SQL Server. Questa configurazione è essenziale per il monitoraggio e la gestione ottimale delle risorse del database. Una delle funzionalità chiave di SQL Server è il Query Store, che fornisce una storicizzazione delle query, dei piani di esecuzione e delle statistiche di runtime. Questa funzionalità aiuta gli amministratori del database a monitorare e ottimizzare le prestazioni in modo continuo.
Quando il Query Store è abilitato, esso memorizza informazioni su tutte le query eseguite nel database, inclusi i piani di esecuzione scelti dal server. Questo permette agli amministratori di analizzare l'andamento delle performance nel tempo, evidenziando le query che hanno avuto un impatto significativo sulle risorse del sistema. In un database SQL, il Query Store non solo registra i piani di esecuzione ma anche le statistiche sulle performance, che possono essere visualizzate attraverso la pagina delle proprietà del database in SQL Server Management Studio (SSMS).
Per attivare il Query Store in un database, è sufficiente eseguire il seguente comando T-SQL:
In un ambiente Azure SQL Database, la disabilitazione del Query Store non è supportata. Tentare di eseguire il comando ALTER DATABASE ... SET QUERY_STORE = OFF genererebbe un errore, poiché il Query Store deve rimanere abilitato.
La configurazione delle proprietà del Query Store consente agli amministratori di definire una serie di parametri che influenzano direttamente la gestione delle informazioni registrate. Ad esempio, la dimensione massima di archiviazione del Query Store può essere regolata tramite il parametro MAX_STORAGE_SIZE_MB, che definisce la quantità massima di spazio di archiviazione per le statistiche di query. Il valore predefinito per SQL Server 2019 e versioni successive è di 1.000 MB, ma per versioni precedenti potrebbe essere impostato su 100 MB. In Azure SQL Database, la dimensione massima dipende dal livello di servizio scelto, con valori che vanno da un minimo di 10 MB per il livello Basic fino a un massimo di 10.240 MB.
Un altro parametro importante è l'intervallo di raccolta delle statistiche (INTERVAL_LENGTH_MINUTES), che definisce la durata dell'intervallo temporale durante il quale le statistiche delle query vengono aggregate in una singola riga del Query Store. Il valore predefinito è di 60 minuti, ma valori più piccoli permettono di raccogliere dati più granulari, il che può essere utile per analisi dettagliate delle performance.
Un'altra funzionalità utile per la gestione del Query Store è il STAYLE_QUERY_THRESHOLD_DAYS, che definisce il periodo di conservazione delle statistiche di runtime e delle query inattive. Il valore predefinito è di 30 giorni (7 giorni per Azure SQL Database Basic). Quando il Query Store raggiunge la dimensione massima configurata, entra in modalità di sola lettura, impedendo l'aggiornamento delle statistiche e l'inserimento di nuove query.
Il parametro QUERY_CAPTURE_MODE definisce quali query devono essere memorizzate nel Query Store. Il valore predefinito è "AUTO", che consente di selezionare automaticamente le query da memorizzare in base alla loro frequenza di esecuzione e all'utilizzo delle risorse. Quando impostato su "NONE", il server non memorizza nuove query ma continua a raccogliere statistiche per quelle già presenti.
Una volta configurato il Query Store, gli amministratori possono utilizzarlo per monitorare diversi aspetti delle prestazioni del database. In SSMS, il Query Store appare come una cartella nell'Object Explorer, da cui è possibile accedere a diversi report. Tra questi, la sezione "Query Regressed" fornisce una lista delle query che hanno mostrato un degrado nelle performance, offrendo informazioni dettagliate sui piani di esecuzione associati.
Inoltre, la visualizzazione "Overall Resource Consumption" mostra i grafici relativi ai tempi di esecuzione delle query, al consumo di CPU e alle letture logiche I/O. Gli amministratori possono configurare questa visualizzazione per adattarla alle proprie esigenze, scegliendo di visualizzare informazioni su vari parametri di consumo delle risorse.
Le query con "piani forzati" sono un'altra area di interesse. Quando un amministratore forza l'esecuzione di un piano per una query, il query optimizer tenta di eseguire prima quel piano. In caso di fallimento, il sistema selezionerà un piano alternativo. Monitorare le performance delle query con piani forzati è utile per valutarne l'efficacia nel tempo.
Le "Query con variazioni elevate" indicano quelle con la maggiore deviazione standard nell'utilizzo delle risorse, il che può suggerire problemi di performance legati a query inefficienti che causano rallentamenti.
Infine, la sezione "Query Wait Statistics" fornisce un elenco delle query che hanno avuto i maggiori tempi di attesa, una metrica importante per identificare colli di bottiglia nelle risorse. Un altro aspetto che viene monitorato è il blocco delle transazioni. Il blocco in un database SQL si verifica quando una transazione cerca di accedere a dati che sono già stati bloccati da un’altra transazione. Questo può essere un problema se i blocchi non vengono rilasciati in tempo, causando rallentamenti. Le cause più comuni per il blocco prolungato delle transazioni includono transazioni troppo lunghe e un design inefficiente delle transazioni stesse.
Comprendere come configurare e monitorare il Query Store è essenziale per gli amministratori SQL, poiché consente di individuare facilmente le query problematiche e ottimizzare le prestazioni del sistema. È altrettanto cruciale comprendere che una gestione attenta delle risorse e delle transazioni può prevenire i problemi legati ai blocchi e al degrado delle performance, garantendo un funzionamento fluido e reattivo del database.
Come selezionare e implementare soluzioni HA/DR efficaci per SQL Server in un contesto aziendale
Nella valutazione e selezione delle soluzioni ad alta disponibilità (HA) e di recupero di emergenza (DR), gli amministratori devono prendere in considerazione i requisiti aziendali dell’organizzazione e stabilire i valori appropriati per l’Obiettivo di Tempo di Recupero (RTO) e l’Obiettivo di Punto di Recupero (RPO). Questi parametri rappresentano aspetti critici nella pianificazione di soluzioni HA/DR, in quanto determinano i limiti entro i quali l’interruzione dei servizi aziendali deve essere gestita.
L'Obiettivo di Tempo di Recupero (RTO) indica il massimo tempo di inattività che un sistema o una risorsa può tollerare senza che le operazioni aziendali vengano compromesse in modo significativo. Ad esempio, se i database SQL di un’azienda vanno offline, l'RTO rappresenta il periodo massimo di interruzione accettabile prima che le operazioni aziendali subiscano danni rilevanti. In un’operazione di inserimento ordini, un’interruzione del database potrebbe impedire l’acquisizione di nuovi ordini, con ripercussioni sulle vendite e un possibile effetto domino lungo tutta la catena di produzione dell’organizzazione. Gli amministratori devono porsi la domanda su quanto tempo un’interruzione del sistema può essere tollerata prima che le implicazioni aziendali e finanziarie diventino insostenibili. Un RTO più breve implica soluzioni HA/DR più efficienti e costose, in grado di garantire una ripresa rapida.
Parallelamente, l'Obiettivo di Punto di Recupero (RPO) definisce la quantità massima di perdita di dati che un'azienda può tollerare in seguito a un guasto. Per esempio, se un database SQL ha un valore RPO di 30 minuti, e si verifica un’interruzione catastrofica a partire dalle 15:00, le soluzioni di recupero dovrebbero ripristinare il database a uno stato non oltre le 15:30. La configurazione dell'RTO e dell'RPO è teoricamente una scelta che gli amministratori devono fare basandosi su ciò che può essere realizzabile in un determinato contesto, ma per soddisfare questi obiettivi, il sistema deve essere supportato da adeguate soluzioni HA/DR. La scelta di valori più ridotti per RTO e RPO richiede tecnologie più avanzate e costose.
Un'organizzazione potrebbe decidere di tollerare solo 10 minuti di downtime per un database. In questo caso, sarà necessario disporre di meccanismi HA/DR come server ridondanti in grado di caricare rapidamente il carico di elaborazione del database in caso di guasto. Tuttavia, anche i server ridondanti potrebbero non essere sufficienti in caso di disastri naturali su larga scala, come un terremoto, che potrebbero compromettere tutta la zona. In situazioni del genere, per rispettare gli standard di RTO, sono necessarie soluzioni HA/DR più robuste e costose, come data center ridondanti in località diverse. Questo mette in evidenza come la pianificazione HA/DR non possa mai essere una scienza esatta e richieda un bilanciamento tra i requisiti aziendali e le realtà economiche.
Nel caso di implementazioni SQL in ambiente IaaS (Infrastructure as a Service), il prodotto SQL Server viene installato su una macchina virtuale Azure, dando agli amministratori pieno controllo sul sistema operativo Windows e accesso completo al software SQL Server. Azure, inoltre, offre proprie soluzioni HA/DR, tra cui:
-
Always On Failover Cluster Instance (FCI): Questo approccio sfrutta un cluster Windows Server Failover Cluster (WSFC) per creare più nodi contenenti istanze SQL Server ridondanti. Ogni nodo contiene una copia completa dell'istanza, inclusi database, logins e SQL Server Agent jobs. In caso di guasto di un nodo, l’istanza SQL viene avviata su un altro nodo, continuando le operazioni di produzione senza interruzione.
-
Always On Availability Group (AG): Le Availability Group sono soluzioni di ridondanza a livello di database che comprendono un database primario (lettura/scrittura) e uno o più database secondari che possono ricevere solo transazioni. Se il database primario fallisce, uno dei secondari viene promosso a primario. Tuttavia, dopo la promozione, gli amministratori devono ricreare manualmente gli elementi esterni al database, come i logins e i SQL Server Agent jobs.
-
Log Shipping: Un metodo che utilizza backup e operazioni di ripristino per creare e aggiornare copie secondarie di un database SQL. Eseguendo backup regolari del database primario e ripristinando i dati su server secondari, questa soluzione consente di mantenere database ridondanti da usare in caso di guasto. Come per gli Availability Groups, anche il Log Shipping protegge solo il database, ma non gli altri elementi come SQL Server Agent jobs.
Per le implementazioni PaaS (Platform as a Service) in Azure SQL Database e Azure SQL Managed Instance, le soluzioni HA/DR sono integrate e generalmente non richiedono interventi amministrativi. Azure SQL Database, ad esempio, include un accordo di livello di servizio che garantisce il 99,99% di disponibilità del database. In caso di guasto di un nodo Azure, il processo di failover avviene in modo immediato e automatico, creando un nuovo nodo e collegandolo al sistema di archiviazione contenente il database. Le transazioni in corso al momento del guasto vengono solitamente perse, ma molte applicazioni che utilizzano database implementano logiche di retry per ripetere tali transazioni.
Azure SQL Database e Azure SQL Managed Instance includono anche la funzionalità Accelerated Database Recovery (ADR), che consente rollback immediati delle transazioni, troncamento dei log delle transazioni e un rapido recupero del database. Inoltre, è possibile creare repliche di lettura dei database e memorizzarle in diverse regioni geografiche, garantendo capacità HA/DR anche in caso di interruzioni su larga scala in una regione.
In un’architettura ibrida, che combina server SQL in locale con macchine virtuali Azure che eseguono SQL Server, Azure può offrire soluzioni di alta disponibilità o recupero di emergenza per supportare una resilienza ottimale. Ad esempio, un server SQL ridondante in cloud può fungere da server di failover o bilanciamento del carico in caso di guasti ai server locali. Azure consente anche di replicare i dati da un server locale a una Managed Instance in cloud, sebbene la replica avvenga in una sola direzione.
Le soluzioni specifiche di HA/DR per Azure offrono un ampio ventaglio di possibilità per le aziende che necessitano di soluzioni scalabili e robuste, ma la scelta della soluzione più adeguata dipende sempre dalla valutazione di fattori economici e operativi, inclusi i rischi accettabili e le risorse disponibili per implementare tali tecnologie.
Come utilizzare le dichiarazioni FORMAT in Fortran per gestire l'input e l'output dei dati numerici e dei caratteri
Come la corrosione minaccia l’industria del petrolio e del gas e quali strategie adottare per contrastarla
Come funziona la separazione tramite nastro idraulico e jigging nei rifiuti da costruzione e demolizione?
Quali sono gli errori sistematici nei processi di misura e come influenzano la precisione dei risultati?

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский