Tabelle del libro mastro aggiornabili

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

Le tabelle del libro mastro aggiornabili sono tabelle con controllo delle versioni di sistema in cui gli utenti possono eseguire aggiornamenti ed eliminazioni, fornendo al tempo stesso funzionalità di prova delle manomissione. Quando si verificano aggiornamenti o eliminazioni, tutte le versioni precedenti di una riga vengono mantenute in una tabella secondaria, nota come tabella della cronologia. La tabella della cronologia rispecchia lo schema della tabella del libro mastro aggiornabile. Quando una riga viene aggiornata, la versione più recente della riga rimane nella tabella del libro mastro, mentre la versione precedente viene inserita nella tabella della cronologia dal sistema, in modo trasparente nell'applicazione.

Le tabelle del libro mastro aggiornabili e le tabelle temporali sono tabelle con controllo delle versioni di sistema per le quali il motore di database acquisisce le versioni di cronologia delle righe in tabelle di cronologia secondarie. Entrambe le tecnologie offrono vantaggi unici. Le tabelle del libro mastro aggiornabili mettono in luce la manomissione dei dati storici e correnti. Le tabelle temporali supportano l'esecuzione di query sui dati archiviati in qualsiasi momento anziché solo i dati corretti nel momento corrente. È possibile usare entrambe le tecnologie insieme creando tabelle che siano tabelle del libro mastro aggiornabili e tabelle temporali.

Diagramma che mostra l'architettura delle tabelle del libro mastro.

È possibile creare una tabella del libro mastro aggiornabile specificando l'argomento LEDGER = ON nell'istruzione CREATE DATABASE (Transact-SQL).

Suggerimento

LEDGER = ON è facoltativo quando si creano tabelle del libro mastro aggiornabili in un database del libro mastro. Per impostazione predefinita, ogni tabella è una tabella del libro mastro aggiornabile in un database del libro mastro.

Per informazioni sulle opzioni disponibili quando si specifica l'argomento LEDGER nell'istruzione T-SQL, vedere CREATE TABLE (Transact-SQL).

Importante

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

Schema della tabella del libro mastro aggiornabile

Una tabella del libro mastro aggiornabile 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. 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 colonne GENERATED ALWAYS necessarie della tabella del libro mastro e della tabella di cronologia del libro mastro nell'istruzione CREATE TABLE (Transact-SQL), il sistema aggiunge automaticamente le colonne e utilizza i nomi predefiniti seguenti. Per ulteriori informazioni, vedere Creazione di tabelle del libro mastro aggiornabili.

Nome colonna predefinito Tipo di dati Descrizione
ledger_start_transaction_id bigint L'ID della transazione che ha creato una versione della riga
ledger_end_transaction_id bigint L'ID della transazione che ha eliminato 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
ledger_end_sequence_number bigint Il numero di sequenza di un'operazione all'interno di una transazione che ha eliminato una versione della riga

Tabella di cronologia

La tabella di cronologia viene creata automaticamente quando viene creata una tabella del libro mastro aggiornabile. La tabella di cronologia acquisisce i valori storici delle righe modificate a causa di aggiornamenti ed eliminazioni nella tabella del libro mastro aggiornabile. Lo schema della tabella della cronologia rispecchia la tabella del libro mastro aggiornabile a cui è associato.

Quando si crea una tabella del libro mastro aggiornabile, è possibile specificare il nome dello schema per contenere la tabella di cronologia e il nome della tabella di cronologia oppure il sistema genera il nome della tabella di cronologia e lo agigunge allo stesso schema della tabella del libro mastro. Le tabelle di cronologia con nomi generati dal sistema sono denominate tabelle di cronologia anonime. La convenzione di denominazione per una tabella di cronologia anonima è <schema>.<updatableledgertablename>.MSSQL_LedgerHistoryFor_<GUID>.

Visualizzazione del libro mastro

Per ogni tabella del libro mastro aggiornabile, il sistema genera automaticamente una vista, denominata vista del libro mastro. La vista del libro mastro è un join della tabella del libro mastro aggiornabile e della tabella di cronologia associata. La vista del libro mastro segnala tutte le modifiche apportate alle righe nella tabella del libro mastro aggiornabile unendo i dati storici nella tabella di cronologia. Questa vista consente agli utenti, ai partner o ai revisori di analizzare tutte le operazioni passate e rilevare potenziali manomissioni. Ogni operazione di riga è accompagnata dall'ID della transazione in corso e specifica se l'operazione è DELETE o INSERT. Gli utenti possono riprendere altre informazioni sull'ora di esecuzione della transazione e sull'identità dell'utente che l'ha eseguita e correlarla ad altre operazioni eseguite da questa transazione.

Ad esempio, se si vuole tenere traccia della cronologia delle transazioni per uno scenario bancario, la vista del libro mastro fornisce una cronaca delle transazioni nel tempo. Usando la vista del libro mastro, non è necessario visualizzare in modo indipendente le tabelle del libro mastro aggiornabili e le tabelle di cronologia o creare una vista personalizzata per farlo.

Per un esempio di utilizzo della vista del libro mastro, vedere Creare e usare tabelle del libro mastro aggiornabili.

Lo schema della vista del libro mastro rispecchia le colonne definite nella tabella di cronologia e del libro mastro aggiornabile, ma le colonne GENERATED ALWAYS sono diverse da quelle del libro mastro e delle tabelle di cronologia aggiornabili.

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.
ledger_operation_type_desc nvarchar(128) Contiene INSERT o DELETE. Per ulteriori informazioni, consultare le righe precedenti.