AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 255452
Accepted
dsuy
dsuy
Asked: 2019-12-12 20:04:34 +0800 CST2019-12-12 20:04:34 +0800 CST 2019-12-12 20:04:34 +0800 CST

是否可以将数据库添加到 Always On AG 并在不同时间设置副本?

  • 772

我有一个 3 节点 SQL Server Always On 可用性组。2 个节点在同一个 LAN 上,第三个节点在具有高延迟的远程站点上。

我将向 AG 添加一个巨大的数据库(10TB),所以我希望能够在第一阶段将它添加到 LAN 上的 2 个副本中,几天后,在第三个(远程)添加它) 现场手动复制后的副本。

这是受支持的方案吗?如果是这样...推荐的方法是什么?

不幸的是,将数据库同时添加到所有节点不是一种选择。

sql-server availability-groups
  • 3 3 个回答
  • 703 Views

3 个回答

  • Voted
  1. TheRealCode
    2019-12-12T21:53:34+08:002019-12-12T21:53:34+08:00

    我建议您将数据库还原/附加到 SQL 服务器上的主节点。从那里您可以将其添加到 AG 但不能复制。最终,要在第三个(远程)节点上获取它 - 您可能必须在已将其复制到远程节点后破坏 AG 并重新添加数据库(如果您允许停机)。这将允许它同步。

    所以这种方法意味着你将有3 个阶段:

    • 第 1 阶段:恢复/附加主节点上的 10TB 数据库 - 不在 AG 中
    • 第 2 阶段:将 10TB 数据库添加到 AG。从 AG 中删除远程节点。
    • 第 3 阶段:在远程节点上复制 10TB。重建 AG 以包含远程节点。允许 AG 同步和赶上数据。

    如果不清楚,请告诉我更多信息,以便我为您提供帮助(例如 OS/SQL 版本)。

    • 1
  2. Best Answer
    Shekar Kola
    2019-12-12T23:14:31+08:002019-12-12T23:14:31+08:00

    这是受支持的方案吗?如果是这样...推荐的方法是什么?

    是的,您可以这样做,其中一种方法是创建新的可用性组,这样现有的 AG 数据库就不会被中断,可以在不向其中添加数据库和其他副本的情况下创建可用性组。

    在您的情况下,您可以遵循相同的方法,以下是您可能想要遵循的步骤:

    总结步骤:

    1. 在不添加数据库和辅助副本的情况下创建 AG
    2. 将所需的数据库添加到 AG
    3. 在辅助副本上还原数据库 WITH NORECOVERY 选项(即在同一 LAN 中)
    4. 将次要副本添加到 AG
    5. 加入辅助副本(在步骤 4 中添加)
    6. 设置辅助数据库的HADR(在步骤3中恢复)添加到AG

    准备好后,可以对第三个副本重复步骤 3、4、5 和 6。

    详细步骤:

    要创建一个空的可用性组,请通过SSMS 选择新建可用性组
    选项 → Always On 高可用性 → 可用性组(右键单击)

    在此处输入图像描述

    创建空可用性组后,您可以相应地应用以下命令(主要和次要),可以使用 SSMS (GUI) 完成相同的步骤。

    在 PRIMARY 副本上

    ALTER DATABASE Test_2RepAG SET RECOVERY FULL; 
    BACKUP DATABASE Test_2RepAG TO DISK = '\\Shared\SQL-Backups\TestDB.bak'; 
    GO
    
    USE MASTER;
    ALTER AVAILABILITY GROUP [2RepAG] MODIFY REPLICA ON 'PrimaryRep\SQL1' with
        (ENDPOINT_URL = 'TCP://PrimaryRep.Domain.LOCAL:5023'); ---- Just to be safe-side as it it might add default port via wizard 
    
    ALTER AVAILABILITY GROUP [2RepAG] ADD DATABASE Test_2RepAG;
    
    ALTER AVAILABILITY GROUP [2RepAG] ADD REPLICA ON 'Secondary1\SQL1' with
        (  
           ENDPOINT_URL = 'TCP://Secondary1.Domain.LOCAL:5023',  
           AVAILABILITY_MODE =  SYNCHRONOUS_COMMIT, --{SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT | CONFIGURATION_ONLY },  
           FAILOVER_MODE = AUTOMATIC --{ AUTOMATIC | MANUAL }   
        );
    GO 
    

    在 SECONDARY 副本上

    RESTORE DATABASE Test_2RepAG FROM DISK = '\\Shared\SQL-Backups\TestDB.bak' with stats, replace, NORECOVERY;
    GO
    
    ALTER AVAILABILITY GROUP [2RepAG] JOIN;
    ALTER DATABASE Test_2RepAG set HADR AVAILABILITY GROUP = [2RepAG];
    

    一旦决定添加第 3 个副本,您可以使用以下命令,使用带有 NORECOVERY 选项的最近备份在第 3 个副本恢复所需的数据库。

    在 PRIMARY 上用于第三个副本

    USER master;
    ALTER AVAILABILITY GROUP [2RepAG] ADD REPLICA ON 'Secondary2\SQL1' with
        (  
           ENDPOINT_URL = 'TCP://Secondary2.Domain.LOCAL:5023',  
           AVAILABILITY_MODE =  ASYNCHRONOUS_COMMIT, --{SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT | CONFIGURATION_ONLY },  
           FAILOVER_MODE = MANUAL --{ AUTOMATIC | MANUAL }   
        );
    

    3号副本

    RESTORE DATABASE Test_2RepAG FROM DISK = '\\Shared\SQL-Backups\TestDB.bak' with stats, replace, NORECOVERY;
    GO
    
    ALTER AVAILABILITY GROUP [2RepAG] JOIN;
    ALTER DATABASE Test_2RepAG set HADR AVAILABILITY GROUP = [2RepAG];
    

    虽然可以使用 2 个副本创建 AG,而 WSFC 有 3 个副本(节点),但 AG 的健康状况和它的侦听器由 WSFC 的 3 个节点决定,除非 WSFC 中没有从第 3 个节点计算的仲裁投票。更多细节..

    • 1
  3. Tony Hinkle
    2019-12-13T04:56:42+08:002019-12-13T04:56:42+08:00

    如果我理解这个问题,是的,这是一个受支持的场景,它可以很容易地完成,而不需要像其他答案那样多的工作。您不必从 AG 中删除远程节点或创建新 AG 即可执行此操作。高级步骤是通过 SSMS 向导将数据库添加到 AG,最后点击按钮创建脚本,然后取消向导。使用在本地辅助节点上同步和加入数据库的脚本部分。然后,当您准备好进行远程辅助时,将数据库还原到它,使其与最新的日志备份同步,然后将其加入:

    ALTER DATABASE <database_name> SET HADR AVAILABILITY GROUP = <AG_name>

    您甚至可以保存与远程服务器相关的 SSMS 生成的脚本部分来执行此操作,您将在其中看到上面的命令。

    我在How to remove a secondary database from an availability group and rejoin it中写了一个类似的过程。

    AG 成员资格和数据库副本所有权是分开的。AG 中每个数据库的复制都是单独处理的,因此您可以将一个数据库复制到其他 2 个节点,而将另一个数据库仅复制到其他 1 个节点。它必须像这样工作,因为直到副本同步到最后一个日志备份才能启动复制。小型数据库可能只需要几秒钟,但大型数据库,特别是在远程站点,可能需要数小时或数天才能同步,因此 SQL Server 不会强迫您拥有大量事务日志,其中包含排队等待复制的数据由于远程数据库未赶上当前 LSN 而无法发送的远程站点。

    • 1

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve