Considerazioni e limitazioni relative al libro mastro
Si applica a: SQL Server 2022 (16.x) Database Azure SQL Istanza gestita di SQL di Azure
Esistono alcune considerazioni e limitazioni da tenere presenti quando si lavora con le tabelle del libro mastro, a causa della natura del controllo delle versioni di sistema e dei dati immutabili.
Considerazioni e limitazioni di carattere generale
Quando si usa il libro mastro, tenere presenti le considerazioni sotto riportate.
- Un database del libro mastro, ovvero un database con attiva la proprietà del libro mastro, non può essere convertito in un database normale, con la proprietà del libro mastro disattivata.
- La generazione automatica e l'archiviazione dei digest del database sono attualmente disponibili nel database SQL di Azure, ma non sono supportate in SQL Server.
- La gestione automatica del digest con tabelle del libro mastro tramite BLOB non modificabili di Archiviazione di Azure non offre agli utenti la possibilità di usare account di archiviazione con ridondanza locale.
- Quando viene creato un database del libro mastro, tutte le nuove tabelle create per impostazione predefinita (senza specificare la clausola
APPEND_ONLY = ON
) nel database saranno tabelle del libro mastro aggiornabili. Per creare tabelle del libro mastro di solo accodamento, usare la clausolaAPPEND_ONLY = ON
nelle istruzioni CREATE TABLE (Transact-SQL). - Una transazione può aggiornare fino a 200 tabelle del libro mastro.
Considerazioni e limitazioni relative alle tabelle del libro mastro
- Le tabelle esistenti in un database che non sono tabelle del libro mastro non possono essere convertite in tabelle del libro mastro. Per altre informazioni, vedere Eseguire la migrazione di dati da tabelle normali a tabelle del libro mastro.
- Dopo la creazione, una tabella del libro mastro non può essere ripristinata in una tabella non del tabella mastro.
- L'eliminazione di dati meno recenti nelle tabelle del libro mastro di solo accodamento o nella tabella di cronologia delle tabelle del libro mastro aggiornabili non è supportata.
TRUNCATE TABLE
non è supportata.- Quando viene creata una tabella del libro libro mastro aggiornabile, vengono aggiunte quattro colonne GENERATED ALWAYS alla tabella del libro mastro. Una tabella del libro mastro di solo accodamento aggiunge due colonne alla tabella del libro mastro. Queste nuove colonne vengono conteggiate rispetto al numero massimo supportato di colonne nel database SQL di Azure (1.024).
- Le tabelle in memoria non sono supportate.
- I set di colonne di tipo sparse non sono supportati.
- La partizione SWITCH IN/OUT non è supportata.
- DBCC CLONEDATABA non è supportato.
- Le tabelle del libro mastro non possono avere indici full-text.
- Le tabelle del libro mastro non possono essere tabelle grafo.
- Le tabelle del libro mastro non possono essere tabelle FileTable.
- Le tabelle del libro mastro non possono avere un indice rowstore non cluster quando hanno un indice columnstore cluster.
- Il rilevamento delle modifiche non è consentito nella tabella di cronologia, ma è consentito nelle tabelle del libro mastro.
- L’acquisizione dei dati non è consentita nella tabella di cronologia, ma è consentita nelle tabelle del libro mastro.
- La replica transazionale non è supportata per le tabelle del libro mastro.
- Il mirroring del database non è supportato.
- Il Collegamento a Synapse Azure è supportato, ma solo per la tabella del libro mastro e non per la tabella di cronologia.
- Modificare manualmente il percorso del digest dopo un ripristino nativo di un backup del database in un Istanza gestita di SQL di Azure.
- Modificare manualmente il percorso del digest dopo la creazione di un collegamento Istanza gestita a un Istanza gestita di SQL di Azure.
- La sincronizzazione dati SQL non è supportata con le tabelle del libro mastro.
Tipi di dati non supportati
- XML
- SqlVariant
- Tipo di dati definito dall'utente
- FILESTREAM
Limitazioni delle tabelle temporali
Le tabelle del libro mastro aggiornabili si basano sulla tecnologia delle tabelle temporali ed ereditano la maggior parte delle limitazioni, ma non tutte. Di seguito è riportato un elenco di limitazioni ereditate dalle tabelle temporali.
- Se durante la creazione della tabella di cronologia viene specificato il nome di una tabella di cronologia, è necessario specificare il nome tabella e il nome schema e anche il nome della visualizzazione del libro mastro.
- Per impostazione predefinita, la tabella di cronologia è PAGE compresso.
- Se la tabella corrente è partizionata, la tabella di cronologia viene creata nel gruppo di file predefinito perché la configurazione del partizionamento non viene replicata automaticamente dalla tabella corrente nella tabella di cronologia.
- Le tabelle temporali e di cronologia non possono essere FILETABLE e possono contenere colonne di qualsiasi tipo di dati supportato diverso da FILESTREAM. FILETABLE e FILESTREAM consentono la manipolazione dei dati all'esterno di SQL Server e pertanto il controllo delle versioni del sistema non può essere garantito.
- Non è possibile creare una tabella nodi o archi come tabella temporale o modificarla in tabella temporale. Graph non è supportato dal libro mastro.
- Mentre le tabelle temporali supportano i tipi di dati BLOB, come ad esempio
(n)varchar(max)
,varbinary(max)
,(n)text
eimage
, a causa delle loro dimensioni non si potranno evitare costi di archiviazione significativi e implicazioni sulle prestazioni. Di conseguenza, quando si progetta il sistema è importante prestare attenzione mentre si usano questi tipi di dati. - La tabella di cronologia deve essere creata nello stesso database della tabella corrente. L'esecuzione di query temporali su Linked Server non è supportata.
- La tabella di cronologia non può includere vincoli (chiave primaria, chiave esterna, vincoli di colonna o tabella).
- L'operazione online (
WITH (ONLINE = ON
) non influisce suALTER TABLE ALTER COLUMN
in caso di una tabella temporale con controllo delle versioni di sistema.ALTER COLUMN
non viene eseguita come operazione online, indipendentemente dal valore che è stato specificato per l'opzioneONLINE
. - Le istruzioni
INSERT
eUPDATE
non possono fare riferimento a colonne GENERATED ALWAYS. Eventuali tentativi di inserire valori direttamente in tali colonne verranno bloccati. UPDATETEXT
eWRITETEXT
non sono supportati.- I trigger nella tabella di cronologia non sono consentiti.
- L'utilizzo di tecnologie di replica è limitato:
- Always On: completamente supportato
- Snapshot, unione e replica transazionale: non supportati per le tabelle temporali
- Una tabella di cronologia non può essere configurata come tabella corrente in una catena di tabelle di cronologia.
- Le proprietà o gli oggetti seguenti non vengono replicati dalla tabella corrente alla tabella di cronologia quando si crea quest'ultima:
- Definizione di periodo
- Definizione di identità
- Indici
- Statistiche
- Controlla vincoli
- Trigger
- Configurazione del partizionamento
- Autorizzazioni
- Predicati di sicurezza a livello di riga
Considerazioni sulle modifiche dello schema
Aggiunta di colonne
L'aggiunta di colonne che ammettono i valori Null è supportata. L'aggiunta di colonne non ammettono i valori Null non è supportata. Il libro mastro è progettato per ignorare i valori NULL durante il calcolo dell'hash di una versione di riga. In base a questo, quando viene aggiunta una colonna che ammette i valori Null, il libro mastro modificherà lo schema delle tabelle del libro mastro e di cronologia in modo da includere la nuova colonna, ma ciò non influisce sugli hash delle righe esistenti. L'aggiunta di colonne nelle tabelle del libro mastro viene acquisita in sys.ledger_column_history.
Eliminazione di colonne e tabelle
In genere, l'eliminazione di una colonna o di una tabella cancella completamente i dati sottostanti dal database ed è fondamentalmente incompatibile con la funzionalità di libro mastro che richiede che i dati siano non modificabili. Anziché eliminare i dati, il libro mastro rinomina semplicemente gli oggetti eliminati in modo che vengano rimossi logicamente dallo schema utente, ma rimangono fisicamente nel database. Tutte le colonne eliminate vengono nascoste anche dallo schema della tabella del libro mastro, in modo che siano invisibili all'applicazione utente. Tuttavia, i dati di tali oggetti eliminati rimangono disponibili per il processo di verifica del libro mastro e consentono agli utenti di esaminare i dati storici tramite le visualizzazioni del libro mastro corrispondenti. L’eliminazione di colonne nelle tabelle del libro mastro viene acquisita in sys.ledger_column_history. L’eliminazione di una tabella del libro mastro viene acquisita in sys.ledger_table_history. L’eliminazione delle tabelle del libro mastro e dei relativi oggetti dipendenti viene contrassegnata come eliminata nelle viste del catalogo di sistema e rinominate:
- Le tabelle libro mastro eliminate vengono contrassegnate come eliminate impostando
is_dropped_ledger_table
in sys.tables e rinominate usando il formato seguente:MSSQL_DroppedLedgerTable_<dropped_ledger_table_name>_<GUID>
. - Le tabelle di cronologia eliminate per le tabelle del libro mastro aggiornabili vengono rinominate usando il formato seguente:
MSSQL_DroppedLedgerHistory_<dropped_history_table_name>_<GUID>
. - Le visualizzazioni del libro mastro eliminate vengono contrassegnate come eliminate impostando
is_dropped_ledger_view
in sys.views e vengono rinominate usando il formato seguente:MSSQL_DroppedLedgerView_<dropped_ledger_view_name>_<GUID>
.
Nota
Il nome delle tabelle del libro mastro, delle tabelle di cronologia e delle visualizzazioni del libro mastro eliminate potrebbe essere troncato se la lunghezza della tabella o della visualizzazione rinominata supera i 128 caratteri.
Modifica di colonne
Le modifiche che non influiscono sui dati sottostanti di una tabella del libro mastro sono supportate senza alcuna gestione speciale perché non influiscono sugli hash acquisiti nel libro mastro. Queste modifiche includono:
- Modifica dell'ammissione di valori Null
- Regole di confronto per stringhe Unicode
- Lunghezza delle colonne a lunghezza variabile
Tuttavia, tutte le operazioni che potrebbero influire sul formato dei dati esistenti, ad esempio la modifica del tipo di dati, non sono supportate.