Ein SQL-Statement auf alle DBs eines Servers oder alle Tabellen einer DB anwenden (MSSQL)
14.02.2011
19:01:41 Uhr2675 Aufrufe
1 Antwort
19:01:41 Uhr
1 Antwort
Hilfreich +1
'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:
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:
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:
Vielleicht kann ich hiermit dem ein oder anderen ein bisschen was vereinfachen...
Gruß
MiniStrator
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'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.sqlJede Tabelle bedienen geht zum Bleistift so:
01.
use dbname 02.
go 03.
04.
EXEC sp_MSForEachTable 'SELECT ''?'', COUNT(*) FROM ?'Gruß
MiniStrator






