Tabelas do razão atualizáveis

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 atualizáveis são tabelas com um controle de versão do sistema nas quais os usuários podem executar atualizações e exclusões, fornecendo também funcionalidades de evidência de adulteração. Quando ocorrem atualizações ou exclusões, todas as versões anteriores de uma linha são preservadas em uma tabela secundária, conhecida como a tabela de histórico. A tabela de histórico espelha o esquema da tabela do razão atualizável. Quando uma linha é atualizada, a última versão da linha permanece na tabela do razão, enquanto a versão anterior é inserida na tabela de histórico pelo sistema, de modo transparente para o aplicativo.

As tabelas do razão e as tabelas temporais atualizáveis são tabelas com controle de versão do sistema, para as quais o mecanismo de banco de dados captura versões de linha históricas em tabelas de histórico secundárias. Qualquer uma dessas tecnologias oferece benefícios exclusivos. As tabelas do razão atualizáveis tornam os dados atuais e históricos evidentes para adulterações. As tabelas temporais dão suporte à consulta dos dados armazenados em qualquer ponto no tempo, em vez de apenas os dados corretos no momento. Você pode usar as duas tecnologias juntas criando tabelas que sejam tabelas do razão atualizáveis e tabelas temporais.

Diagram that shows ledger table architecture.

Você pode criar uma tabela do razão atualizável especificando o argumento LEDGER = ON na instrução CREATE DATABASE (Transact-SQL).

Dica

LEDGER = ON é opcional ao criar tabelas de razão atualizáveis em um banco de dados do razão. Por padrão, cada tabela é uma tabela do razão atualizável em um banco de dados do razão.

Para obter informações sobre as opções disponíveis ao especificar o argumento LEDGER na instrução T-SQL, confira CREATE TABLE (Transact-SQL).

Importante

Depois que uma tabela do razão é criada, ela não pode ser revertida para uma tabela que não seja uma tabela do razão. Assim, um invasor não pode remover temporariamente as funcionalidades do razão em uma tabela do razão, fazer alterações e habilitar novamente a funcionalidade do razão.

Esquema da tabela do razão atualizável

Uma tabela do razão atualizável precisa ter as colunas GENERATED ALWAYS a seguir que contenham 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. 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 colunas GENERATED ALWAYS obrigatórias da tabela do razão e da tabela de histórico do razão na instrução CREATE TABLE (Transact-SQL), o sistema adicionará automaticamente as colunas e usará os nomes padrão a seguir. Para obter mais informações, confira os exemplos de Como criar uma tabela do razão atualizável.

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_end_transaction_id BIGINT A ID da transação que excluiu 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
ledger_end_sequence_number BIGINT O número de sequência de uma operação dentro de uma transação que excluiu uma versão de linha

Tabela de histórico

A tabela de histórico é criada automaticamente quando uma tabela do razão atualizável é criada. A tabela de histórico captura os valores históricos das linhas alteradas devido a atualizações e exclusões na tabela do razão atualizável. O esquema da tabela de histórico espelha o da tabela do razão atualizável ao qual ela está associada.

Ao criar uma tabela do razão atualizável, você pode especificar o nome do esquema para conter a tabela de histórico e o nome da tabela de histórico ou fazer com que o sistema gere o nome da tabela de histórico e adicioná-lo ao mesmo esquema da tabela do razão. Tabelas de histórico com nomes gerados pelo sistema são chamadas de tabelas de histórico anônimas. A convenção de nomenclatura para uma tabela de histórico anônima é <schema>.<updatableledgertablename>.MSSQL_LedgerHistoryFor_<GUID>.

Exibição do razão

Para cada tabela do razão atualizável, o sistema gera automaticamente uma exibição, chamada de exibição do razão. A exibição do razão é uma junção da tabela do razão atualizável e da respectiva tabela de histórico associada. Ela relata todas as modificações de linha ocorridas na tabela do razão atualizável pela junção dos dados históricos na tabela de histórico. Essa exibição permite que os usuários, os parceiros deles ou os auditores analisem todas as operações históricas e detectem possíveis adulterações. Cada operação de linha é acompanhada pela ID da transação ativa, junto com a indicação de se a operação foi uma DELETE ou uma INSERT. Os usuários podem recuperar mais informações sobre a hora em que a transação foi executada e a identidade do usuário que a executou e correlacioná-la a outras operações executadas por essa transação.

Por exemplo, se você quiser acompanhar o histórico de transações para um cenário bancário, a exibição do razão apresentará uma crônica de transações ao longo do tempo. Usando o modo de exibição do razão, você não precisa exibir de modo independente as tabelas de histórico e tabela do razão atualizáveis nem criar sua exibição para fazer isso.

Para obter um exemplo de como usar o modo de exibição do razão, confira Criar e usar tabelas do razão atualizáveis.

O esquema da exibição do razão espelha as colunas definidas na tabela de histórico e do razão atualizável, mas as colunas GENERATED ALWAYS são diferentes daquelas das tabelas de histórico e do razão atualizáveis.

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.
ledger_operation_type_desc nvarchar(128) Contém INSERT ou DELETE. Para saber mais, confira a linha anterior.