Таблица In-Memory в кластере высокой доступности SQL 2014 не запрашивается на вторичных узлах

Я установил простую таблицу в памяти в базе данных группы высокой доступности на SQL 2014. Запрос таблицы непосредственно с основного узла или из прослушивателя работает нормально. Если я изменяю строку запроса на ReadOnly Intent или пытаюсь выполнить запрос напрямую с любого из 2 вторичных узлов, я получаю следующую ошибку: -

Msg 41341, Level 16, State 1, Line 1 Table 'tbl_GetMakes' is not yet available on the secondary replica.

В Интернете очень мало информации об этом сообщении. Он говорит о том, что он правильно реплицируется, когда происходит процесс "REDO". Насколько я понимаю, процесс "REDO" должен быть автоматическим, таблица уже на месте уже более 24 часов и до сих пор не работает. Любые идеи кто-нибудь? Спасибо Джон

1 ответ

Решение

Спасибо Шону Галларди, который ответил на это на форуме Microsoft

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/a6cbeb89-bc99-491c-8c2f-9937d5ddfa6a/inmemory-table-on-sql-2014-ha-cluster-not-queriable-on-secondary-nodes?forum=sqldisasterrecovery

Я воспроизвел ответ по ссылке выше: -

Это не правильно, они могут быть абсолютно прочитаны из читаемого вторичного устройства, если предположить: таблица в памяти была создана с помощью Durability = schema_and_data. На первичном сервере была запущена контрольная точка. Используется надлежащий уровень изоляции. Я могу легко заставить это работать, вот repro: 1. Создать базу данных на первичном и поставить в AG

CREATE DATABASE [Test1]
 CONTAINMENT = NONE
 ON  PRIMARY
( NAME = N'Test1', 
  FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\Test1.mdf' , 
  SIZE = 4096KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), 
  FILEGROUP [IMOLTP] CONTAINS MEMORY_OPTIMIZED_DATA  DEFAULT
  ( NAME = N'imoltp_dir', 
  FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\imoltp_dir' , 
  MAXSIZE = UNLIMITED)
LOG ON 
( NAME = N'Test1_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\Test1_log.ldf' , SIZE = 1280KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO
  1. Создайте таблицу IM и заполните

CREATE TABLE dbo.IMOLTP ( C1 INT NOT NULL ПЕРВИЧНЫЙ КЛЮЧ, НЕКЛАСТЕРНЫЙ ХЭШ С

Вставить в dbo.IMOLTP(C1) значения (1), (2), (3) GO

КОНТРОЛЬНО-ПРОПУСКНОЙ ПУНКТ

SELECT * FROM dbo.IMOLTP

  1. Читать из читаемого вторичного

Используйте Test1 GO

SELECT * FROM dbo.IMOLTP GO

Он отлично работает для меня: Microsoft SQL Server 2014 (SP2-CU3) (KB3204388) - 12.0.5538.0 (X64)

-Sean

Другие вопросы по тегам