Tabelas do razão somente de acréscimo

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores Banco de Dados SQL do AzureInstância Gerenciada do Azure SQL

As tabelas do razão somente acréscimo permitem somente operações INSERT em suas tabelas, o que garante que usuários privilegiados, como os administradores de banco de dados, não possam alterar dados por meio de operações tradicionais de linguagem de manipulação de dados. As tabelas razão somente de acréscimo são ideais para sistemas que não atualizam ou excluem registros, como os sistemas de gerenciamento de eventos e informações de segurança ou sistemas blockchain em que os dados precisam ser replicados do blockchain para um banco de dados. Como não há nenhuma operação UPDATE ou DELETE em uma tabela somente de acréscimo, não há necessidade de uma tabela de histórico correspondente, como acontece com as Tabelas razão que são atualizáveis.

Diagrama que mostra a arquitetura das tabelas do razão.

Você pode criar uma tabela de razão somente de acréscimo especificando o argumento LEDGER = ON na sua instrução CREATE TABLE (Transact-SQL) e especificando a opção APPEND_ONLY = ON.

Importante

Depois que uma tabela é criada como uma tabela de ledger, ela não pode ser convertida novamente em uma tabela sem funcionalidade de ledger. Como resultado, um invasor não pode remover temporariamente os recursos de ledger, fazer alterações na tabela e, em seguida, reativar a funcionalidade de ledger.

Esquema de tabelas razão somente de acréscimo

Uma tabela somente anexável precisa ter as seguintes colunas GENERATED ALWAYS que contêm metadados indicando quais transações fizeram alterações na tabela e a ordem das operações pelas quais as linhas foram atualizadas pela transação. Quando você cria uma tabela do razão somente de acréscimo, GENERATED ALWAYS colunas são criadas na tabela do razão. Esses dados são úteis para fins de análise forense no entendimento de como os dados foram inseridos ao longo do tempo.

Se você não especificar as definições das GENERATED ALWAYS colunas na CREATE TABLE instrução, o sistema as adicionará automaticamente usando os nomes padrão a seguir.

Nome da coluna padrão Tipo de dados Descrição
ledger_start_transaction_id bigint A ID da transação que criou uma versão de linha
ledger_start_sequence_number bigint O número de sequência de uma operação dentro de uma transação que criou uma versão de linha

Exibição do razão

Para cada tabela razão somente de acréscimo, o sistema gera automaticamente uma exibição chamada de exibição do razão. A exibição do razão relata todas as inserções de linha que ocorreram na tabela. A exibição do razão é útil principalmente para tabelas razão atualizáveis e não para tabelas razão somente de acréscimo, pois as tabelas razão somente de acréscimo não têm as funcionalidades UPDATE ou DELETE. A exibição do razão para tabelas razão somente de acréscimo está disponível para fazer a consistência entre as tabelas razão atualizáveis e as somente de acréscimo.

Esquema de exibição do razão

Observação

Os nomes da coluna de exibição do razão podem ser personalizados quando você cria a tabela usando o parâmetro <ledger_view_option> com a instrução CREATE TABLE (Transact-SQL). Para obter mais informações, consulte as opções de exibição do ledger e os exemplos correspondentes em CREATE TABLE (Transact-SQL).

Nome da coluna padrão Tipo de dados Descrição
ledger_transaction_id bigint A ID da transação que criou ou excluiu uma versão de linha.
ledger_sequence_number bigint O número de sequência de uma operação em nível de linha dentro da transação na tabela.
ledger_operation_type tinyint Contém 1 (INSERT) ou 2 (DELETE). A inserção de uma linha na tabela do razão produz uma nova linha na exibição do razão contendo 1 nessa coluna. A exclusão de uma linha da tabela do razão produz uma nova linha na exibição do razão contendo 2 nessa coluna. A atualização de uma linha na tabela do razão produz duas novas linhas na exibição do razão. Uma linha contém 2 (DELETE) e a outra linha contém 1 (INSERT) nesta coluna. Um DELETE não deve ocorrer em uma tabela de razão somente de acréscimo.
ledger_operation_type_desc nvarchar(128) Contém INSERT ou DELETE. Para saber mais, confira a linha anterior.