Zum Inhalt

Monat: Mai 2010

Wiederherstellungsmodell bei allen Datenbanken ändern

Will man alle Datenbanken, bspw. auf einem Testserver, in den Wiederherstellungsmodell »Einfach« versetzen, so kann man das ganz einfach per TSQL Statement vornehmen

use master  
SELECT 'ALTER DATABASE [' + name + '] SET RECOVERY SIMPLE' from master..sysdatabases where name not in ('master','model','msdb','tempdb')

Der obige SELECT erzeugt die Statements, die man dann ausführen muss, um das Wiederherstellungsmodell zu verändern.

Alternativ kann man so die Datenbank auch in die anderen beiden Wiederherstellungsmodi versetzen. Hierfür muss »SIMPLE« im obigen Statement nur durch »FULL« oder »BULK_LOGGED« ersetzt werden. Will man diesen Vorgang automatisieren, so kann man hierfür bspw. eine Stored Procedure erstellen, die Nachts automatisch als Auftrag vom SQL Server ausgeführt wird. So könnte hier ein simples Beispiel aussehen:

CREATE PROCEDURE SetRecoveryMode
AS
BEGIN
 
	SET NOCOUNT ON
 
	DECLARE @ToDo TABLE 
	( 
		ID int IDENTITY PRIMARY KEY,
		Statement nvarchar(max),
		Completed bit
	)
 
	INSERT INTO @ToDo (Statement, Completed)
	SELECT 'ALTER DATABASE [' + name + '] SET RECOVERY SIMPLE', 0
	from master..sysdatabases where name not in ('master','model','msdb','tempdb') 	
 
	DECLARE @CurrentID int
	DECLARE @CurrentStatement nvarchar(max)
 
	WHILE EXISTS (SELECT * FROM @ToDo WHERE Completed = 0)
	BEGIN
		SELECT TOP 1 @CurrentID = ID,
					 @CurrentStatement = Statement
		FROM @ToDo
		WHERE Completed = 0
		ORDER BY ID ASC
 
		EXEC (@CurrentStatement)
 
		UPDATE @ToDo
		SET Completed = 1
		WHERE ID = @CurrentID
	END
 
	SET NOCOUNT ON
END