Изменить таблицу, чтобы сделать MEMORY_OPTIMIZED = ON ERROR SQL Server 2017 - PullRequest
2 голосов
/ 15 июня 2019

Мне нужно изменить таблицу, чтобы добавить MEMORY_OPTIMIZED = ON , DURABILITY =SCHEMA_ONLY Синтаксис в соответствии с документацией выглядит так:

ALTER TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
{
<table_option>
}

, где <table_option>:

<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 } ] ) ]
}

Мой код:

 ALTER TABLE memtypes 
 MEMORY_OPTIMIZED = ON , DURABILITY =SCHEMA_ONLY;

но я получаю эту ошибку:

Сообщение 102, Уровень 15, Состояние 1, Строка 2
Неверный синтаксис рядом с 'MEMORY_OPTIMIZED'.

Любая помощь, пожалуйста?

1 Ответ

2 голосов
/ 15 июня 2019

процесс, необходимый для переноса таблиц дисков в таблицы In-Memory OLTP, не прост и требует анализа, прежде чем вы сможете принять окончательное решение о переносе.Однако преимущества, которые дает таблица In-Memory OLTP, стоят ваших усилий

Предположим, что у нас есть таблица на основе диска следующим образом:

CREATE TABLE <Disk based table name>
(
    id INT Primary Key,
    fname VARCHAR(10)
);
GO

Давайте пройдем процессшаг за шагом.

Чтобы иметь таблицу, оптимизированную для памяти, в вашей базе данных должна быть группа файлов, оптимизированная для памяти, и назначенный ей файл.Для этого выполните следующие действия или, если вы уже настроили их, просто проигнорируйте их:

--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;

После этих шагов необходимо создать НОВУЮ оптимизированную таблицу памяти и перенести данные из таблицы на диске.к этому.

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>;

Подробнее об этой миграции читайте в блоге Red-Gate: https://www.red -gate.com / simple-talk / sql / администрация базы данных / миграция диска на основе таблицы-памяти-optimized-table-sql-server /

А также вот еще один полезный GitHub: https://github.com/MicrosoftDocs/azure-docs/blob/master/articles/sql-database/sql-database-in-memory-oltp-migration.md

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...