0belixx
Goto Top

SQL Variable mit Batch benutzen?

Hi

ich habe folgendes Problem. Ich muss eine Sicherung einer Datenbank (es gibt immer nur eine) von einer Istance (es gibt immer nur eine) und einem SQL Server (es gibt immer nur einen) deren Namen ich nicht kenne (die User nenne das Zeug immer anders).
Habe bisher das zusammen bekommen aber bei der Datenbank komm ich nicht mehr weiter. Hat da jemand eine zündende Idee?
::SQL Server
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\Machines" /v OriginalMachineName') DO SET SQLSERVER=%%B  
ECHO %SQLSERVER%

::SQL Instace
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server" /v InstalledInstances') DO SET SQLInstance=%%B  
ECHO %SQLInstance%




sqlcmd -Q "BACKUP DATABASE Datenbankname TO DISK='C:\MSSQL\MSSQL10.MSSQLSERVER\MSSQL\Backup\SQLBackup.bak' WITH INIT" -S %SQLSERVER%\%SQLInstance%  
IF NOT EXIST C:\MSSQL\MSSQL10.MSSQLSERVER\MSSQL\Backup\SQLBackup.bak goto :SQLFehler
del M:\System\SQLSicherung05.bak /Q
move M:\System\SQLSicherung04.bak M:\System\SQLSicherung05.bak
move M:\System\SQLSicherung03.bak M:\System\SQLSicherung04.bak
move M:\System\SQLSicherung02.bak M:\System\SQLSicherung03.bak
move M:\System\SQLSicherung01.bak M:\System\SQLSicherung02.bak
move C:\MSSQL\MSSQL10.MSSQLSERVER\MSSQL\Backup\SQLBackup.bak M:\System\SQLSicherung01.bak

goto Exit

:SQLFehler
Echo SQLFehler

:exit
Kommentar vom Moderator Biber am Feb 09, 2011 um 17:41:55 Uhr
Codeformatierung.

Content-Key: 160476

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

Printed on: April 19, 2024 at 05:04 o'clock

Member: MiniStrator
MiniStrator Feb 09, 2011 at 20:58:39 (UTC)
Goto Top
Hi,

es gibt eine undokumentierte system stored procedure, die heißt sp_msforeachdb, damit kannst du ein Kommando auf alle Datenbanken absetzen.
Dann gibts noch eine osql.exe im Installationsverzeichnis, ich glaub unter binn, die kann eine Textdatei als SQL-Script ausführen. (osql /?)
Frag mich nicht nach Syntaxen, ich muss auch immer googeln.

Dann kenn ich noch ein Tool namens Expressmaint, ist auch googlebar... Schaus dir mal an

Gruß,
MiniStrator
Member: 0belixx
0belixx Feb 14, 2011 at 09:10:10 (UTC)
Goto Top
Hi MiniStrator

danke für deine zündende Idee, hab das jetzt so gelöst:

::SQL Server
@echo OFF
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\Machines" /v OriginalMachineName') DO SET SQLSERVER=%%B
ECHO %SQLSERVER%

::SQL Instace
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server" /v InstalledInstances') DO SET SQLInstance=%%B
ECHO %SQLInstance%


sqlcmd -Q "EXEC sp_MSForEachDB 'IF DB_NAME((SELECT dbid FROM sysdatabases WHERE [Name]= ''?'')) NOT IN (''tempdb'',''master'',''model'',''msdb'') BACKUP DATABASE [?] TO DISK = N''C:\MSSQL\MSSQL10.MSSQLSERVER\MSSQL\Backup\?.bak'' WITH NOFORMAT, NOINIT, NAME = N''?-Full Database Backup'', SKIP, NOREWIND, NOUNLOAD'" -S %SQLSERVER%
M:\System\DS_SQL\7z.exe a C:\MSSQL\MSSQL10.MSSQLSERVER\MSSQL\Backup\SQLBackup.zip C:\MSSQL\MSSQL10.MSSQLSERVER\MSSQL\Backup\
IF NOT EXIST C:\MSSQL\MSSQL10.MSSQLSERVER\MSSQL\Backup\SQLBackup.zip goto :SQLFehler
del M:\System\SQLSicherung05.bak /Q
move M:\System\DS_SQL\SQLSicherung04.zip M:\System\DS_SQL\SQLSicherung05.zip
move M:\System\DS_SQL\SQLSicherung03.zip M:\System\DS_SQL\SQLSicherung04.zip
move M:\System\DS_SQL\SQLSicherung02.zip M:\System\DS_SQL\SQLSicherung03.zip
move M:\System\DS_SQL\SQLSicherung01.zip M:\System\DS_SQL\SQLSicherung02.zip
move C:\MSSQL\MSSQL10.MSSQLSERVER\MSSQL\Backup\SQLBackup.zip M:\System\DS_SQL\SQLSicherung01.zip
del C:\MSSQL\MSSQL10.MSSQLSERVER\MSSQL\Backup\*.* /Q

goto Exit

:SQLFehler
Echo SQLFehler

:exit
Member: 0belixx
0belixx Apr 14, 2011 at 11:52:28 (UTC)
Goto Top
Hallo Leute,

ich muss den Eintrag nochmal aktivieren.

jetzt habe ich nehmlich den Fall das ich eine Instance ansprechen muss. Da funktioniert das Script aber nicht es wird immer nur die erste Datenbank gesichert.

Kann jemand helfen.

Beste Grüsse.
0belixx
Member: MiniStrator
MiniStrator Apr 14, 2011 at 22:07:22 (UTC)
Goto Top
Hi,

meinst du die erste Datenbank jeder Instanz oder die Datenbanken der ersten Instanz? Mach doch einen neuen Fred auf, mit deinem Ist-Zustand und der Anforderung 'mehrere Instanzen'
Das Problem liegt hier dabei, dass dein Codeblock 'SQLInstance' einen registrykey ausließt in dem Zeilenumbrüche vorhanden sind. Und diese werden vom Batch als \0 zurückgegeben. Ob die der 'delims' irgendwie kann weiß ich nicht.
Zumindest wirst du um das Ganze ne Schleife rumbasteln müssen.

Bei ner Frage nach eben diesem Problem kriegst du bestimmt ne Antwort von Bastla, Biber und/oder Konsorten...

Gruß
MiniStrator
Mitglied: 99045
99045 Apr 14, 2011 at 22:17:24 (UTC)
Goto Top
@0belixx
Hi,

auch du könntest in deinen Beiträgen die Formatting instructions in the posts verwenden (Formatierungshilfe im Eingabefenster), das tut nicht weh und liest sich besser. face-wink

ich muss den Eintrag nochmal aktivieren.
Dann musst du auch den gelöst/erledigt Haken wieder wegnehmen, sonst könnte es nämlich sein, dass du keine Antwort bekommst.

Gruß