364
boesi666

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

Mitglied: MiniStrator
14.02.2011
19:01:41 Uhr
2675 Aufrufe
1 Antwort
'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:
01.
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:
01.
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:
01.
use dbname 
02.
go 
03.
 
04.
EXEC sp_MSForEachTable 'SELECT ''?'', COUNT(*) FROM ?'
Vielleicht kann ich hiermit dem ein oder anderen ein bisschen was vereinfachen...

Gruß

MiniStrator

Diskussionsverlauf (1 Antwort)
Mitglied: emjott
emjott schreibt am 15.02.2011 um 13:24:29 Uhr
sehr nettes Scriptchen!

Gruß Emjott
mehr ...Ähnliche Beiträge