Estou tentando usar o SQL In-Memory OLTP. A limitação é que a solução precisa ser compatível com o SQL Express 2019 e 2022.
Este link afirma que o In-Memory OLTP é compatível com todas as versões do SQL, incluindo o Express.
Com a versão 2022 não estou conseguindo iniciar:
EXECUTE master.dbo.xp_create_subdir 'C:\data\'
GO
ALTER DATABASE S2X ADD FILEGROUP S2x_mod
CONTAINS MEMORY_OPTIMIZED_DATA;
GO
ALTER DATABASE S2x ADD FILE (
name='S2x_mod1', filename='c:\data\S2x_mod1')
TO FILEGROUP S2x_mod;
Chego até a última parte da consulta acima e recebo o seguinte erro:
Não foi possível processar a operação. O gerenciador de réplicas do Always On Availability Groups está desabilitado nesta instância do SQL Server. Habilite o Always On Availability Groups usando o SQL Server Configuration Manager. Em seguida, reinicie o serviço do SQL Server e tente a operação atual novamente. Para obter informações sobre como habilitar e desabilitar o Always On Availability Groups, consulte os Manuais Online do SQL Server.
Ao tentar habilitar a opção por meio do SQL Server Configuration Manager, ele informa que não é possível ativar "Always On Availability Groups" com esta versão do SQL Express.
Com a versão 2019, superei a consulta acima e consegui criar uma tabela otimizada para memória e um procedimento armazenado nativo:
-- Creating a memory-optimized table
CREATE TABLE dbo.State
(
CID NVARCHAR(50) NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 1000),
PNO INT NOT NULL,
IsStart BIT NOT NULL,
IsEnd BIT NOT NULL,
CMPID NVARCHAR(50) NOT NULL
)
WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA);
GO
CREATE PROCEDURE dbo.GetStateByCID
@CID NVARCHAR(50)
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
AS
BEGIN ATOMIC WITH
(
TRANSACTION ISOLATION LEVEL = SNAPSHOT,
LANGUAGE = N'English'
)
SELECT CID, PNO, IsStart, IsEnd, CMPID
FROM dbo.State
WHERE CID = @CID;
END;
mas ao executá-lo:
EXEC @return_value = [dbo].[GetStateByCID]
@CID = N'1234'
Recebo o seguinte erro:
Ocorreu um erro ao executar o lote. A mensagem de erro é: Erro fatal de conexão interna. Estado do erro: 15, Token: 0
Não encontrei muita ajuda on-line sobre isso; mas parecia ser um problema que foi corrigido na versão 2017 (veja aqui ). Isso não faz muito sentido para mim, pois eu esperava que a correção fosse incluída na versão 2019 por padrão. Em qualquer caso, usar o In-Memory OLTP só seria possível para mim se fosse compatível com o Express 2019 e 2022.
O que estou esquecendo aqui? O In-Memory OLTP é compatível com SQL express ou não? Estou fazendo algo errado?