SQL Server 2016,我正在尝试处理一些常规数据并返回一个 JSON 对象以供另一个系统处理。另一个系统无法识别数组包装器,因此我尝试使用 WITHOUT_ARRAY_WRAPPER 来摆脱它。在子查询中使用时会返回奇怪的结果...
SELECT @@SERVERNAME AS [Servername],
( SELECT [Name], [Recovery_Model_Desc]
FROM sys.databases
WHERE name in ('master', 'model', 'msdb')
FOR JSON PATH
) AS d
FOR JSON PATH, ROOT('ServerInformation')
Run Code Online (Sandbox Code Playgroud)
这会产生预期的数据,使用数组包装器......
{"ServerInformation":[{"Servername":"MyServer","d":[{"Name":"master","Recovery_Model_Desc":"SIMPLE"},{"Name":"model","Recovery_Model_Desc" :"FULL"},{"Name":"msdb","Recovery_Model_Desc":"SIMPLE"}]}]}
但是, WITHOUT_ARRAY_WRAPPER 产生...
SELECT @@SERVERNAME AS [Servername],
( SELECT [Name], [Recovery_Model_Desc]
FROM sys.databases
WHERE name in ('master', 'model', 'msdb')
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
) AS d
FOR JSON PATH, ROOT('ServerInformation')
Run Code Online (Sandbox Code Playgroud)
{"ServerInformation":[{"Servername":"MyServer","d":"{\"Name\":\"master\",\"Recovery_Model_Desc\":\"SIMPLE\"},{\"Name \":\"model\",\"Recovery_Model_Desc\":\"FULL\"},{\"Name\":\"msdb\",\"Recovery_Model_Desc\":\"SIMPLE\"}"}] }
而我希望它产生
{"ServerInformation":{"Servername":"MyServer","d":{"Name":"master","Recovery_Model_Desc":"SIMPLE"},{"Name":"model","Recovery_Model_Desc":" FULL"},{"Name":"msdb","Recovery_Model_Desc":"SIMPLE"}}}
错误或预期结果?
编辑:调整预期结果
我最近一直在使用 SMO 来检查一些属性,并且在尝试收集有关 SQL Server 2016 中的读取路由顺序的信息时遇到了一个问题。
在早期版本中,路由列表非常简单,列表将按顺序处理,但在 2016 年,他们引入了循环算法,允许您让多个辅助副本接受读取流量。
虽然此数据可通过 T-SQL 访问,但 SMO 似乎并未更新以反映这一点,这意味着您无法准确获取或设置配置,因为它仍然是一个简单的字符串集合。
是否有一些我遗漏的属性可以让我获得 SQL Server 2016 的准确数据?(下面的 C# 示例 SMO 调用)
它只是似乎无法访问的循环信息,它列出了读取路由列表中的所有副本,它似乎没有区分可能存在的各种副本组。
连接错误报告。 连接已死...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
namespace SmoTesting
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter the servername");
string connectServer = Console.ReadLine();
Console.WriteLine("Enter the AG name");
string agName = Console.ReadLine();
Server srv = new Server();
try
{
srv = new Server(connectServer);
srv.ConnectionContext.StatementTimeout = …
Run Code Online (Sandbox Code Playgroud) DBA 角色落入了我的怀抱,现在我被要求调查 Always On Availability Groups。
那么,在可用性组环境中,是否所有服务器都需要具有相同的规格?假设我的服务器 A 有 20 个核心的企业环境,服务器 B 和 C 是否必须每个都有 20 个核心?
灾难恢复如何工作?目前我有一个到异地的镜像,连接正常,我是否必须增加连接带宽?DR 站点是可用性组的一部分吗?我的印象是(可能 100% 错误),如果数据库处于恢复模式,无法访问,则您不必为 SQL Server 许可证付费。现在使用 Always On 听起来好像即使您没有访问服务器也被迫获得许可证。
使用可用性组,我可以为一个组创建一个主服务器并为另一个 AG 设置不同的主服务器,这可能吗?
我正在尝试在 SQL 2017 中配置备份加密,但遇到了一些问题。
我在一台机器上创建主密钥和证书没有问题。我在另一台机器上安装证书并读取备份也没有问题,但是,如果另一台机器运行的服务帐户与创建证书的服务帐户不同,这将不起作用。
以下是我正在采取的步骤(我也尝试恢复主密钥,但也会引发错误):
/* Server 1 */
/* Create the master key */
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'SomeRandomSecureString';
GO
/* Create the certificate to be used for backups */
CREATE CERTIFICATE BackupCert
WITH SUBJECT = 'Backup Encryption Certificate';
GO
/* Backup the master key */
BACKUP MASTER KEY TO FILE = '\\FileShare\DatabaseMasterKey_Master.key'
ENCRYPTION BY PASSWORD = 'SomeRandomPwd';
BACKUP CERTIFICATE BackupCert TO FILE = '\\FileShare\BackupCert.cer'
WITH PRIVATE KEY (FILE = '\\FileShareBackupCert.pvk',
ENCRYPTION BY …
Run Code Online (Sandbox Code Playgroud)