Encontrei um problema ontem ao tentar criar a primeira tabela memory_optimized em um SQL Server 2016 SP1 Enterprise Edition.
Eu criei o banco de dados e o grupo de arquivos assim
CREATE DATABASE imoltp -- Transact-SQL
CONTAINMENT = NONE
ON PRIMARY
(
NAME = N'imoltp',
FILENAME = N'F:\UNREFRESHED_DB\imoltp.mdf' ,
SIZE = 5120KB ,
FILEGROWTH = 1024KB
)
LOG ON
(
NAME = N'imoltp_log',
FILENAME = N'F:\UNREFRESHED_DB\imoltp_log.ldf' ,
SIZE = 2048KB , FILEGROWTH = 10%
)
GO
ALTER DATABASE imoltp ADD FILEGROUP [imoltp_mod]
CONTAINS MEMORY_OPTIMIZED_DATA;
ALTER DATABASE imoltp ADD FILE
(name = [imoltp_dir], filename= 'F:\UNREFRESHED_DB\imoltp_dir')
TO FILEGROUP imoltp_mod;
go
Então eu criei a tabela
USE imoltp
GO
CREATE TABLE imoltp.[dbo].[T1] (
[TempID] INT NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT=1000000),
[object_ids] NVARCHAR(255) NOT NULL,
[names] NVARCHAR(255) NOT NULL,
[comment] NVARCHAR(50)
) WITH (MEMORY_OPTIMIZED=ON, DURABILITY = SCHEMA_ONLY);
GO
O que resulta neste erro:
Msg 41334, Level 16, State 0, Line 8 O diretório de geração de código não pode ser criado ou configurado corretamente.
Finalmente descobri que o SQL estava tentando criar um diretório (XTP) no local do banco de dados padrão definido nas propriedades do servidor que não existia mais nessa situação. Este diretório é onde ele deseja armazenar os arquivos dll necessários na memória.
https://blogs.msdn.microsoft.com/bobsql/2016/08/23/create-table-disk-vs-in-memory-optimized/
Então minhas perguntas são essas.
Existe uma maneira de definir onde o diretório XTP será criado na sintaxe CREATE TABLE ou em outro lugar?
Obrigado, Craig
Não, não há. Isso sempre aponta para o caminho do banco de dados padrão. Se o caminho for removido, ele tentará ser criado e ter a segurança aplicada a ele algumas vezes antes de retornar um erro.
Isso é verdade a partir da compilação: 13.0.4422.0 e anteriores
Se você achar que isso deve ser alterado para um valor configurável - convido você a criar uma solicitação no Connect .