SQL-Script zur Änderung des Wiederherstellungsmodells

Hallo,

ein kleines, aber feiner Script, welches dem Einen oder Anderen hilft, das Wiederherstellungsmodell vieler Datenbanken auf einem SQL-Server zu ändern (hier von FULL auf SIMPLE), und dabei auch noch die (nicht mehr benötigten) Log-Dateien verkleinert:

declare @DatabaseName varchar(max)
declare @string varchar(max)
 
declare my_cursor cursor
local static read_only forward_only
for
select name from sys.databases where database_id > 11 and recovery_model = 1 and state = 0
order by database_id
open my_cursor
fetch next from my_cursor into @DatabaseName
while @@Fetch_status = 0
Begin
print @DatabaseName 
set @string = ‚alter database ‚ + quotename(@DatabaseName) + ‚ set recovery simple‘
exec (@string)
set @string = ‚use ‚ + quotename(@DatabaseName) + ‚ DBCC SHRINKFILE (2)‘
exec (@string)
fetch next from my_cursor into @DatabaseName
end
close my_cursor
deallocate my_cursor
 
Mit Hilfe des Scripts konnte ich das Recovery-Modell (welches ja standardmäßig von der modell-DB übernommen wird) bei 500+ DBs innerhalb 5 Minuten ändern und gleichzeitig noch 50GB Speicher freischaufeln.
 
Wichtige Elemente des Scripts sind
select name
from sys.databases where database_id > 11 and recovery_model = 1 and state = 0
order by database_id
Hierdurch werden alle DB-Namen gezogen, die in die Kriterien fallen. „recovery_modell = 1“ bedeutet FULL, „state = 0“ bedeutet, dass die DB Online ist.
Weiterhin wichtig
 
set @string = ‚alter database ‚ + quotename(@DatabaseName) + ‚ set recovery simple‘
exec (@string)
set @string = ‚use ‚ + quotename(@DatabaseName) + ‚ DBCC SHRINKFILE (2)‘
exec (@string)
 
Hierdurch wird zuerst für die DB das Wiederherstellungs-Modell auf SIMPLE gesetzt, dann wird die LOG-Datei geshrinked.
 
Betrachtet das Script als Baugrundgerüst, um ein Eigenes an eure Umgebung angepasstes zu entwickeln. Und ein paar Versuche in einer Test-Umgebung schaden natürlich auch nicht.
 
Viel Spaß

2 Gedanken zu „SQL-Script zur Änderung des Wiederherstellungsmodells“

  1. In der Beschreibung des Codes ist ein kleiner Fehler: dort steht „recovery_modell = 3“ bedeutet FULL
    Aber das ist falsch denn 3 bedeutet SIMPLE und 1 bedeutet FULL. Aber im eigentlichen Code ist alles korrekt 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert