Tabelas do razão somente de acréscimo

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

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.

Diagram that shows architecture of ledger tables.

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 do razão, ela não pode ser revertida para uma tabela que não tenha a funcionalidade do razão. Assim, um invasor não pode remover temporariamente as funcionalidades do razão, fazer alterações à tabela e habilitar novamente a funcionalidade do razão.

Esquema de tabelas razão somente de acréscimo

Uma tabela somente de acréscimo precisa ter as seguintes colunas SEMPRE GERADAS, que contêm metadados indicando quais transações fizeram alterações na tabela, e a ordem das operações executadas nas linhas 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 instrução CREATE TABLE, 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, confira Opções de exibição do razão 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 contém 1 (INSERT) nessa coluna. Um DELETE não deve ocorrer em uma tabela razão somente de acréscimo.
ledger_operation_type_desc nvarchar(128) Contém INSERT ou DELETE. Para saber mais, confira a linha anterior.