0

我在 SQL 2014 的高可用性组数据库上设置了一个简单的内存表。直接从主节点或从侦听器查询表工作正常。如果我将查询字符串更改为 ReadOnly Intent 或尝试直接从两个辅助节点中的任何一个进行查询,我会收到以下错误:-

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

网上关于这条消息的信息很少。它谈到当“重做”过程发生时它被正确复制。据我所读,“重做”过程应该是自动的,该表现在已经放置了超过 24 小时,但仍然无法正常工作。有什么想法吗?谢谢,乔恩

4

1 回答 1

0

感谢 Sean Gallardy 在 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-辅助节点?forum=sqldisasterrecovery

我已经从下面的上述链接中复制了答案:-

这是不正确的,它们绝对可以从可读的辅助设备中读取,假设: 内存表是使用 Durability = schema_and_data 创建的 检查点已在主设备上运行 使用了正确的隔离级别 我可以很容易地让它工作,这是一个repro:1.在primary上创建数据库并放入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 PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 1000)) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA)

插入 dbo.IMOLTP(C1) 值 (1), (2), (3) 去

检查点

选择 * 从 dbo.IMOLTP

  1. 从 READABLE 辅助读取

使用 Test1 去

选择 * 从 dbo.IMOLTP 去

它适用于我:Microsoft SQL Server 2014 (SP2-CU3) (KB3204388) - 12.0.5538.0 (X64)

-肖恩

于 2017-03-31T09:12:39.927 回答