2016-11-28 55 views
0

當我嘗試更新SQL Server 2016內存表中的STATS時,出現以下錯誤。所有其他非內存表運行正常。Ola Hallengren UPDATE STATS在內存表中失敗SQL Server 2016

Date and time: 2016-11-28 11:31:39 
Command: UPDATE STATISTICS [DBServer101].[dbo].[tblProcess] [ix_tblProcess_InProcessId] 
Msg 50000, Level 16, State 1, Procedure CommandExecute, Line 152 [Batch Start Line 4] 
Msg 41317, A user transaction that accesses memory optimized tables or natively compiled modules cannot access more than one user database or databases model and msdb, and it cannot write to master. 
Outcome: Failed 
Duration: 00:00:00 
Date and time: 2016-11-28 11:31:39 

這裏是我運行奧拉Hallengren腳本參數:

EXECUTE [dbo].[IndexOptimize] 
@Databases = 'USER_DATABASES' 
, @FragmentationLow = NULL 
, @FragmentationMedium = NULL 
, @FragmentationHigh = NULL 
, @UpdateStatistics = 'ALL' 
, @OnlyModifiedStatistics = 'Y' 
, @SortInTempdb = 'N' 
, @LogToTable = 'N' 

任何幫助是極大的讚賞。

回答

1

看看下面的文章不支持特色的內存中OLTP。 https://msdn.microsoft.com/en-us/library/dn133181.aspx

它提到「不支持跨數據庫查詢和事務」。我聯繫了奧拉,以確保他知道這個錯誤,希望它能在後續版本中得到糾正。

如果您尚未解決問題,可以執行的操作是分別執行索引&統計維護。對於索引維護,我們將@UpdateStaistics參數更改爲NULL,以便通過交叉DB事務解決內存中錯誤。我們正在執行dbo.Index之外的更新統計信息。直接從每個數據庫中進行優化(避免跨數據庫事務處理)。

--THIS WILL BREAK BECAUSE dbo.IndexOptimize RESIDES IN A DBA DATABASE 
USE DBA_Utility 
GO 
EXECUTE dbo.IndexOptimize 
    @Databases = 'WideWorldImporters', 
    @FragmentationLow = NULL, 
    @FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE', 
    @FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE', 
    @FragmentationLevel1 = 5, 
    @FragmentationLevel2 = 30, 
    @UpdateStatistics = 'ALL', 
    @OnlyModifiedStatistics = 'Y', 
    @LogToTable = 'Y', 
    @TimeLimit = 21600 
GO 

--THIS WILL WORK 
USE [WideWorldImporters] 
GO 
UPDATE STATISTICS [WideWorldImporters].[Warehouse].[ColdRoomTemperatures] [IX_Warehouse_ColdRoomTemperatures_ColdRoomSensorNumber]