Wiederherstellungsmodus per Script ändern

J

Joshua

Guest
Moin zusammen,

ich bin der Neue und komm jetzt öfter. ;-)

Ich kopiere gerade eine ganze Latte Datenbanken von Server A auf Server B (über der Assi); obwohl die Datenbanken auf Server A den Wiederherstellungsmodus "Einfach" verwenden, werden Sie auf Server B als "Vollständig" wiederhergestellt.

Da es sich nur um einen Entwicklungs- und nicht um einen Produktivserver handelt, ist genau das nicht gewollt. Bevor ich nun jede Datenbank händisch auf "Einfach" umstelle und das Protokoll verkleinere, dachte ich mir: Das geht bestimmt per Script - die Frage ist nur, wie?

Ich bin nicht wirklich bewandert damit, daher bitte ich euch um Hilfe; das Auflisten der Datenbanken mittels
use master
selecet name from sys.databases

habe ich schon hinbekommen, auch das Umstellen auf "Einfach" mit einer einzelnen Datenbank krieg ich hin:
alter database database_name set recovery simple

Wie bekomme ich das nun hin, das alle Datenbanken, deren Name mit "xyz" beginnt, auf "Einfach" gestellt und das Protokoll verkleinert wird?

Bin für jede Hilfe wirklich dankbar!

Cheers,
Joshua
 
Werbung:
AW: Wiederherstellungsmodus per Script ändern

Hallo Joshua,

ist für SQL-Server 2000 kann man aber leicht auf die neuen Tabellen und Spaltennamen umstellen.

Code:
use master
go
DECLARE @DBName nvarchar(128)
DECLARE @DBID int
DECLARE @SQLSTR nvarchar(500)
 
SELECT @DBID = min(dbid) FROM dbo.sysdatabases
WHILE @DBID IS NOT NULL
BEGIN
 SELECT @DBName = [Name] FROM dbo.sysdatabases
 WHERE DBID = @DBID
 
 IF @DBName LIKE 'xyz%'
 BEGIN
  SET @SQLSTR = 'alter database ' + @DBNAME + ' set recovery simple'
 
  PRINT @SQLSTR
  --EXEC sp_executesql @SQLSTR  
 END
 
 
 SELECT @DBID= min(dbid) FROM dbo.sysdatabases
 WHERE dbid > @DBID
END


Ich habe die Zeile EXEC sp_executesql @SQLSTR erstmal auskommentiert damit man die erzeugten SQL-Statements mit PRINT @SQLSTR prüfen kann.
Gruß Charly
 
AW: Wiederherstellungsmodus per Script ändern

Danke@Charly.

Natürlich habe ich vergessen zu erwähnen, welchen SQL Server ich einsetze, mea culpa.

Wir arbeiten mit SQL 2008 R2.

Cheers,
Joshua
 
AW: Wiederherstellungsmodus per Script ändern

Funktioniert auch unter SQL 2008 R2 - prima, vielen, vielen Dank!

Cheers,
Joshua
 
AW: Wiederherstellungsmodus per Script ändern

@Charly:
Ich habe versucht, SHRINK DATABASE_LOG mit einzubauen, scheitere aber kläglich.
Kannst du mich nochmal schubsen?

Nach dem Umstellen auf "Einfach" sollen alle Protokolle verkleinert werden.

Ich würde das Skript dann täglich (bzw. "nächtlich" *g*) laufen lassen.

Danke schonmal!

Cheers,
Joshua
 
AW: Wiederherstellungsmodus per Script ändern

Hallo Charly,

keine Express Edition, Wartungsplan käme dann sowieso zum Einsatz. ;-)

SHRINKDATABASE ist allerdings genau das, was ich nicht möchte. Händisch ausgeführt verkleinere ich explizit nur die Datei, nicht die Datenbank.

Allerdings funktioniert der Aufruf von SHRINKFILE im Skript noch nicht richtig...

Cheers,
Joshua
 
Werbung:
AW: Wiederherstellungsmodus per Script ändern

Hallo Joshua,

so gehts.

Code:
use master
go
DECLARE @DBName nvarchar(128)
DECLARE @DBID int
DECLARE @SQLSTR nvarchar(128)
DECLARE @FILENAME nvarchar(128)
 
CREATE TABLE #FNAME ([name] nvarchar(500))
SELECT @DBID = min(dbid) FROM dbo.sysdatabases
WHILE @DBID IS NOT NULL
BEGIN
 SELECT @DBName = [Name] FROM dbo.sysdatabases
 WHERE DBID = @DBID
 
 IF @DBName LIKE 'dat%'
 BEGIN
 EXEC ('INSERT #FNAME SELECT [name] FROM ' + @DBName + '.dbo.sysfiles WHERE RTRIM(filename) like ''%.ldf''')
 SELECT @FILENAME = [name] FROM #FNAME
 EXEC('USE ' + @DBNAME + ' DBCC SHRINKFILE (' + @FILENAME + ')')
 
 DELETE FROM #FNAME
 END
 SELECT @DBID= min(dbid) FROM dbo.sysdatabases
 WHERE dbid > @DBID
END
DROP TABLE #FNAME

Nachdem ich ein positives Ergebnis hatte habe ich nicht weiter daran rumoperiert. Voraussetzung ist nur ein Logfile pro DB. Andernfalls brauchst Du noch eine Schleife für die Tabelle #FNAME.
Wahrscheinlich lässt sich das ganze noch optimieren. Dazu fehlt mir jetzt aber so ein bisschen die Lust.:D

Gruß Charly
 
Zurück
Oben