小编ret*_*tif的帖子

如何在 Always On 集群中查询只读副本

我们有一个由 2 个服务器组成的 Always On“集群”(还会有更多),所以一个是PRIMARY,其他是SECONDARY。这个想法是将 SECONDARY 用作只读副本,因此它在某种程度上是一个搜索服务器。

我知道如何在 C# 中设置 ConnectionString 所以它将使用 SECONDARY 副本 - 只需添加ApplicationIntent=ReadOnly.

但是如果我使用分布式查询,我不明白如何从存储过程中解决 SECONDARY。有没有办法为查询设置一些参数(如 WITH 语句或其他东西),因此查询将仅使用副本而不使用 PRIMARY 节点?

问题是,很明显,从一开始server1是 PRIMARY,server2是 SECONDARY,但是当server1 出现故障时,server2是 PRIMARY,server1在修复后将是 SECONDARY。所以我不能只使用静态server2的名称。

到目前为止,我已经设法将当前副本的服务器名称作为变量并在 EXEC 中使用它:

-- find first available replica
DECLARE @replicaServer nvarchar(50)

SELECT TOP 1
    @replicaServer = RCS.replica_server_name
FROM
    sys.availability_groups_cluster AS AGC
    INNER JOIN sys.dm_hadr_availability_replica_cluster_states AS RCS
          ON RCS.group_id = AGC.group_id
    INNER JOIN sys.dm_hadr_availability_replica_states AS …
Run Code Online (Sandbox Code Playgroud)

sql-server availability-groups distributed-transactions

8
推荐指数
2
解决办法
1万
查看次数

从 .zip 安装 MySQL for Windows 并重置 root 密码

我只想在我的 PC(使用 Windows 8.1 x64)上安装 MySQL 服务器,没有 Workbench 或其他东西。所以我.zipdev.mysql.com/downloads下载了存档。这是 x86_64 版本 5.7.9 (MySQL Community Server (GPL)) 上的 Win64 下载。

我将它安装为 Windows 服务,但没有mysql数据库,只有information_schema. 所以我执行了这个:

mysql_upgrade.exe --upgrade-system-tables
Run Code Online (Sandbox Code Playgroud)

mysql创建了数据库。但是随之而来的是root用户发生了一些事情,因为我无法再访问mysql了。

所以我决定重置这个突然出现的密码(因为我之前没有它)。我在官方手册中建立了以下解决方案,我是这样启动服务器的:

mysqld.exe --skip-grant-tables --console
Run Code Online (Sandbox Code Playgroud)

然后我mysql没有密码打开:

mysql.exe –u root
Run Code Online (Sandbox Code Playgroud)

然后尝试重置root密码:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD(‘passhere');
Run Code Online (Sandbox Code Playgroud)

但我收到了这个错误:

错误 1131 (42000):您以匿名用户身份使用 MySQL,不允许匿名用户更改密码”。

这是什么?我怎么匿名了?所有命令都在cmd.exe管理员下执行。

在这种情况下,我应该怎么做才能重置 root 密码?

更新 1:我试图检查当前用户:

SELECT USER(), CURRENT_USER();
Run Code Online (Sandbox Code Playgroud)

这给出了:

+--------+----------------+
| USER() | CURRENT_USER() |
+--------+----------------+ …
Run Code Online (Sandbox Code Playgroud)

mysql windows password-recovery mysql-5.7

8
推荐指数
1
解决办法
4669
查看次数

确定发送查询的服务器

对于分布式查询,是否可以确定发送查询的服务器?

例如,我有统计数据:

SELECT DB_NAME(st.dbid),
       文本,
       请求时间,
       查询计划,
       (requested_memory_kb / 1024),
       (granted_memory_kb / 1024),
       查询成本
FROM sys.dm_exec_query_memory_grants AS mg
交叉应用 sys.dm_exec_sql_text(mg.sql_handle) AS st
交叉申请 sys.dm_exec_query_plan(mg.plan_handle) AS ph
ORDER BY requests_memory_kb DESC

如何获取发送每个查询的服务器?我应该加入哪些表或应用哪些函数?

sql-server

5
推荐指数
1
解决办法
78
查看次数

master 数据库中的重复表和过程

我刚刚发现,该master数据库包含一些其他数据库的表和存储过程的重复项。

例如,我有一个SomeDB包含表的数据库justTable。出于某种原因,该表的副本master也在其中,但没有数据。

这怎么可能?我敢肯定,在创建这些表和过程时,我使用的是相应的数据库,而不是master. 它们都存在于这些数据库中(它们应该存在),只是还有一个副本master

我使用 Microsoft SQL Server Management Studio 2014 和 Redgate 添加(源代码控制和东西)。

sql-server sql-server-2014 master-system-database

3
推荐指数
1
解决办法
186
查看次数