Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: SQL Server 2022 (16.x) e versioni successive
Database SQL di Azure
Istanza gestita di SQL di Azure
Le tabelle ledger aggiornabili sono tabelle con controllo delle versioni gestito dal sistema sulle quali gli utenti possono eseguire operazioni di aggiornamento ed eliminazione, offrendo al tempo stesso funzionalità che consentono di rilevare eventuali manomissioni. 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.
Sia le tabelle ledger aggiornabili sia le tabelle temporali sono tabelle con controllo delle versioni di sistema, per le quali il motore del database acquisisce le versioni cronologiche delle righe nelle 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.
È possibile creare una tabella libro mastro aggiornabile specificando l'argomento nell'istruzione LEDGER = ONCREATE 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 nell'istruzione LEDGER T-SQL, vedere CREATE TABLE (Transact-SQL).
Importante
Una volta creata una tabella mastro, non può essere riconvertita in una tabella che non è una 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 necessarie GENERATED ALWAYS della tabella libro mastro e della tabella di cronologia libro mastro nell' CREATE TABLE istruzione (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 predefinito della colonna | Tipo di dati | Descrizione |
|---|---|---|
| ledger_start_transaction_id | bigint | L'ID della transazione che ha creato una versione di riga |
| libro_mastro_fine_id_transazione | bigint | L'identificativo della transazione che ha eliminato una versione di una riga |
| registro_numero_sequenza_iniziale | bigint | Il numero di sequenza di un'operazione all'interno di una transazione che ha generato 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. La struttura della tabella di cronologia rispecchia quella della tabella ledger aggiornabile a cui è associata.
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 ledger è un'unione della tabella ledger aggiornabile e della relativa 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 vista del registro
Nota
I nomi delle colonne della vista libro mastro possono essere personalizzati quando si crea la tabella usando il <ledger_view_option> parametro con l'istruzione CREATE TABLE (Transact-SQL). Per altre informazioni, vedere Opzioni di visualizzazione libro mastro e gli esempi corrispondenti in CREATE TABLE (Transact-SQL).
| Nome predefinito della colonna | Tipo di dati | Descrizione |
|---|---|---|
| ledger_transaction_id | bigint | L'ID della transazione che ha creato o eliminato una versione di riga. |
| numero_sequenza_libro_mastro | 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. |