如何以编程方式将数据库添加到现有的 Always On 可用性组 (AOAG)?

Posted

技术标签:

【中文标题】如何以编程方式将数据库添加到现有的 Always On 可用性组 (AOAG)?【英文标题】:How to programmatically add a database to an existing Always On Availability Group (AOAG)? 【发布时间】:2015-03-10 09:38:57 【问题描述】:

我想以编程方式(T-SQL 脚本)创建一个新数据库,然后将其添加到现有的 Always On 可用性组 (AOAG)。

到目前为止,我可以创建数据库、创建完整备份(这是将数据库添加到 AOAG 的先决条件)并将其添加到现有 AOAG。

但是,我不知道如何初始化到辅助数据库服务器的初始复制。

到目前为止,这是我的脚本:

CREATE DATABASE Test;
GO

USE Test;
GO

BACKUP DATABASE Test
TO DISK = 'D:\Sync\Test.Bak'
   WITH FORMAT,
      MEDIANAME = 'D_Sync',
      NAME = 'Initial Full Backup for restore in AOAG group';
GO

USE Master
GO

ALTER AVAILABILITY GROUP AOAG_APP ADD DATABASE Test; 
GO

如果我使用的是 MS SQL Server Management Studio,我会使用向导并在Select Data Synchronization 选项中选择Full,然后选择备份文件的路径。

如何使用 SQL 脚本实现相同的功能? ALTER AVAILABILITY GROUP <group> ADD DATABASE <database> 似乎没有指定 Fullpath to backup files 的选项。

任何帮助将不胜感激!

【问题讨论】:

您可能还想在dba.stackexchange.com上发布这个问题 我不太了解,但这个链接可能有你要找的东西msdn.microsoft.com/en-us/library/ff877941.aspx 以简单的方式了解这一点:通过向导进行操作,然后点击窗口顶部的“脚本”按钮而不是“确定”按钮来应用更改。 感谢大家的推荐。下次我会考虑 dba.stackexchange.com。 @Ben,这就是我最后所做的,它让我意识到它不能按照我想要的方式完成(即作为我们的部署脚本的一部分执行(Octopus Deploy + RoundhouseE)) - 脚本必须在 SQLCMD 中运行MODE,因此它可以连接到不同的服务器。脚本需要了解 AOAG 拓扑的额外复杂性,这可能会随着时间而改变。 【参考方案1】:

你可以试试下面的代码。

--On primary node

create database test
alter database test set recovery FULL
backup database test to disk='Z:\Backups\Test Folder\test.bak'
backup log test to disk='Z:\Backups\Test Folder\test.trn'
alter availability group availablitygroup_name
add database [test];

--On secondary node

Restore database test from disk='\\node1\Backups\Test Folder\test.bak' with norecovery
restore log test from disk='\\node1\Backups\Test Folder\test.trn' with norecovery
alter database test set HADR availability group= availablitygroup_name

--On primary node

use test
go
create table abc(name varchar(15))
Insert into abc values('amarnath')
select * from abc

--On secondary node

use test
go
select * from abc

【讨论】:

我已将其标记为已接受的答案,因为在撰写本文时这似乎是唯一的方法。但是,我正在寻找一种不需要登录到不同服务器的解决方案(因此需要了解 AOAG 拓扑——我们有 AOAG 有 2 个副本,其他有 4 个)。我希望有一个更像 Dropbox 的解决方案,您可以在其中添加一个新数据库,并将其复制到其他副本上,就像 Dropbox 将新文件复制到所有设备一样,而您无需了解其他设备。 @Microsoft,如果您要列出,这是对您的功能请求。

以上是关于如何以编程方式将数据库添加到现有的 Always On 可用性组 (AOAG)?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode:如何将 Unity 游戏添加到现有的 iOS 应用程序?

CocoaPods 添加了一个新项目,但我无法将其添加到现有的 GitHub

如何将 Sapper 添加到现有的 Svelte 项目中?

如何将 MFC 支持添加到现有的 Win32 C++ 项目?

如何将熊猫数据添加到现有的 csv 文件中?

以编程方式创建视图后添加样式