首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改表以生成MEMORY_OPTIMIZED=ON错误Server 2017

更改表以生成MEMORY_OPTIMIZED=ON错误Server 2017
EN

Stack Overflow用户
提问于 2019-06-15 05:45:25
回答 1查看 4.6K关注 0票数 4

我需要修改表来添加MEMORY_OPTIMIZED = ON , DURABILITY =SCHEMA_ONLY,根据文档的语法如下:

代码语言:javascript
复制
ALTER TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
{
<table_option>
}

<table_option>所在的地方:

代码语言:javascript
复制
<table_option> ::=
{
    MEMORY_OPTIMIZED = ON
  | DURABILITY = {SCHEMA_ONLY | SCHEMA_AND_DATA}
  | SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name . history_table_name
        [, DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ]
}

我的代码是:

代码语言:javascript
复制
 ALTER TABLE memtypes 
 MEMORY_OPTIMIZED = ON , DURABILITY =SCHEMA_ONLY;

但我知道这个错误:

Msg 102,第15级,状态1,第2行 “内存优化”附近的不正确语法。

有什么帮助吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-15 06:53:03

将磁盘表迁移到内存中的OLTP表所需的过程并不简单,需要进行分析才能做出迁移的最终决定。但是,内存中OLTP表提供的好处值得您的努力。

假设我们有一个基于磁盘的表,如下所示:

代码语言:javascript
复制
CREATE TABLE <Disk based table name>
(
    id INT Primary Key,
    fname VARCHAR(10)
);
GO

让我们一步一步地完成这个过程。

为了有一个内存优化表,您的数据库需要一个内存优化文件组和一个分配给它的文件。要做到这一点,请遵循以下步骤,或者如果您已经设置了这些步骤,只需简单地忽略它们:

代码语言:javascript
复制
--add the filegroup to database named TEST
ALTER DATABASE <Your Database>
ADD FILEGROUP <Filegroup Name>
CONTAINS MEMORY_OPTIMIZED_DATA;

--Add and assign a file to filegroup
ALTER DATABASE <Your Database>
ADD FILE
    (
        NAME = <File Name>,
        FILENAME = <File store location>
    )
TO FILEGROUP <Filegroup Name>;

--Simply test the database to check if it now supports in memory optimised tables or not?
USE <Your Database>;
GO
SELECT g.name,
       g.type_desc,
       f.physical_name
FROM sys.filegroups g
    JOIN sys.database_files f
        ON g.data_space_id = f.data_space_id
WHERE g.type = 'FX'
      AND f.type = 2;

在这些步骤之后,您需要创建一个新的memry优化表,并将数据从基于磁盘的表迁移到它。

代码语言:javascript
复制
CREATE TABLE <In memory Table name>
(
    id INT,
    fname VARCHAR(10),
    CONSTRAINT PK_TEST_Memory_ID
        PRIMARY KEY NONCLUSTERED HASH (id) WITH(BUCKET_COUNT=1572864)
)
WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_ONLY);
GO

INSERT INTO <In memory Table name>
SELECT *
FROM <Disk based table name>;

阅读更多关于这种迁移的红门博客:https://www.red-gate.com/simple-talk/sql/database-administration/migrating-disk-based-table-memory-optimized-table-sql-server/

这里还有另一个有用的GitHub:https://github.com/MicrosoftDocs/azure-docs/blob/master/articles/sql-database/sql-database-in-memory-oltp-migration.md

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56607708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档