ITPub博客

首页 > 数据库 > SQL Server > sqlserver always on可用性组添加新数据库

sqlserver always on可用性组添加新数据库

原创 SQL Server 作者:贺子_DBA时代 时间:2024-05-01 00:29:24 0 删除 编辑
添加新库到可用性组中,有两种方式,借助sql studio图形化界面,或者使用sql命令行;
本文档介绍图形化的形式添加新库到可用性组:
一、右击选中可用性组名字,选择添加数据库,进入添加数据库到可用性组 向导
0
二、 进入添加数据库到可用性组 向导后,一步一步的点即可
2.1、点击下一步
0
2.2、选择需要添加的库,点击下一步,注意需要先对库进行全库备份,否则无法选择该库,
0
对库进行全库备份:
0
刷新发现jjj库已经满足先决条件!
0
0
2.3、如下所示,选择连接你要添加的副本
0
2.4、选择同步方式:
一、方式1:
如果你选择的是 完整的数据库和日志备份,那么就需要保证集群中各个节点的数据库目录一致的,否则验证这个步骤不通过,报错如下:
0
以下必需的目录在副本 WIN-2AEJMNSP8BK 上不存在: D:\sqlserver。 (Microsoft.SqlServer.Management.HadrModel)

程序位置:
在 Microsoft.SqlServer.Management.HadrModel.Validator.Validate(IExecutionPolicy policy, ScenarioValidatorHandler validationDelegate)
在 Microsoft.SqlServer.Management.Hadr.TestDatabaseFileLocationCompatibility.DoWork()
在 Microsoft.SqlServer.Management.TaskForms.SimpleWorkItem.Run()
0
选择 完整的数据库和日志备份 这种数据同步方式,具体的流程如下所示:
使用完全初始数据同步的先决条件
  • 在承载可用性组的副本的每个服务器实例上,所有数据库文件路径都必须完全相同。
  • 没有任何主数据库名称可存在于承载辅助副本的任何服务器实例上。 这意味着尚没有任何新的辅助数据库可以存在。
  • 为了使该向导创建并访问备份,需要指定网络共享。 对于主副本,用于启动数据库引擎的帐户必须对网络共享具有读写文件系统权限。 对于辅助副本,该帐户必须具有对网络共享区的读权限。
1)首先将数据库添加到可用性组(ALTER AVAILABILITY GROUP liuwenhe  ADD DATABASE jjj; )该步骤执行完毕后,仅仅能在主节点可以看到可用性组liuwenhe中有数据库jjj!
2)创建jjj的完整备份,依次在所有副本上还原(还原日志的时候是使用with nore);
3)备份jjj日志,然后依次在所有副本上还原并且将jjj联接到副本节点的liuwenhe可用性组!
具体如下所示:
0
二、方式2:选择仅链接
涉及到两个步骤:
(1) 使用 RESTORE WITH NORECOVERY 将主数据库的最近数据库备份和后续的日志备份还原到承载辅助副本的每个服务器实例;
(2) 将还原的数据库联接到可用性组。
使用该方式的前提条件:
  • 确保计划放置数据库的系统的磁盘驱动器空间足以存储辅助数据库。
  • 辅助数据库的名称必须与主数据库的名称相同。
  • 使用 RESTORE WITH NORECOVERY 执行每个还原操作。
  • 如果辅助数据库需要位于与主数据库不同的文件路径中(包括驱动器号), 还原命令还必须对每个数据库文件使用 WITH MOVE 选项,将这些文件指定到辅助数据库的路径。如下所示指向别的路径!
0
  • 如果要逐个文件组地还原数据库,则要确保还原整个数据库。
  • 还原数据库后,必须还原 (WITH NORECOVERY) 自上次还原的数据备份之后创建的各个日志备份(如果完整备份后面没有进行事务日志备份,那么就不需要事务日志还原了,换句话说事务日志备份不是必须)
准备辅助数据库
  1. 除非您已经有了主数据库的最近数据库备份,否则需要创建新的完全或差异数据库备份。 最好将此备份和任何后续的日志备份放到推荐的网络共享上。
  2. 至少为主数据库创建一个新日志备份。 (自己测试的时候发现这个步骤不是必须的)
  3. 在承载辅助副本的服务器实例上,依次还原主数据库的完整数据库备份(还可以选择还原差异备份)以及所有后续的日志备份。
在 RESTORE DATABASE“选项”页上,选择“不对数据库执行任何操作,不回滚未提交的事务。可以还原其他事务日志。(RESTORE WITH NORECOVERY)”。
如果主数据库与辅助数据库的文件路径不同,例如,如果主数据库位于驱动器“F:”,但承载辅助副本的服务器实例缺少 F: 驱动器,请在 WITH 语句中包括 MOVE 选项。
  1. 若要完成辅助数据库的配置,您需要将辅助数据库联接到可用性组。 有关详细信息,请参阅 将辅助数据库联接到可用性组 (SQL Server)
该方式相对于 完整的数据库和日志备份 的方式,缺少了自动对主节点数据库做完全备份和事务日志备份的过程,以及在各个副本节点还原完整备份和事务日志备份的过程;需要你手动在主库对所有数据库做完全备份以及事务日志备份,并且把这个完全备份和事务日志手动还原到所有的副本节点;注意:需要 依次把可用组中的所有数据库和事务日志都备份还原添加到新副本节点 ;
该方式的优点是:可以让副本的数据库文件目录和主节点不一样。
0
如下所示, 仅链接的方式操作流程:
那么需要自己在主节点 备份需要添加到可用性组的数据库以及事务日志,然后手动在所有辅助节点恢复数据库以及事务日志,注意需要使用RESTORE WITH NORECOVERY 手动还原主数据库的最新数据库备份到副本节点, 在每个承载可用性组的辅助副本的服务器实例上执行!
一、还原数据库:
登录到辅助副本:
0
如下选择之前做的完整备份的文件(我选择在主节点共享目录);
0
如下选择具体的文件
0
0
0
二、还原日志(该步骤非必须)如果完整备份后面,你进行过事务日志备份,则需要还原事务日志备份,因为always on 必须保证数据库是完整恢复模式,一旦你开启了完整恢复模式,那么当你备份事务日志后就会自动截断无用的事务日志,所以如果你做了完整数据库备份后,如果还做了事务日志备份,那么就需要就会自动删除无用的事务日志了,就会导致事务日志不连续了,所以就必须要还原下事务日志;
0
注意选择restore with norecovery的方式
0

回到主副本(将数据库添加到可用性组 向导): 如下所示表示成功把hhh这个库加入到了可用性组!


2.5、确认是否添加成功:
方法1:所有节点查看如下是否都包含hhh库
方法2:查询某个可用性组有多少数据库
USE master;  
GO
-- 查看所有可用性组 名字
SELECT name AS availability_group_name
FROM sys.availability_groups;
-- 选择一个可用性组,查看其数据库
DECLARE @ag_name NVARCHAR(128) = 'YourAvailabilityGroupName'; -- 替换为你的可用性组名
SELECT
ag.name AS availability_group_name,
db.database_name AS database_name,
drs.role_desc AS role_description,
drs.synchronization_state_desc AS synchronization_state
FROM sys.availability_groups AS ag
INNER JOIN sys.availability_databases_cluster AS adc ON ag.group_id = adc.group_id
INNER JOIN sys.databases AS db ON adc.database_id = db.database_id
INNER JOIN sys.dm_hadr_database_replica_states AS drs ON adc.grouping_id = drs.grouping_id AND db.database_id = drs.database_id
WHERE ag.name = @ag_name;
如果要查看所有可用性组和它们的数据库,可以省略 WHERE 子句


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29654823/viewspace-3014304/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
10年数据库管理员从业经历,熟悉Oracle、mysql、tidb、oceanbase、redis、 mongodb 、python等技术栈,持有11g ocm 、mysql 5.7 ocp 、tidb 5.0 ptcp、tidb 6.0 ptca、oceanbase obcp等

注册时间:2014-05-12

  • 博文量
    327
  • 访问量
    2148962