Considerações e limitações do razão
Aplica-se a: SQL Server 2022 (16.x) Banco de Dados SQL do Azure Instâ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.
- Um banco de dados do razão, um banco de dados com a propriedade LEDGER definida como ON, não pode ser convertido em um banco de dados regular, com a propriedade LEDGER definida como OFF.
- No momento, a geração automática e o armazenamento de resumos de banco de dados estão disponíveis no Banco de Dados SQL do Azure, mas não há suporte no SQL Server.
- O gerenciamento de resumo automatizado com tabelas do razão usando blobs imutáveis do Armazenamento do Azure não permite que os usuários usem contas LRS (armazenamento com redundância local).
- Quando um banco de dados do razão for criado, todas as tabelas criadas por padrão (sem especificar a cláusula
APPEND_ONLY = ON
) no banco de dados serão tabelas do razão atualizáveis. Para criar tabelas do razão somente de acréscimo, use a cláusulaAPPEND_ONLY = ON
nas instruções CREATE TABLE (Transact-SQL). - Uma transação pode atualizar até 200 tabelas do 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
eimage
, 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 emALTER 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çãoONLINE
. - As instruções
INSERT
eUPDATE
não podem fazer referência às colunas GENERATED ALWAYS. As tentativas de inserir valores diretamente nessas colunas serão bloqueadas. UPDATETEXT
eWRITETEXT
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.