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 2025 (17.x) e versões posteriores
No SQL Server 2022 (16.x) e versões mais antigas, se In-Memory OLTP estiver habilitado para um banco de dados, o último contêiner com otimização de memória e o grupo de arquivos com otimização de memória não poderão ser removidos mesmo se todos os objetos OLTP In-Memory forem removidos. Como resultado, o mecanismo OLTP In-Memory continua a ser executado quando não estiver em uso.
A partir do SQL Server 2025 (17.x), o mecanismo In-Memory OLTP pode ser interrompido removendo completamente todos os contêineres e grupos de arquivos com otimização de memória em bancos de dados sem objetos OLTP In-Memory restantes.
Para remover os contêineres e o grupo de arquivos com otimização de memória e parar o mecanismo OLTP In-Memory:
Como uma etapa de validação, conecte-se ao banco de dados e execute a seguinte consulta para confirmar se o mecanismo OLTP (XTP) In-Memory está implantado no banco de dados:
SELECT deployment_state, deployment_state_desc FROM sys.dm_db_xtp_undeploy_status;Se a
deployment_statecoluna for 1 ou 2, o mecanismo OLTP In-Memory será implantado e você poderá prosseguir com as etapas a seguir. Se adeployment_statecoluna for 0, o mecanismo In-Memory OLTP não será implantado no banco de dados atual ou já foi interrompido e o restante deste artigo não se aplicará.Exclua todos os objetos OLTP In-Memory no banco de dados, incluindo tabelas e tipos de tabela otimizados para memória e procedimentos armazenados compilados nativamente.
Cuidado
Essa etapa pode causar perda permanente de dados nas tabelas com otimização de memória no banco de dados atual. Antes de continuar, verifique se os dados não são necessários e faça um backup do banco de dados.
Para localizar In-Memory objetos OLTP em um banco de dados, execute as seguintes instruções T-SQL:
USE [<database-name-placeholder>]; /* memory-optimized tables */ SELECT object_id, OBJECT_SCHEMA_NAME(object_id) AS schema_name, name AS table_name FROM sys.tables WHERE is_memory_optimized = 1; /* natively compiled modules */ SELECT object_id, OBJECT_SCHEMA_NAME(object_id) AS schema_name, OBJECT_NAME(object_id) AS module_name FROM sys.all_sql_modules WHERE uses_native_compilation = 1; /* memory-optimized table types */ SELECT SCHEMA_NAME(schema_id) AS type_schema_name, name AS type_name, OBJECT_NAME(type_table_object_id) AS type_table_name FROM sys.table_types WHERE is_memory_optimized = 1;Para obter mais informações, consulte DROP TABLE, DROP PROCEDURE e DROP TYPE.
Remova todos os contêineres com otimização de memória usando a instrução
ALTER DATABASE ... REMOVE FILE. Para saber mais, confira Opções de arquivo e grupo de arquivos de ALTER DATABASE. Você também pode remover contêineres com otimização de memória usando a página Arquivos na caixa de diálogo Propriedades do Banco de Dados para seu banco de dados no SSMS (SQL Server Management Studio).A remoção do último contêiner com otimização de memória para o banco de dados inicia a remoção do mecanismo OLTP In-Memory. Essa é uma operação de execução prolongada que pode exigir etapas adicionais. Para obter mais informações, consulte Etapas para concluir a última remoção de contêiner com otimização de memória posteriormente neste artigo.
Se você cancelar ou interromper uma instrução de
ALTER DATABASE ... REMOVE FILEexecução prolongada ao remover o último contêiner otimizado para memória, a remoção poderá ser parcialmente concluída. Para concluir a remoção, você pode executar aALTER DATABASE ... REMOVE FILEinstrução mais tarde.Remova o grupo de arquivos com otimização de memória usando a
ALTER DATABASE ... REMOVE FILEGROUPinstrução ou usando a página Grupos de Arquivos na caixa de diálogo Propriedades do Banco de Dados no SSMS.
A remoção dos contêineres e do grupo de arquivos otimizados para memória é bem-sucedida, e o mecanismo OLTP In-Memory é interrompido quando o valor na coluna deployment_state em sys.dm_db_xtp_undeploy_status é 0.
Observação
Não há suporte para a remoção de contêiner com otimização de memória quando o banco de dados tem instantâneos de banco de dados. Solte todos os instantâneos antes de remover contêineres otimizados para memória.
Etapas para concluir a última remoção de contêiner com otimização de memória
Se a ALTER DATABASE ... REMOVE FILE instrução para remover o último contêiner com otimização de memória não for concluída imediatamente, serão necessárias etapas adicionais.
A DMV sys.dm_db_xtp_undeploy_status fornece o status do processo de remoção do mecanismo OLTP In-Memory. Nas etapas a seguir, use esta consulta para determinar o status atual e as ações necessárias:
SELECT deployment_state,
deployment_state_desc,
undeploy_lsn,
start_of_log_lsn
FROM sys.dm_db_xtp_undeploy_status;
Se o
deployment_statevalor for 3 e o valor naundeploy_lsncoluna for 0, execute o seguinte comando:CHECKPOINT;Se o
deployment_statevalor for 3 e o valor naundeploy_lsncoluna for diferente de 0, o processo de remoção do contêiner aguarda o LSN (número de sequência de log) nastart_of_log_lsncoluna para avançar além do valor LSN naundeploy_lsncoluna. Isso requer que o log de transações seja truncado. Para truncar o log:Execute o comando a seguir:
CHECKPOINT;Para avançar
start_of_log_lsnalémundeploy_lsn, talvez seja necessário executar esse comando várias vezes, aguardando um minuto após cada execução de comando.Se o banco de dados usar o modelo de recuperação full ou bulk-logged, além de executar os comandos, talvez seja necessário determinar e resolver o motivo do atraso no truncamento de log, que é relatado na coluna
CHECKPOINTda exibição de catálogolog_reuse_wait_desc.Se o valor
deployment_statepermanecer como 3 após executar osCHECKPOINTcomandos, execute a seguinte instrução:SELECT name, log_reuse_wait_desc FROM sys.databases WHERE database_id = DB_ID();Assim que souber o motivo do atraso no truncamento de log, consulte Fatores que podem atrasar o truncamento de log para mais informações e para determinar a ação apropriada.
Em bancos de dados ativos, o log de transações geralmente é truncado após algum tempo sem nenhuma ação adicional do usuário. Por exemplo, se
log_reuse_wait_descestiversys.databasesLOG_BACKUP, os backups de log agendados ou sob demanda truncarão o log. Para obter mais informações, consulte Fazer backup de um log de transações.Se o valor na
log_reuse_wait_desccoluna forNOTHING, mas o valor nadeployment_statecoluna permanecer 3, faça backup do log de transações. Para truncar o log de transações, talvez seja necessário realizar mais de um backup do log de transações.
Se o
deployment_statevalor for 4, o início da seção ativa do log de transações avançou além do LSN de desimplantação, e o processo de remoção do contêiner aguarda o registro de log de desimplantação final. Na maioria dos casos, essa etapa é concluída em alguns segundos sem nenhuma ação adicional.Se o banco de dados tiver réplicas de disponibilidade, o registro de desimplantação deverá se propagar e ser aplicado a todas as réplicas. Se o valor 4 persistir por um longo tempo, confira Determinar por que as alterações da réplica primária não são refletidas na réplica secundária de um grupo de disponibilidade Always On para obter mais informações.
Quando o valor
deployment_statefor 5, o processo de remoção do contêiner aguarda pela conclusão da operação final de ponto de verificação XTP. Para iniciar um ponto de verificação imediatamente, execute o seguinte comando:CHECKPOINT;Um ponto de verificação XTP ocorre automaticamente depois que o log de transações cresce em um determinado limite. Para obter mais informações, consulte a Operação de Ponto de Verificação para tabelas de Memory-Optimized.
Depois que a operação de ponto de verificação XTP final for concluída, a remoção do último contêiner com otimização de memória será concluída com êxito e o valor na
deployment_statecoluna se tornará 0.Se o
deployment_statevalor for 6, isso significa que aALTER DATABASE ... REMOVE FILEinstrução do último contêiner com otimização de memória foi cancelada ou anulada. Execute a instrução novamente para concluir a remoção do contêiner.