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:
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
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'
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
Jede Tabelle bedienen geht zum Bleistift so:
use dbname
go
EXEC sp_MSForEachTable 'SELECT ''?'', COUNT(*) FROM ?'
Gruß
MiniStrator
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 160759
Url: https://administrator.de/contentid/160759
Ausgedruckt am: 24.11.2024 um 13:11 Uhr
1 Kommentar