asp.net 核心 api 健康检查
asp.net core api healthcheck
我正在向我的 netcore 网站添加一些健康检查。其中之一是检查连接字符串是否指向已激活内存表支持的数据库(基本上如果文件组是使用 CONTAINS MEMORY_OPTIMIZED_DATA 标志创建的)。
健康检查已确定使用此查询:
IF((SELECT COUNT(1) FROM sys.filegroups FG
JOIN sys.database_files DF
ON FG.data_space_id = DF.data_space_id
JOIN sys.master_files MF
ON DF.file_id = MF.file_id
JOIN sys.databases DB
ON DB.database_id = MF.database_id
where FG.type = 'FX'
and DB.name ='MyDB')>0)
BEGIN
SELECT 1
END
ELSE
BEGIN
RAISERROR ('Memory file group not set',
18, -- Severity,
-1); -- State);
END
并通过以下方式注册:
.AddSqlServer(connectionString: connString,
healthQuery: myHealthQuery, name: HealthCheckNames.InMemoryState)
查询执行 return 1,没有任何错误。我已经通过它设置了一个 运行 的分析器,并且没有抛出任何错误(我可以看到 Select 1 被 returned)。
不过,健康检查 return 不健康。
知道为什么吗?
原来是权限问题。连接字符串的用户缺少权限(VIEW ANY DEFINITION 权限),我不愿意分配。
我通过跳过 sys.master_files table 的连接并使用类似的运算符
解决了这个问题
IF((SELECT Count(1) FROM sys.filegroups FG
JOIN sys.database_files DF
ON FG.data_space_id = DF.data_space_id
where FG.type = 'FX'
and Df.name LIKE 'MyDB%') > 0)
BEGIN
SELECT 1
END
ELSE
BEGIN
RAISERROR ('Memory file group not set',
18, -- Severity,
-1); -- State);
END
我正在向我的 netcore 网站添加一些健康检查。其中之一是检查连接字符串是否指向已激活内存表支持的数据库(基本上如果文件组是使用 CONTAINS MEMORY_OPTIMIZED_DATA 标志创建的)。
健康检查已确定使用此查询:
IF((SELECT COUNT(1) FROM sys.filegroups FG
JOIN sys.database_files DF
ON FG.data_space_id = DF.data_space_id
JOIN sys.master_files MF
ON DF.file_id = MF.file_id
JOIN sys.databases DB
ON DB.database_id = MF.database_id
where FG.type = 'FX'
and DB.name ='MyDB')>0)
BEGIN
SELECT 1
END
ELSE
BEGIN
RAISERROR ('Memory file group not set',
18, -- Severity,
-1); -- State);
END
并通过以下方式注册:
.AddSqlServer(connectionString: connString,
healthQuery: myHealthQuery, name: HealthCheckNames.InMemoryState)
查询执行 return 1,没有任何错误。我已经通过它设置了一个 运行 的分析器,并且没有抛出任何错误(我可以看到 Select 1 被 returned)。
不过,健康检查 return 不健康。
知道为什么吗?
原来是权限问题。连接字符串的用户缺少权限(VIEW ANY DEFINITION 权限),我不愿意分配。
我通过跳过 sys.master_files table 的连接并使用类似的运算符
解决了这个问题IF((SELECT Count(1) FROM sys.filegroups FG
JOIN sys.database_files DF
ON FG.data_space_id = DF.data_space_id
where FG.type = 'FX'
and Df.name LIKE 'MyDB%') > 0)
BEGIN
SELECT 1
END
ELSE
BEGIN
RAISERROR ('Memory file group not set',
18, -- Severity,
-1); -- State);
END