AG(Availability Group) ‘a dahil olan veritabanlarının backup’ını almak

6 Eyl by NURULLAH ÇAKIR

AG(Availability Group) ‘a dahil olan veritabanlarının backup’ını almak

Normalde tüm veritabanlarının backup’larını bir yazılım kullanarak ya da Maintenance Plan kullanarak alıyor olabilirsiniz. Ama bazen AG bazında backup senaryonuzdan ayrı olarak backup almaya ihtiyacınız olabilir. Tek tek AG’ye dahil olan veritabanlarını bulup tek tek backup’larını almak işimizi baya uzatacaktır. Aşağıdaki script yardımıyla Cursor kullanarak bir AG’ye dahil olan veritabanlarının backup’ı nı alabilirsiniz. AGNAME yazan yere hangi AG’ye ait veritabanlarının backup’ını alacaksanız o AG’nin ismini yazmanız gerekiyor.  SET @path = ‘C:\Backup’  ‘taki C:\Backup yazan yere de hangi path’e backup almak istiyorsanız o path’i yazmalısınız.

DECLARE @name VARCHAR(50) -- veritabanı ismi  
DECLARE @path VARCHAR(256) -- backup dosyaları için path  
DECLARE @fileName VARCHAR(256) -- backup için file ismi 
DECLARE @fileDate VARCHAR(20)  --backup dosyasına eklenecek tarih
 
SET @path = 'C:\Backup'  
 
 
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) 
 
 
DECLARE db_cursor CURSOR FOR  
SELECT DISTINCT
dbcs.database_name AS name
FROM master.sys.availability_groups AS AG
LEFT OUTER JOIN master.sys.dm_hadr_availability_group_states as agstates
   ON AG.group_id = agstates.group_id
INNER JOIN master.sys.availability_replicas AS AR
   ON AG.group_id = AR.group_id
INNER JOIN master.sys.dm_hadr_availability_replica_states AS arstates
   ON AR.replica_id = arstates.replica_id AND arstates.is_local = 1
INNER JOIN master.sys.dm_hadr_database_replica_cluster_states AS dbcs
   ON arstates.replica_id = dbcs.replica_id
LEFT OUTER JOIN master.sys.dm_hadr_database_replica_states AS dbrs
   ON dbcs.replica_id = dbrs.replica_id AND dbcs.group_database_id = dbrs.group_database_id
WHERE ISNULL(arstates.role, 3) = 1 AND ISNULL(dbcs.is_database_joined, 0) = 1 AND AG.name='AGNAME'
ORDER BY  dbcs.database_name
 
   
 
OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @name   
 
 
WHILE @@FETCH_STATUS = 0   
BEGIN   
       SET @fileName = @path + @name + '_' + @fileDate + '.BAK'  
       BACKUP DATABASE @name TO DISK = @fileName  WITH COMPRESSION,COPY_ONLY
 
 
       FETCH NEXT FROM db_cursor INTO @name   
END   
 
 
CLOSE db_cursor   

DEALLOCATE db_cursor

 

Loading

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir