2017-04-24 9 views
0

Je fais une sauvegarde complète une fois par mois, puis des sauvegardes incrémentielles entre les deux. Mais entre-temps, d'autres utilisateurs pourraient faire une sauvegarde complète et casser ma chaîne. Je sais qu'il y a une sauvegarde complète avec copie seulement.Existe-t-il une autre solution que la sauvegarde complète en copie seule?

Mais dans mon cas, je ne peux pas savoir quand et qui fera la sauvegarde, donc j'ai besoin de trouver une solution à mettre en œuvre de mon côté pour éviter ce problème.

Est-ce que quelqu'un a une idée ou une solution à mettre en place? Merci beaucoup.

+1

Si les autres utilisateurs sont autorisés à effectuer des sauvegardes? Surtout, s'ils cassent la chaîne en ne cochant pas l'option copy_only. – VDK

+2

Je suggère que votre organisation contrôle qui peut effectuer des sauvegardes plus strictement. –

Répondre

0

Cet exemple de code est un peu sur le côté détaillé pour le rendre plus facile à comprendre, mais la table msdb.dbo.backupset peut vous aider avec cela. https://docs.microsoft.com/en-us/sql/relational-databases/system-tables/backupset-transact-sql

declare @MostRecentAuthorizedFullBackup datetime 
declare @MostRecentUnauthorizedNonCopyOnlyBackup datetime 
declare @AuthorizedBackupUser nvarchar(128) = N'YourBackupUser' 
declare @DatabaseName nvarchar(128) = N'YourDatabase' 

select @MostRecentAuthorizedFullBackup = backup_start_date 
from msdb.dbo.backupset 
where database_name = @DatabaseName 
    and is_copy_only = 0 
    and type = 'D' 
    and user_name = @AuthorizedBackupUser 
order by backup_start_date desc 

select @MostRecentUnauthorizedNonCopyOnlyBackup = backup_start_date 
from msdb.dbo.backupset 
where database_name = @DatabaseName 
    and is_copy_only = 0 
    and type = 'D' 
    and user_name <> @AuthorizedBackupUser 
order by backup_start_date desc 

if @MostRecentAuthorizedFullBackup > @MostRecentUnauthorizedNonCopyOnlyBackup 
begin 
    print 'Differential base is good' 
end 
else 
begin 
    print 'Differential base is bad' 
end 
+0

Merci pour le code. Mais ma question n'était pas de savoir si la chaîne est cassée et si la base différentielle est mauvaise. Je veux savoir s'il y a une solution que je peux implémenter que quelque part et quand quelque part fait une sauvegarde complète qui n'affectera pas mon différentiel? –

+0

La réponse à cette question est non. La seule façon d'éviter la base différentielle brisée est de limiter les autres sauvegardes à la copie uniquement, et il n'y a aucun moyen de l'appliquer sans bloquer leur capacité à faire des sauvegardes du tout. Vous pouvez ajouter une logique conditionnelle à votre sauvegarde pour qu'elle revienne à une sauvegarde complète si la base différentielle est interrompue en raison de la prise en charge par une autre personne d'une sauvegarde non-copie uniquement. –