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