SQL Server Linux Clusterless AlwaysOn: Changing edition from dev to standard



--sqlcmd -S db1 -U sa -P 'root@123' 

--sqlcmd -S db2 -U sa -P 'root@123' 


more /etc/hosts


192.168.1.10 db1

192.168.1.20 db2

192.168.1.30 db3


---==========================Before Change Edition========================

1. DBs Available

2. Always on Configured & Sync

3. Email Configured


---=======================Changing Edition ==========================

db1@db1:~$     sudo systemctl stop mssql-server


db1@db1:~$ sudo /opt/mssql/bin/mssql-conf setup


Choose the language for SQL Server:

(1) English

(2) Deutsch

(3) Español

(4) Français

(5) Italiano

(6) 日本語

(7) 한국어

(8) Português

(9) Руѝѝкий

(10) 中文 – 简体

(11) 中文 (繝体)

Enter Option 1-11: 1

Enter the SQL Server system administrator password:

Confirm the SQL Server system administrator password:

Configuring SQL Server...

The licensing PID was successfully processed. The new edition is [Standard Edition].


---======================After Change Edition==========================


1. DBs Available

2. Always on Configured & Sync

3. Email Configured


--db1--db2--

sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1

systemctl restart mssql-server

ALTER EVENT SESSION AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON);

ALTER EVENT SESSION AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON);


----db1----------


USE master;

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'root@123';

Go


USE [master]

GO

CREATE CERTIFICATE alwayson1_cert

WITH SUBJECT = 'alwayson1_cert certificate for Availability Group'

GO


select name from sys.certificates;

GO


USE master

GO

CREATE ENDPOINT AGendpoint

STATE = STARTED

AS TCP

(

LISTENER_PORT = 5022, LISTENER_IP = ALL

) FOR DATABASE_MIRRORING

(

AUTHENTICATION = CERTIFICATE alwayson1_cert,

ENCRYPTION = REQUIRED ALGORITHM AES,

ROLE = ALL

); 

GO


select name from sys.endpoints;

go


USE master

GO

BACKUP CERTIFICATE alwayson1_cert

TO FILE = '/var/opt/mssql/data/alwayson1_cert.cer';

GO



sudo scp /var/opt/mssql/data/alwayson1_cert.cer db2@db2:/home/db2


---db2------------


On Secondary(alwayson2)

Sudo su -

cp /home/db2/*.cer /var/opt/mssql/data/

chown mssql:mssql /var/opt/mssql/data/*_cert.cer

chmod 660 /var/opt/mssql/data/*_cert.cer


--Run below script on db2 server

--Create Master Key

Use master

GO

Create master key encryption by password ='root@123';

GO

--Create Certificate

Use master

GO

Create certificate alwayson2_cert with subject = 'alwayson2 certificate for Availability Group'

GO

--Create Endpoint

Create ENDPOINT AGendpoint

STATE=STARTED

AS TCP

(

LISTENER_PORT=5022, LISTENER_IP=ALL

)

FOR DATABASE_MIRRORING

(

AUTHENTICATION = CERTIFICATE alwayson2_cert,

ENCRYPTION = REQUIRED ALGORITHM AES,

ROLE =ALL

);

GO


--Backup Certificate

Backup Certificate alwayson2_cert to file ='/var/opt/mssql/data/alwayson2_cert.cer';

GO

--Copy Certificate to other replicas

--Execute the below command on terminal

--On db2

sudo scp /var/opt/mssql/data/alwayson2_cert.* db1@db1:/home/db1/


--On db1

cp /home/db1/*.cer /var/opt/mssql/data/

chown mssql:mssql /var/opt/mssql/data/*_cert.cer

chmod 660 /var/opt/mssql/data/*_cert.cer


--------

-----db1----


--Create a login on the primary replica

USE [MASTER]

GO

CREATE LOGIN AVG_LOGIN WITH PASSWORD = 'root@123';

GO

--Create a user for the login

USE [MASTER]

GO

CREATE USER AVG_LOGIN FOR LOGIN AVG_LOGIN

GO


-Associate certificate from clusteralwayson2 with user

CREATE CERTIFICATE alwayson2_cert

AUTHORIZATION AVG_LOGIN

FROM FILE = '/var/opt/mssql/data/alwayson2_cert.cer'

GO


-Run this on primary replica clusteralwayson1--Grant the CONNECT permission on the login

USE [MASTER]

GO

GRANT CONNECT ON ENDPOINT::AGendpoint TO [AVG_LOGIN];

GO


--------db2------------


--Run this on the secondary replica alwayson2.

--Repeat the same process for steps #10 to #13 on the secondary replicas

USE master

GO

CREATE LOGIN AVG_login WITH PASSWORD = 'root@123';

GO

CREATE USER AVG_login FOR LOGIN AVG_login ;

GO

--Associate certificate from clusteralwayson1 with user

CREATE CERTIFICATE alwayson1_cert AUTHORIZATION AVG_login

FROM FILE = '/var/opt/mssql/data/alwayson1_cert.cer'

GO

GRANT CONNECT ON ENDPOINT::AGendpoint TO AVG_login;

GO


---------


On primary:

--create database pt

go

-- Full DB Backup

BACKUP DATABASE [pt] TO DISK = '/var/opt/mssql/backup/pt.bak'

-- Tlog Backup

BACKUP LOG [pt] TO DISK = '/var/opt/mssql/backup/pt.trn'

On Secondary:

-- Full DB restore

RESTORE DATABASE [pt] FROM DISK = '/var/opt/mssql/data/pt.bak' WITH NORECOVERY

-- Tlog restore

RESTORE LOG [pt] FROM DISK = '/var/opt/mssql/data/pt.trn' WITH NORECOVERY


--------


--db2--db3

mkdir -p /home/db2/backup

chmod -R 777 /home/db2/backup



Copy the backup to secondaries


On primary

sudo scp /var/opt/mssql/backup/* db2@db2:/home/db2/backup

sudo scp /var/opt/mssql/backup/* db3@db3:/home/db3/backup


NOTE--scp will only work etc host entry of server 


On Secondary

cp /home/db2/backup/pt.bak  /var/opt/mssql/data/

cp /home/db2/backup/pt.trn  /var/opt/mssql/data/


chown mssql:mssql /var/opt/mssql/data/pt.bak /var/opt/mssql/data/pt.trn

chmod 660 /var/opt/mssql/data/pt.bak         /var/opt/mssql/data/pt.trn


-------------


On primary (db1)



CREATE AVAILABILITY GROUP [clusterlessAG]

WITH (DB_FAILOVER = ON, CLUSTER_TYPE = NONE)

FOR REPLICA ON

N'db1'

WITH (

ENDPOINT_URL = N'tcp://db1:5022',

AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,

FAILOVER_MODE = Manual,

SEEDING_MODE = Manual),

N'db2'

WITH (

ENDPOINT_URL = N'tcp://db2:5022',

AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,

FAILOVER_MODE = Manual,

SEEDING_MODE = Manual

);

Go

ALTER AVAILABILITY GROUP [clusterlessAG] GRANT CREATE ANY DATABASE;


-------------


Note – Run on all the Secondary replicas

ALTER AVAILABILITY GROUP [clusterlessAG] JOIN WITH (CLUSTER_TYPE = NONE);

ALTER AVAILABILITY GROUP [clusterlessAG] GRANT CREATE ANY DATABASE;


Note – Run on the primary

ALTER AVAILABILITY GROUP [clusterlessAG] ADD DATABASE [pt];


Run the below on secondary replica:

ALTER DATABASE [pt] SET HADR AVAILABILITY GROUP = [clusterlessAG];

-------

On each secondary SQL Server replica, run the following query to see if the anurag_test_db database was created and is synchronized:

SELECT name,create_date FROM sys.databases WHERE name = 'anurag_test_db';

GO

SELECT DB_NAME(database_id) AS 'database', synchronization_state_desc FROM sys.dm_hadr_database_replica_states;


Post a Comment