How to add newly created Database to Alwayson Availability Group (AAG) automatically

How to add newly created Database to Alwayson Availability Group (AAG) automatically

This script help you to add newly created Database to Alwayson Availability Group (AAG) automatically , as soon as passible.

In the first step, the following lines should be executed only once in all nodes.

use master
go
-- Rename the avgShayan to your desired name
ALTER AVAILABILITY GROUP [avgShayan] GRANT CREATE ANY DATABASE;
go

After performing the above change, you can now add the database to your AAG with the following script.

This script must be scheduled as a job in all nodes to run automatically in a period of time (every 15 min).

Use master
go


DECLARE @dbid int, @dbname nvarchar(50),  
    @sqlrecovermodel varchar(300),@sqlbackup varchar(300),  
	@sqlavgmodrep varchar(300),@sqlavgadddb varchar(300),
	@avgname varchar(200),@replicaname varchar(200),
	@replicastate varchar(100);


select @avgname=name from sys.availability_groups_cluster


select @replicastate=role_desc from sys.dm_hadr_availability_replica_states
where is_local=1


if (@replicastate='PRIMARY')
Begin
	
	DECLARE dblist CURSOR FOR   
	select d.database_id as dbid ,d.name as dbname from sys.databases d
	where 
	d.name not in ('master','tempdb','model','msdb') and
	d.name not in (
	SELECT db.name FROM master.sys.dm_hadr_database_replica_states rs
	JOIN master.sys.databases db ON rs.database_id = db.database_id
	WHERE is_local = 1 AND is_primary_replica = 1)
	  
	OPEN dblist  
	  
	FETCH NEXT FROM dblist   
	INTO @dbid, @dbname  
	  
	WHILE @@FETCH_STATUS = 0  
	BEGIN  
	    
		set @sqlrecovermodel='ALTER DATABASE ['+@dbname+'] SET RECOVERY FULL WITH NO_WAIT;';
		Execute (@sqlrecovermodel);
		
		set @sqlbackup='backup database ['+@dbname+'] to disk=''nul'' with compression;';
		Execute (@sqlbackup);
	  
			DECLARE replicalist CURSOR FOR   
			select rc.replica_server_name from sys.dm_hadr_availability_replica_cluster_states rc join sys.dm_hadr_availability_replica_states rs
			on rc.replica_id=rs.replica_id
			where rs.is_local=0
			
			OPEN replicalist  
			
			FETCH NEXT FROM replicalist   
			INTO @replicaname 
			
			WHILE @@FETCH_STATUS = 0  
			BEGIN  
			
				set @sqlavgmodrep='ALTER AVAILABILITY GROUP ['+@avgname+'] MODIFY REPLICA ON N'''+@replicaname+''' WITH (SEEDING_MODE = AUTOMATIC);';
				Execute (@sqlavgmodrep);
				
				FETCH NEXT FROM replicalist   
				INTO @replicaname 
			END   
			CLOSE replicalist;  
			DEALLOCATE replicalist;
	  
		set @sqlavgadddb='ALTER AVAILABILITY GROUP ['+@avgname+'] ADD DATABASE ['+@dbname+'];';
		Execute (@sqlavgadddb);
	  
		
		FETCH NEXT FROM dblist   
	    INTO @dbid, @dbname  
	END   
	CLOSE dblist;  
	DEALLOCATE dblist;


END;


go

Bahram Shayan @990605

To view or add a comment, sign in

More articles by Bahram Shayan

  • about Sql DataBase Backup

    هشت نكته مهم و ضروري درباره بكاپ از ديتابيسهای SQL Server 1) اگر ديتابيس شما روي پيشرفته ترين Storage قرار داشته باشد،…

Others also viewed

Explore content categories