ministrator
Goto Top

Ein SQL-Statement auf alle DBs eines Servers oder alle Tabellen einer DB anwenden (MSSQL)

'Jeder' musste wahrscheinlich schon einmal ein Statement auf *alle* Datenbanken eines SQL-Servers absetzen. Meist wird dann ein Cursor gebastelt...

Es gibt eine system stored procedure namens sp_msforeachdb. Die klappert alle DBs ab und führt das gewünschte aus.

Damit kann man z.B. alle Userdatenbanken sichern:
EXEC sp_MSForEachDB 'IF DB_NAME((SELECT dbid FROM sysdatabases WHERE [Name]= ''?'')) NOT IN (''tempdb'',''master'',''model'',''msdb'') BACKUP DATABASE [?] TO DISK = N''b:\ackuppfad\?.bak'' WITH NOFORMAT, NOINIT, NAME = N''?-Backupbezeichnung'', SKIP, NOREWIND, NOUNLOAD'  
Oder ohne den Select um alle Tabellen zu sichern. Genauso geht das auch mit BACKUP LOG oder irgendwelchen DBCC-sachen

Dies kann man in eine Datei schreiben, sagen wir backup.sql und dann mittels osql.exe (im Bsp. lokal) ausführen:
osql -E -i p:\fad\backup.sql
Hervorragen zum batchen geeignet. In Verbindung mit psexec kriegt man da ein 1A zentral gesteuertes Backup hin, es wird alles nacheinander aufgerufen, man braucht sich um keine Startzeiten mehr zu kümmern, etc. Und alles ohne Zusatzkosten.

Jede Tabelle bedienen geht zum Bleistift so:
use dbname
go

EXEC sp_MSForEachTable 'SELECT ''?'', COUNT(*) FROM ?'  
Vielleicht kann ich hiermit dem ein oder anderen ein bisschen was vereinfachen...

Gruß

MiniStrator

Content-Key: 160759

Url: https://administrator.de/contentid/160759

Printed on: April 24, 2024 at 10:04 o'clock

Member: emjott
emjott Feb 15, 2011 at 12:24:29 (UTC)
Goto Top
sehr nettes Scriptchen!

Gruß Emjott