Considerações e limitações do razão

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

Há algumas considerações e limitações a serem consideradas ao trabalhar com tabelas do razão, devido à natureza do controle de versão do sistema e aos dados imutáveis.

Considerações e limitações gerais

Considere as informações abaixo ao trabalhar com o razão.

Considerações e limitações da tabela do razão

  • As tabelas existentes em um banco de dados que não do razão não podem ser convertidas em tabelas do razão. Para obter mais informações, confira Migrar dados de tabelas regulares para tabelas do razão.
  • 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.
  • Não há suporte para a exclusão de dados mais antigos em tabelas do razão somente de anexação ou da tabela de histórico em tabelas atualizáveis do razão.
  • Não há suporte para TRUNCATE TABLE.
  • Quando uma tabela atualizável do razão é criada, são adicionadas a ela quatro colunas GENERATED ALWAYS. Uma tabela do razão somente de anexação tem duas colunas adicionadas nela. Essas novas colunas contam em relação ao 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.
  • Não há suporte para a partição SWITCH IN/OUT.
  • DBCC CLONEDATABASE não é suportado.
  • Elas não podem ter índices de texto completo.
  • As tabelas do razão não podem ser tabelas de grafo.
  • As tabelas do razão não podem ser FileTable.
  • As tabelas do razão não podem ter um índice rowstore não clusterizado quando têm um índice columnstore clusterizado.
  • O controle de alterações não é permitido na tabela de histórico, mas é permitido nas tabelas do razão.
  • A captura de dados de alterações não é permitida na tabela de histórico, mas é permitida nas tabelas do razão.
  • A replicação transacional não tem suporte para tabelas do razão.
  • Não há suporte para espelhamento de banco de dados.
  • O Link Azure Synapse tem suporte, mas apenas para a tabela do razão, não para a tabela de histórico.
  • Altere o caminho de hash manualmente após uma restauração nativa de um backup de banco de dados para uma instância gerenciada de SQL do Azure.
  • Altere o caminho de resumo manualmente depois que um link de Instância Gerenciada foi criado para uma Instância Gerenciada SQL do Azure.
  • A Sincronização de Dados SQL não é compatível com tabelas razão.

Tipos de dados sem suporte

  • XML
  • SqlVariant
  • Tipo de dados definido pelo usuário
  • FILESTREAM

Limitações das tabelas temporais

Tabelas do razão 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 herdadas das tabelas temporais.

  • Se o nome de uma tabela de histórico estiver especificado durante a criação da tabela de histórico, você deverá especificar o nome do esquema e da tabela, além do nome da exibição do razão.
  • Por padrão, a tabela de histórico é PAGE compactado.
  • Se a tabela atual estiver particionada, a tabela de histórico será criada no grupo de arquivo 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 poderão ser FILETABLE e poderão conter colunas de qualquer tipo de dados compatível que não seja 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 Graph não tem suporte com o razão.
  • Embora as tabelas temporais deem suporte a tipos de dados de blobs, como (n)varchar(max), varbinary(max), (n)text e image, elas incorrerão em custos significativos de armazenamento e terão implicações de desempenho devido a seu tamanho. Assim, ao criar seu sistema, tome cuidado ao usar esses tipos de dados.
  • A tabela de histórico deve ser criada no mesmo banco de dados da tabela atual. As consultas temporais no Servidor vinculado não têm suporte.
  • A tabela de histórico não pode ter restrições (chave primária, chave estrangeira, tabela ou coluna).
  • A opção online (WITH (ONLINE = ON) não tem nenhum efeito em ALTER TABLE ALTER COLUMN no caso de tabela temporal com versão do sistema. ALTER COLUMN não é executada online, independentemente de qual valor tenha sido especificado para a opção ONLINE.
  • As instruções INSERT e UPDATE não podem fazer referência às colunas GENERATED ALWAYS. As tentativas de inserir valores diretamente nessas colunas serão bloqueadas.
  • UPDATETEXT e WRITETEXT não são suportados.
  • Não são permitidos gatilhos na tabela de histórico.
  • O uso de tecnologias de replicação é limitado:
    • Sempre ativo: com suporte total
    • Instantâneo, mesclagem e replicação 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 serão replicados da tabela atual para a tabela de histórico quando esta for criada:
    • Definição de período
    • Definição de identidade
    • Índices
    • Estatísticas
    • Verificar restrições
    • Gatilhos
    • Configuração de particionamento
    • Permissões
    • Predicados de segurança em nível de linha

Consideração sobre alterações de esquema

Adicionar colunas

Há suporte para adicionar colunas anuláveis. Não há suporte para a adição de colunas não anuláveis. O razão 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 histórico e do razão para incluir a nova coluna. No entanto, isso não afetará os hashes das linhas existentes. A adição de colunas em tabelas do razão é capturada em sys.ledger_column_history.

Remoção de colunas e tabelas

Normalmente, a remoção de uma coluna ou tabela apaga por completo os dados subjacentes do banco de dados e é fundamentalmente incompatível com a funcionalidade do razão que exige que os dados sejam imutáveis. Em vez de excluir os dados, o razão simplesmente renomeia os objetos sendo removidos para que isso ocorra de maneira lógica no esquema do usuário, mas permaneçam fisicamente no banco de dados. Todas as colunas removidas também ficam ocultas no esquema da tabela do razão, ficando invisíveis para o aplicativo do usuário. No entanto, os dados desses objetos removidos permanecem disponíveis para o processo de verificação do razão e permitem que os usuários inspecionem os dados históricos por meio das exibições correspondentes do razão. A remoção de colunas em tabelas do razão é capturada em sys.ledger_column_history. A remoção de uma tabela do razão é capturada em sys.ledger_table_history. As tabelas do razão removidas e os respectivos objetos dependentes são marcadas como removidas nas exibições do catálogo do sistema e renomeadas:

  • As tabelas do razão removidas são marcadas como tal pela configuração is_dropped_ledger_table em sys.tables e renomeadas usando o seguinte formato: MSSQL_DroppedLedgerTable_<dropped_ledger_table_name>_<GUID>.
  • As tabelas de histórico removidas nas tabelas do razão atualizáveis são renomeadas usando o seguinte formato: MSSQL_DroppedLedgerHistory_<dropped_history_table_name>_<GUID>.
  • As exibições do razão removidas são marcadas como tal pela configuração is_dropped_ledger_view em 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 de razão pode ser truncado se o comprimento da tabela ou exibição renomeada exceder 128 caracteres.

Alteração de colunas

Todas as alterações que não afetam os dados subjacentes de uma tabela do razão têm suporte sem necessidade de tratamento especial, pois elas não afetam os hashes capturados no razão. Essas alterações incluem:

  • Alteração de nulidade
  • Ordenação de cadeias de caracteres Unicode
  • O comprimento das colunas de comprimento variável

No entanto, não há suporte para operações que possam afetar o formato dos dados existentes, como a alteração do tipo de dados.