Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2016 (13.x) e versões
posteriores Banco de Dados SQL do Azure
Instância Gerenciada de SQL do Azure
SQL database in Microsoft Fabric
Ao trabalhar com tabelas temporais, esteja ciente das seguintes considerações e limitações devido à natureza da versionamento do sistema:
Uma tabela temporal deve ter uma chave primária definida para correlacionar os registros entre a tabela atual e a tabela de histórico. A tabela de histórico não pode ter uma chave primária definida.
As colunas de período
SYSTEM_TIMEusadas para registrar os valoresValidFromeValidTodevem ser definidas com um tipo de dados de datetime2.A sintaxe temporal funciona em tabelas ou exibições armazenadas localmente no banco de dados. Com objetos remotos, como tabelas em um servidor vinculado ou tabelas externas, você não pode usar a cláusula
FORou predicados de período diretamente na consulta.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.
Por padrão, a tabela de histórico fica
PAGEcompactada.Se a tabela atual for particionada, a tabela de histórico é criada no grupo de arquivos padrão porque a configuração de particionamento não é replicada automaticamente da tabela atual para a tabela de histórico.
As tabelas temporais e de histórico não podem usar FileTable ou 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.
Embora as tabelas temporais ofereçam suporte a tipos de dados de blobs, como (n)varchar(max), varbinary(max), (n)text e image, elas gerarão custos significativos de armazenamento e terão implicações de desempenho devido a seu tamanho. Ao projetar seu sistema, tenha cuidado ao usar esses tipos de dados.
A tabela de histórico deve ser criada no mesmo banco de dados da tabela atual. Não há suporte para consultas temporais em servidores vinculados.
A tabela de histórico não pode ter restrições (restrições de chave primária, chave estrangeira, tabela ou coluna).
Exibições indexadas não têm suporte em consultas temporais (consultas que usam a cláusula
FOR SYSTEM_TIME).A opção online (
WITH (ONLINE = ON) não tem efeito sobreALTER TABLE ALTER COLUMNem uma tabela temporal versionada pelo sistema. A colunaALTERnão é executada como uma operação online, independentemente de qual valor foi especificado para a opçãoONLINE.As instruções
INSERTeUPDATEnão podem fazer referência às colunas de períodoSYSTEM_TIME. As tentativas de inserir valores diretamente nessas colunas são bloqueadas.TRUNCATE TABLEnão tem suporte enquantoSYSTEM_VERSIONINGéON.Não é permitida a modificação direta dos dados em uma tabela de histórico.
Para evitar comprometer a lógica da linguagem de manipulação de dados (DML), gatilhos
INSTEAD OFnão são permitidos nem na tabela atual nem na tabela de histórico. Só é permitido usar os gatilhosAFTERna tabela atual. Esses gatilhos são bloqueados na tabela de histórico para evitar a anulação da lógica de DML.O uso de tecnologias de replicação é limitado:
Grupos de disponibilidade: Totalmente suportados
Captura de dados e acompanhamento de alterações: suportado apenas na tabela atual
Instantâneo e replicação transacional: com suporte apenas para um único editor sem o temporal habilitado e um assinante com o temporal habilitado. Não há suporte ao uso de vários assinantes devido a uma dependência do relógio do sistema local, o que poderia levar a dados temporais inconsistentes. Neste caso, o publicador é usado para uma carga de trabalho de processamento de transações online (OLTP), enquanto o assinante serve para descarregar a geração de relatórios (incluindo consultas
AS OF). Quando o agente de distribuição inicia, ele abre uma transação que permanece aberta até que o agente de distribuição pare.ValidFromeValidTosão preenchidos até o início da primeira transação iniciada pelo agente de distribuição. Talvez seja preferível executar o agente de distribuição conforme uma agenda, em vez de usar o comportamento padrão de executá-lo continuamente, se terValidFromeValidTopreenchidos com um horário próximo ao horário atual do sistema for importante para seu aplicativo ou organização. Para saber mais, consulte Cenários de uso de tabela temporal.Replicação de merge: Não suportada para tabelas temporais
As consultas comuns afetam somente os dados na tabela atual. Para consultar os dados na tabela de histórico, você deverá usar consultas temporais. Para obter mais informações, consulte Consultar dados em uma tabela temporal com versão controlada pelo sistema.
Uma estratégia de indexação ideal inclui um índice columnstore clusterizado ou um índice rowstore B-tree na tabela atual e um índice columnstore clusterizado na tabela de histórico, para otimizar o tamanho e o desempenho do armazenamento. Se você criar ou usar sua própria tabela de histórico, crie este tipo de índice composto por colunas de período começando pela coluna de fim de período. Esse índice acelera as consultas temporais e as consultas que fazem parte da verificação de consistência dos dados. A tabela de histórico padrão cria um índice rowstore clusterizado com base nas colunas do período (fim, início). No mínimo, use um índice rowstore não clusterizado.
Os seguintes objetos/propriedades não serão replicados da tabela atual para a tabela de histórico quando a tabela de histórico for criada:
- Definição de período
- Definição de identidade
- Indexes
- Estatísticas
- Verificar restrições
- Gatilhos
- Configuração de particionamento
- Permissions
- Predicados de segurança em nível de linha
Você não pode configurar uma tabela de histórico como a tabela atual em uma cadeia de tabelas de histórico.
Note
A documentação usa o termo árvore B geralmente em referência a índices. Em índices de rowstore, o Mecanismo de Banco de Dados implementa uma árvore B+. Isso não se aplica a índices columnstore nem a índices em tabelas otimizadas para memória. Para obter mais informações, confira o Guia de arquitetura e design do índice do SQL Server e SQL do Azure.
Conteúdo relacionado
- Tabelas temporais
- Primeiros passos com tabelas temporais versionadas pelo sistema
- Verificações de consistência do sistema de tabela temporal
- Partição com tabelas temporais
- Segurança da tabela temporal
- Gerenciar a retenção de dados históricos em tabelas temporárias com versão do sistema
- Tabelas temporais versionadas pelo sistema com tabelas otimizadas para memória
- Exibições e funções de metadados de tabela temporal