无法从辅助 Windows 群集上的分布式 AlwaysOn 组中删除数据库

DJS*_*SQL 5 sql-server availability-groups distributed-availability-groups

我们在两个 Windows 集群中部署了分布式 AG。

  • Clus01 - 设置了一个 AG,里面没有 DB (AG1)
  • Clus02 - 设置了一个 AG,里面没有 DB (AG2)
  • Clus01 - 使用 AG1(主要)和 AG2(次要)设置了 DistAG

我们

  • 将 Clus02 加入 DistAG
  • 在 Clus01 上为 AG1 添加了一个数据库
  • 在恢复到 AG2 时恢复了这个数据库
  • 将此数据库添加到 Clus02 上的 AG2(显示为主要,但在 DistAG 中实际上是次要的)

Clus02 上的 DB 现在按预期工作……Clus01 上的 DB 上的任何更新都将使用 DistAG 来更新 Clus02 DB。

我们经常从现场刷新这个环境(这是预生产)。所以我们必须将数据库恢复到 CLus01。

对于我们普通的 AG,我们只需从 CLUS01 中删除 DB,还原到 CLUS01,备份并还原到 CLUS02,然后再次加入 AG。

对于 DistAG,我不能

  1. 从 CLUS02 上的 AG2 中删除 DB。

    ALTER AVAILABILITY GROUP [AG_G2CoreReporting]
    REMOVE DATABASE [Genesis];
    GO
    
    Run Code Online (Sandbox Code Playgroud)

    我们得到错误

    消息 41190,级别 16,状态 8,第 6 行可用性组“AG2”无法处理删除数据库命令。本地可用性副本未处于可以处理该命令的状态。验证可用性组是否联机以及本地可用性副本是否为主副本,然后重试该命令。

  2. 从 CLUS01 上的 AG1 中删除 DB。CLUS02 上 AG2 上的 DB 进入非同步状态,我无法删除(与上述相同的错误),因此无法恢复顶部的 DB。

  3. 通过在 CLUS01 上运行删除 DistAG 上的副本

    ALTER AVAILABILITY GROUP [DistAG]
    REMOVE REPLICA ON N'AG2';
    
    Run Code Online (Sandbox Code Playgroud)

    我们得到错误

    消息 15151,级别 16,状态 1,第 5 行无法更改可用性组“AG2”,因为它不存在或您没有权限。

有没有人知道如何使用 DistAG 刷新环境而不必删除整个 DistAG 并重新设置?

Sea*_*ser 4

有谁知道如何使用 DistAG 刷新环境,而无需删除整个 DistAG 并再次设置它?

如果这是对许多数据库完成的,那么删除并重新创建将是您最好的选择......尽管我认为分布式可用性组中需要一个数据库,该数据库需要每天刷新。

唯一的其他选项是在从全局主数据库中删除数据库后对分布式可用性组进行故障转移,以便转发器成为新的全局主数据库。然后,您将能够从(现在是主要的)第二个可用性组中删除数据库。由于连接被终止,这种方法的吸引力较小,与您已有的删除+添加方法相比,该方法将保持与当前全局主数据库的连接。

您始终可以使用以下命令从转发器或转发器端的辅助数据库中删除数据库ALTER DATABASE [name] SET HADR OFF