部署SQL Server 2016基于工作组的AlwaysOn AG
admin
2023-05-29 13:21:34
0

部署SQL Server 2016基于工作组的AlwaysOn AG

 

部署说明:

以下部署基于工作组环境、不用证书、启动账号为Users组成员、各节点位于同一网段。

 


前期环境准备参考之前的文章:

部署Windows Server 2016基于工作组的集群

安装和配置SQL Server 2016 With SP1



Part1:创建测试数据库

CREATE DATABASE Chapter5App1Customers ;
GO
ALTER DATABASE Chapter5App1Customers SET RECOVERY FULL ;
GO
USE Chapter5App1Customers
GO
CREATE TABLE App1Customers
(
ID INT PRIMARY KEY IDENTITY,
FirstName NVARCHAR(30),
LastName NVARCHAR(30),
CreditCardNumber VARBINARY(8000)
) ;
GO
--Populate the table
DECLARE @Numbers TABLE
(
Number INT
)
;WITH CTE(Number)
AS
(
SELECT 1 Number
UNION ALL
SELECT Number + 1
FROM CTE
WHERE Number < 100
)
INSERT INTO @Numbers
SELECT Number FROM CTE
DECLARE @Names TABLE
(
FirstName VARCHAR(30),
LastName VARCHAR(30)
) ;
INSERT INTO @Names
VALUES('Peter', 'Carter'),
('Michael', 'Smith'),
('Danielle', 'Mead'),
('Reuben', 'Roberts'),
('Iris', 'Jones'),
('Sylvia', 'Davies'),
('Finola', 'Wright'),
('Edward', 'James'),
('Marie', 'Andrews'),
('Jennifer', 'Abraham'),
('Margaret', 'Jones')
INSERT INTO App1Customers(Firstname, LastName, CreditCardNumber)
SELECT FirstName, LastName, CreditCardNumber FROM
(SELECT
(SELECT TOP 1 FirstName FROM @Names ORDER BY NEWID()) FirstName
,(SELECT TOP 1 LastName FROM @Names ORDER BY NEWID()) LastName
,(SELECT CONVERT(VARBINARY(8000)
,(SELECT TOP 1 CAST(Number * 100 AS CHAR(4))
FROM @Numbers
WHERE Number BETWEEN 10 AND 99 ORDER BY NEWID()) + '-' +
(SELECT TOP 1 CAST(Number * 100 AS CHAR(4))
FROM @Numbers
WHERE Number BETWEEN 10 AND 99 ORDER BY NEWID()) + '-' +
(SELECT TOP 1 CAST(Number * 100 AS CHAR(4))
FROM @Numbers
WHERE Number BETWEEN 10 AND 99 ORDER BY NEWID()) + '-' +
(SELECT TOP 1 CAST(Number * 100 AS CHAR(4))
FROM @Numbers
WHERE Number BETWEEN 10 AND 99 ORDER BY NEWID()))) CreditCardNumber
FROM @Numbers a
CROSS JOIN @Numbers b
CROSS JOIN @Numbers c
) d ;
CREATE DATABASE Chapter5App1Sales ;
GO
ALTER DATABASE Chapter5App1Sales SET RECOVERY FULL ;
GO
USE Chapter5App1Sales
GO
CREATE TABLE dbo.Orders(
OrderNumber int NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED,
OrderDate date NOT NULL,
CustomerID int NOT NULL,
ProductID int NOT NULL,
Quantity int NOT NULL,
NetAmount money NOT NULL,
TaxAmount money NOT NULL,
InvoiceAddressID int NOT NULL,
DeliveryAddressID int NOT NULL,
DeliveryDate date NULL,
) ;
DECLARE @Numbers TABLE
(
Number INT
)
;WITH CTE(Number)
AS
(
SELECT 1 Number
UNION ALL
SELECT Number + 1
FROM CTE
WHERE Number < 100
)
INSERT INTO @Numbers
SELECT Number FROM CTE
--Populate ExistingOrders with data
INSERT INTO Orders
SELECT
(SELECT CAST(DATEADD(dd,(SELECT TOP 1 Number
FROM @Numbers
ORDER BY NEWID()),getdate())as DATE)),
(SELECT TOP 1 Number -10 FROM @Numbers ORDER BY NEWID()),
(SELECT TOP 1 Number FROM @Numbers ORDER BY NEWID()),
(SELECT TOP 1 Number FROM @Numbers ORDER BY NEWID()),
500,
100,
(SELECT TOP 1 Number FROM @Numbers ORDER BY NEWID()),
(SELECT TOP 1 Number FROM @Numbers ORDER BY NEWID()),
(SELECT CAST(DATEADD(dd,(SELECT TOP 1 Number - 10
FROM @Numbers
ORDER BY NEWID()),getdate()) as DATE))
FROM @Numbers a
CROSS JOIN @Numbers b
CROSS JOIN @Numbers c ;
CREATE DATABASE Chapter5App2Customers ;
GO
ALTER DATABASE Chapter5App2Customers SET RECOVERY FULL ;
GO
USE Chapter5App2Customers
GO
CREATE TABLE App2Customers
(
ID INT PRIMARY KEY IDENTITY,
FirstName NVARCHAR(30),
LastName NVARCHAR(30),
CreditCardNumber VARBINARY(8000)
) ;
GO
--Populate the table
DECLARE @Numbers TABLE
(
Number INT
) ;
;WITH CTE(Number)
AS
(
SELECT 1 Number
UNION ALL
SELECT Number + 1
FROM CTE
WHERE Number < 100
)
INSERT INTO @Numbers
SELECT Number FROM CTE ;
DECLARE @Names TABLE
(
FirstName VARCHAR(30),
LastName VARCHAR(30)
) ;
INSERT INTO @Names
VALUES('Peter', 'Carter'),
('Michael', 'Smith'),
('Danielle', 'Mead'),
('Reuben', 'Roberts'),
('Iris', 'Jones'),
('Sylvia', 'Davies'),
('Finola', 'Wright'),
('Edward', 'James'),
('Marie', 'Andrews'),
('Jennifer', 'Abraham'),
('Margaret', 'Jones')
INSERT INTO App2Customers(Firstname, LastName, CreditCardNumber)
SELECT FirstName, LastName, CreditCardNumber FROM
(SELECT
(SELECT TOP 1 FirstName FROM @Names ORDER BY NEWID()) FirstName
,(SELECT TOP 1 LastName FROM @Names ORDER BY NEWID()) LastName
,(SELECT CONVERT(VARBINARY(8000)
,(SELECT TOP 1 CAST(Number * 100 AS CHAR(4))
FROM @Numbers
WHERE Number BETWEEN 10 AND 99 ORDER BY NEWID()) + '-' +
(SELECT TOP 1 CAST(Number * 100 AS CHAR(4))
FROM @Numbers
WHERE Number BETWEEN 10 AND 99 ORDER BY NEWID()) + '-' +
(SELECT TOP 1 CAST(Number * 100 AS CHAR(4))
FROM @Numbers
WHERE Number BETWEEN 10 AND 99 ORDER BY NEWID()) + '-' +
(SELECT TOP 1 CAST(Number * 100 AS CHAR(4))
FROM @Numbers
WHERE Number BETWEEN 10 AND 99 ORDER BY NEWID()))) CreditCardNumber
FROM @Numbers a
CROSS JOIN @Numbers b
CROSS JOIN @Numbers c
) d ;



Part2:配置SQL Server


部署SQL Server 2016基于工作组的AlwaysOn AG



Part4:创建AG内数据库的完整备份

BACKUP DATABASE Chapter5App1Customers
TO DISK = N'C:\Backups\Chapter5App1Customers.bak'
WITH NAME = N'Chapter5App1Customers-Full Database Backup' ;
GO
BACKUP DATABASE Chapter5App1Sales
TO DISK = N'C:\Backups\Chapter5App1Sales.bak'
WITH NAME = N'Chapter5App1Sales-Full Database Backup' ;
GO



Part5:将备份在AG内的其他副本上恢复为NORECOVERY


部署SQL Server 2016基于工作组的AlwaysOn AG


部署SQL Server 2016基于工作组的AlwaysOn AG



Part6:将启动账号添加到Logins

--提前创建端点
USE [master]
GO

CREATE ENDPOINT [Hadr_endpoint] 
    STATE=STARTED
    AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
    FOR DATA_MIRRORING (ROLE = ALL, AUTHENTICATION = WINDOWS NEGOTIATE
, ENCRYPTION = REQUIRED ALGORITHM AES)
GO

DECLARE @Server sysname,
@HostName sysname,
@Login sysname,
@SQL nvarchar(max)
;

--获取实例名
SET @Server = CAST(SERVERPROPERTY('ServerName') AS sysname);

--获取机器名(远程执行时HOST_NAME()函数不代表远程主机)
IF CHARINDEX('\\',@Server,1) <> 0
    SET @HostName = SUBSTRING(@Server,1,CHARINDEX('\\',@Server,1)-1);
ELSE
    SET @HostName = @Server;
    
--用到SQL Server Database Engine服务启动账号
SET @Login = @HostName + '\SQLService';

IF NOT EXISTS(SELECT name FROM sys.syslogins WHERE isntuser=1 AND name = @Login)
BEGIN
    --SELECT @Login
    EXEC sp_grantlogin @Login;
    --EXEC sp_addsrvrolemember @Login, 'sysadmin';

    --端点访问授权
    SET @SQL = N'GRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO [' + @Login + ']';
    --SELECT @SQL
    EXEC sp_executesql @SQL;
END



Part7:创建AG


部署SQL Server 2016基于工作组的AlwaysOn AG


部署SQL Server 2016基于工作组的AlwaysOn AG


部署SQL Server 2016基于工作组的AlwaysOn AG


SQL Server 2016 AlwaysOn AG有很多提升,令我影响深刻的是日志吞吐量的提升和redo的提升。这里讲介绍它的另一项关键提升,也就是这个配置选项:Database Level Health Detection


SQL Server 2016使用数据库健康检测增强了AlwaysOn健康诊断。如果你的AG的该选项被勾选,而其中某个数据库变为非ONLINE状态,那么整个AG将会自动故障转移。


部署SQL Server 2016基于工作组的AlwaysOn AG


部署SQL Server 2016基于工作组的AlwaysOn AG


部署SQL Server 2016基于工作组的AlwaysOn AG


部署SQL Server 2016基于工作组的AlwaysOn AG


部署SQL Server 2016基于工作组的AlwaysOn AG


部署SQL Server 2016基于工作组的AlwaysOn AG


部署SQL Server 2016基于工作组的AlwaysOn AG


部署SQL Server 2016基于工作组的AlwaysOn AG


部署SQL Server 2016基于工作组的AlwaysOn AG


部署SQL Server 2016基于工作组的AlwaysOn AG



Part8:检查AG状态


部署SQL Server 2016基于工作组的AlwaysOn AG


部署SQL Server 2016基于工作组的AlwaysOn AG


部署SQL Server 2016基于工作组的AlwaysOn AG



Part9:测试Server01宕机后


部署SQL Server 2016基于工作组的AlwaysOn AG


部署SQL Server 2016基于工作组的AlwaysOn AG


部署SQL Server 2016基于工作组的AlwaysOn AG


部署SQL Server 2016基于工作组的AlwaysOn AG



Part10:测试Server02恢复后


部署SQL Server 2016基于工作组的AlwaysOn AG


部署SQL Server 2016基于工作组的AlwaysOn AG


部署SQL Server 2016基于工作组的AlwaysOn AG


部署SQL Server 2016基于工作组的AlwaysOn AG



参考:

Workgroup and Multi-domain clusters in Windows Server 2016

《SQL Server AlwaysOn Revealed》



相关内容

热门资讯

胡锡进:我不认为特朗普真的能与... 特朗普周三表示,他将与赖清德就对台军售问题进行对话,引起轩然大波。周三,在被记者问到他是否计划就美国...
台北市选情突变:白营曾妍洁退党... 海峡导报综合报道 2026年底台湾地区“九合一”选举临近,岛内各政党积极部署。在国民党传统优势选区的...
空调室外机不转怎么办 如果是因为空调设置错了导致不转,那么可以重新调成正确的模式;如果是因为电源出现故障,那么可以重新插一...
防溅水龙头里面是怎么安的 安装防溅水龙头时,首先我们需要准备好工具:扳手、生料带、防溅水龙头。先将总闸关闭,以免在拆卸原先的水...
安卓手机怎么安装Adobe F... 安卓手机用户可能有时候看不了一些flash动画或者视频。那么安卓手机怎么安装Adobe Flash ...
博士洗衣机的洗涤专用盒A怎么安 1、首先要了解博士洗衣机是哪种型号的。依照小格子中的标注为“1”,此格用做预添加洗衣液,当选择带有预...
燃气灶安不上怎么办 如果您在安装燃气灶时遇到困难或问题,以下是一些可能的解决方案:1.检查燃气管线:首先检查燃气管线是否...
以开放合作释放科技革命潜能 5月18日,由中国贸促会主办的2026年全球贸易投资促进峰会在北京举行。中外与会代表围绕“新质生产力...
“6G网要来了”! 4G实现的是人人通信,5G是人机物通信,而6G将实现人、机、物、灵的通信——“灵”,即具有自主学习、...