内存优化错误:无法正确创建或设置代码生成目录

Cra*_*ein 6 sql-server memory-optimized-tables sql-server-2016

昨天我在尝试在 SQL Server 2016 SP1 企业版上创建第一个 memory_optimized 表时遇到了一个问题。

我创建了数据库和文件组

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  
Run Code Online (Sandbox Code Playgroud)

然后我创建了表

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
Run Code Online (Sandbox Code Playgroud)

这导致此错误:

消息 41334,级别 16,状态 0,第 8 行 无法正确创建或设置代码生成目录。

我终于发现 SQL 试图在服务器属性中定义的默认数据库位置创建一个目录 (XTP),在这种情况下不再存在。这个目录是它想要存储内存中需要的 dll 文件的地方。

https://blogs.msdn.microsoft.com/bobsql/2016/08/23/create-table-disk-vs-in-memory-optimized/

所以我的问题是这个。

有没有办法在 CREATE TABLE 语法或其他地方定义 XTP 目录的创建位置?

谢谢,克雷格

Sea*_*ser 3

有没有办法定义 XTP 目录将在 CREATE TABLE 语法或其他地方创建的位置?

不,那里没有。这始终指向默认数据库路径。如果路径被删除,它将尝试创建它并对其应用安全性几次,然后返回错误。

从构建版本开始是这样的:13.0.4422.0 及更早版本

如果您认为应该将其更改为可配置值 - 我会邀请您在Connect中创建请求。