Benutzer-Werkzeuge

Webseiten-Werkzeuge


blog:2010:0601_wiederherstellungsmodus-bei-allen-datenbanken-aendern

Wiederherstellungsmodus 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 OFF
END
blog/2010/0601_wiederherstellungsmodus-bei-allen-datenbanken-aendern.txt · Zuletzt geändert: 2019/12/27 11:58 (Externe Bearbeitung)