SQL Server 2016 Standard(SP2 CU6)データベースのクエリストアがERROR
状態になり、オンラインに戻そうとしています。 QSのトラブルシューティングに関して私が見たすべての記事(例 this one 、さらに Microsoft自身のドキュメント )でも、次のことを行うことをお勧めします。
ALTER DATABASE [QDS] SET QUERY_STORE = OFF
exec [QDS].dbo.sp_query_store_consistency_check
ALTER DATABASE [QDS] SET QUERY_STORE = ON
ALTER DATABASE [QDS] SET QUERY_STORE (OPERATION_MODE = READ_WRITE)
しかし、手順sp_query_store_consistency_check
は、インスタンスにどのような形でも存在しないようです。何が欠けていますか?
他のクエリストア関連のDMV、関数などと同様に、sp_query_store_consistency_check
は、dboスキーマではなく「sys」スキーマにあります。これはトレイシーのブログのタイプミスにすぎないと思います。それでも、dboスキーマを参照しているときでもコマンドは機能するはずです。
また、クエリストアを有効にしたユーザーデータベースからプロシージャを呼び出す必要があります。これを試して:
USE YourDatabaseName;
GO
EXEC sys.sp_query_store_consistency_check;
Tony は、ストアドプロシージャの定義がどこにも見つからなかったとコメントで述べています。これは、拡張ストアドプロシージャの典型です。ランニング EXEC sp_helptext 'sys.sp_query_store_consistency_check';
その上で、DAC接続からでも、これを返します。
Text
-----------------
(server internal)
sys.all_objects
ただし:
SELECT
[name],
[type_desc],
is_ms_shipped
FROM sys.all_objects
WHERE [name] LIKE '%consistency%';
結果:
name type_desc is_ms_shipped
--------------------------------- ------------------------- -------------
sp_query_store_consistency_check EXTENDED_STORED_PROCEDURE 1
私の間違い、私はSQL Server 2016を使用していることに気づきました。上記の手順はSQL Server 2017で導入されました。
クエリストアを2016年に良好な状態に戻すために知っている唯一の方法は、すべてのデータを消去することです。
ALTER DATABASE [YourDatabaseName]
SET QUERY_STORE CLEAR ALL;