Tabelle del libro mastro di solo accodamento

Si applica a: SQL Server 2022 (16.x) Database Azure SQLIstanza gestita di SQL di Azure

Le tabelle del libro mastro di solo accodamento consentono esclusivamente INSERT operazioni sulle tabelle, assicurandosi che gli utenti con privilegi, ad esempio gli amministratori di database, non possano modificare i dati tramite le tradizionali operazioni di Data Manipulation Language. Le tabelle del libro mastro di solo accodamento sono ideali per i sistemi che non aggiornano o eliminano record, ad esempio sistemi di gestione e eventi delle informazioni di sicurezza o sistemi blockchain in cui i dati devono essere replicati dalla blockchain a un database. Poiché non sono presenti UPDATE od operazioni DELETE in una tabella di solo accodamento, non è necessaria una tabella di cronologia corrispondente perché è presente con tabelle del libro mastro aggiornabili.

Diagram that shows architecture of ledger tables.

È possibile creare una tabella del libro mastro di solo accodamento specificando l'argomento LEDGER = ONnell'istruzione CREATE TABLE (Transact-SQL) e specificando l'opzione APPEND_ONLY = ON.

Importante

Dopo la creazione di una tabella come tabella del libro mastro, questa non può essere ripristinata in una tabella priva di funzionalità del libro mastro. Di conseguenza, un utente malintenzionato non può rimuovere temporaneamente le funzionalità del libro mastro, apportare modifiche alla tabella e quindi riabilitare la funzionalità del libro mastro.

Scema di tabelle del libro mastro di solo accodamento

Una tabella del libro mastro di solo accodamento deve avere le colonne GENERATED ALWAYS seguenti che contengono metadati che notavano quali transazioni hanno apportato modifiche alla tabella e l'ordine delle operazioni in base alle quali le righe sono state aggiornate dalla transazione. Quando si crea una tabella del libro mastro di solo accodamento, le colonne GENERATED ALWAYS verranno create nella tabella del libro mastro. Questi dati sono utili per scopi forensi, per comprendere il modo in cui i dati sono stati inseriti nel tempo.

Se non si specificano le definizioni delle colonne GENERATED ALWAYS nell'istruzione CREATE TABLE , il sistema le aggiunge automaticamente usando i seguenti nomi predefiniti.

Nome colonna predefinito Tipo di dati Descrizione
ledger_start_transaction_id bigint L'ID della transazione che ha creato una versione della riga
ledger_start_sequence_number bigint Il numero di sequenza di un'operazione all'interno di una transazione che ha creato una versione della riga

Visualizzazione del libro mastro

Per ogni tabella del libro mastro di solo accodamento, il sistema genera automaticamente una vista, denominata vista del libro mastro. La visualizzazione del libro mastro segnala tutti gli inserimenti di riga che si sono verificati nella tabella. La vistualizzazione del libro mastro è utile principalmente per le tabelle del libro mastro aggiornabili, anziché per le tabelle del libro mastro di solo accodamento, perché le tabelle del libro mastro di solo accodamento non dispongono di alcuna funzionalità UPDATE o DELETE. La visualizzazione del libro mastro per le tabelle del libro mastro di solo accodamento è disponibile per ragioni di coerenza tra le tabelle del libro mastro aggiornabili e di solo accodamento.

Schema della visualizzazione del libro mastro

Nota

I nomi delle colonne della visualizzazione del libro mastro possono essere personalizzati quando si crea la tabella usando il parametro <ledger_view_option> con l'istruzione CREATE TABLE (Transact-SQL). Per ulteriori informazioni, vedere le opzioni di visualizzazione del libro mastro e gli esempi corrispondenti in CREATE TABLE (Transact-SQL).

Nome colonna predefinito Tipo di dati Descrizione
ledger_transaction_id bigint L'ID della transazione che ha creato o eliminato una versione di riga.
ledger_sequence_number bigint Il numero di sequenza di un'operazione a livello di riga all'interno della transazione nella tabella.
ledger_operation_type tinyint Contiene 1 (INSERT) o 2 (DELETE). L'inserimento di una riga nella tabella del libro mastro genera una nuova riga nella vista del libro mastro contenente 1 in questa colonna. L'eliminazione di una riga dalla tabella del libro mastro genera una nuova riga nella vista del libro mastro contenente 2 in questa colonna. L'aggiornamento di una riga nella tabella di contabilità generale genera due righe nella vista di contabilità generale. Una riga contiene 2 (DELETE) e l'altra contiene 1 (INSERT) in questa colonna. Un'istruzione DELETE non deve verificarsi in una tabella del libro mastro di solo accodamento.
ledger_operation_type_desc nvarchar(128) Contiene INSERT o DELETE. Per altre informazioni, consultare la riga precedente.