Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2022 (16.x) e versões
posteriores Azure SQL Database
Azure SQL Managed Instance
Há algumas considerações e limitações a serem observadas ao trabalhar com tabelas contábeis devido à natureza do controle de versão do sistema e dos dados imutáveis.
Considerações gerais e limitações
Considere o seguinte ao trabalhar com o livro-razão.
- Uma base de dados de razão, com a propriedade de razão definida como ativa, não pode ser convertida em uma base de dados regular, com a propriedade de razão definida como inativa.
- A geração e o armazenamento automáticos de resumos de banco de dados estão atualmente disponíveis no Banco de Dados SQL do Azure, mas não têm suporte no SQL Server.
- O gerenciamento de resumo automatizado com tabelas contábeis usando blobs imutáveis do Armazenamento do Azure não oferece a capacidade de os usuários usarem contas LRS (armazenamento com redundância local).
- Quando um banco de dados contábil é criado, todas as novas tabelas criadas por padrão (sem especificar a
APPEND_ONLY = ONcláusula) no banco de dados serão tabelas contábeis atualizáveis. Para criar tabelas de ledger apenas para acréscimos, use a cláusulaAPPEND_ONLY = ONnas instruções CREATE TABLE (Transact-SQL). - Uma transação pode atualizar até 200 tabelas contábeis.
Considerações e limitações da tabela contábil
- As tabelas existentes em um banco de dados que não são tabelas contábeis não podem ser convertidas em tabelas contábeis. Para obter mais informações, consulte Migrar dados de tabelas regulares para tabelas contábeis.
- Depois que uma tabela contábil é criada, ela não pode ser revertida para uma tabela que não seja uma tabela contábil.
- Não há suporte para a exclusão de dados mais antigos em tabelas de registo somente acréscimo ou na tabela de histórico de tabelas de registo atualizáveis.
-
TRUNCATE TABLEnão é suportado. - Quando uma tabela contábil atualizável é criada, ela adiciona quatro colunas GERADAS SEMPRE à tabela contábil. Uma tabela contábil somente acréscimo adiciona duas colunas à tabela contábil. Essas novas colunas contam para o número máximo de colunas com suporte no Banco de Dados SQL do Azure (1.024).
- Não há suporte para tabelas na memória.
- Não há suporte para conjuntos de colunas esparsas.
- A partição SWITCH IN/OUT não é suportada.
- DBCC CLONEDATABASE não é suportado.
- As tabelas contábeis não podem ter índices de texto completo.
- As tabelas contábeis não podem ser tabelas gráficas.
- As tabelas contábeis não podem ser FileTables.
- As tabelas contábeis não podem ter um índice não clusterizado de armazenamento de linhas quando têm um índice de armazenamento de colunas clusterizado.
- O controle de alterações não é permitido na tabela de histórico, mas é permitido em tabelas contábeis.
- A captura de dados de alteração não é permitida na tabela de histórico, mas é permitida em tabelas contábeis.
- A replicação transacional não é suportada para tabelas contábeis.
- Não há suporte para espelhamento de banco de dados.
- O Azure Synapse Link é suportado, mas apenas para a tabela contábil, não para a tabela de histórico.
- Altere o caminho do sumário manualmente após restaurar nativamente um backup de banco de dados numa Instância Gerida do Azure SQL.
- Altere o caminho de digestão manualmente após a criação de um link de uma Instância Gerenciada para uma Instância SQL Gerenciada do Azure.
- A Sincronização de Dados SQL não é suportada com tabelas contábeis.
Tipos de dados não suportados
- XML
- SqlVariant
- Tipo de dados definido pelo usuário
- FLUXO DE ARQUIVOS
- Vetor
Limitações da tabela temporal
As tabelas contábeis atualizáveis são baseadas na tecnologia de tabelas temporais e herdam a maioria das limitações , mas não todas. Abaixo está uma lista de limitações que é herdada de tabelas temporais.
- Se o nome de uma tabela de histórico for especificado durante a criação da tabela de histórico, você deverá especificar o esquema e o nome da tabela e também o nome da exibição contábil.
- Por padrão, a tabela de histórico está compactada em PAGE.
- Se a tabela atual for particionada, a tabela de histórico será criada no grupo de arquivos padrão porque a configuração de particionamento não será replicada automaticamente da tabela atual para a tabela de histórico.
- As tabelas temporais e de histórico não podem ser um FILETABLE e podem conter colunas de qualquer tipo de dados suportado, exceto FILESTREAM. FILETABLE e FILESTREAM permitem a manipulação de dados fora do SQL Server e, portanto, o controle de versão do sistema não pode ser garantido.
- Uma tabela de nó ou borda não pode ser criada como ou alterada para uma tabela temporal. O gráfico não é suportado no livro-razão.
- Embora as tabelas temporais ofereçam suporte a tipos de dados de blob, como
(n)varchar(max),varbinary(max),(n)texteimage, elas incorrerão em custos de armazenamento significativos e terão implicações de desempenho devido ao seu tamanho. Como tal, ao projetar seu sistema, deve-se ter cuidado ao usar esses tipos de dados. - A tabela de histórico deve ser criada no mesmo banco de dados que a tabela atual. Não há suporte para consultas temporais no Servidor Vinculado.
- A tabela de histórico não pode ter restrições (restrições de Chave Primária, Chave Estrangeira, tabela ou coluna).
- A opção online (
WITH (ONLINE = ON) não tem qualquer efeito sobreALTER TABLE ALTER COLUMNno caso de uma tabela temporal versionada pelo sistema.ALTER COLUMNnão é executado online, independentemente do valor que foi especificado para a opçãoONLINE. -
INSERTeUPDATEnão podem referenciar a coluna GENERADA SEMPRE. As tentativas de inserir valores diretamente nessas colunas serão bloqueadas. -
UPDATETEXTeWRITETEXTnão são suportados. - Gatilhos na tabela de histórico não são permitidos.
- O uso de tecnologias de replicação é limitado:
- Always On: Totalmente suportado
- Replicação instantânea, mesclagem e transacional: não há suporte para tabelas temporais
- Uma tabela de histórico não pode ser configurada como tabela atual em uma cadeia de tabelas de histórico.
- Os seguintes objetos ou propriedades não são replicados da tabela atual para a tabela de histórico quando a tabela de histórico é criada:
- Definição do período
- Definição de identidade
- Índices
- Estatísticas
- Verificar restrições
- Acionadores
- Configuração de particionamento
- Permissões
- Predicados de segurança em nível de linha
Consideração das alterações no esquema
Adicionar colunas
A adição de colunas anuláveis é suportada. Não há suporte para a adição de colunas não anuláveis. O Ledger foi projetado para ignorar valores NULL ao calcular o hash de uma versão de linha. Com base nisso, quando uma coluna anulável é adicionada, o razão modificará o esquema das tabelas de razão e histórico para incluir a nova coluna, no entanto, isso não afeta os hashes das linhas existentes. A adição de colunas em tabelas contábeis é capturada em sys.ledger_column_history.
Descartando colunas e tabelas
Normalmente, eliminar uma coluna ou tabela apaga completamente os dados subjacentes do banco de dados e é fundamentalmente incompatível com a funcionalidade do livro-razão, que requer que os dados sejam imutáveis. Em vez de excluir os dados, o ledger simplesmente renomeia os objetos a serem eliminados, de modo que sejam removidos de forma lógica do esquema do utilizador, mas continuem fisicamente presentes no banco de dados. Todas as colunas removidas ficam também ocultas no esquema da tabela de registo, para que se tornem invisíveis para a aplicação do utilizador. No entanto, os dados desses objetos descartados permanecem disponíveis para o processo de verificação do livro-razão e permitem que os usuários inspecionem quaisquer dados históricos por meio das visualizações do livro-razão correspondentes. A eliminação de colunas em tabelas contabilísticas é capturada em sys.ledger_column_history. Eliminar uma tabela contábil é registado em sys.ledger_table_history. As tabelas contábeis descartadas e seus objetos dependentes são marcadas como descartadas nas exibições do catálogo do sistema e renomeadas:
- As tabelas contábeis descartadas são marcadas como descartadas pela configuração
is_dropped_ledger_tableem sys.tables e renomeadas usando o seguinte formato:MSSQL_DroppedLedgerTable_<dropped_ledger_table_name>_<GUID>. - As tabelas de histórico descartadas para tabelas contábeis atualizáveis são renomeadas usando o seguinte formato:
MSSQL_DroppedLedgerHistory_<dropped_history_table_name>_<GUID>. - As visualizações contábeis descartadas são marcadas como descartadas pela configuração
is_dropped_ledger_viewem sys.views e renomeadas usando o seguinte formato:MSSQL_DroppedLedgerView_<dropped_ledger_view_name>_<GUID>.
Observação
O nome de tabelas contábeis descartadas, tabelas de histórico e exibições contábeis pode ser truncado se o comprimento da tabela ou exibição renomeada exceder 128 caracteres.
Alterando colunas
Quaisquer alterações que não afetem os dados subjacentes de uma tabela contábil são suportadas sem qualquer tratamento especial, pois não afetam os hashes capturados no livro-razão. Estas alterações incluem:
- Alterando a nulidade
- Agrupamento para cadeias de caracteres Unicode
- O comprimento das colunas de comprimento variável
No entanto, não há suporte para quaisquer operações que possam afetar o formato dos dados existentes, como alterar o tipo de dados.