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 09.02.2011 um 18:41:55 Uhr
Codeformatierung.

Content-ID: 160476

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

Ausgedruckt am: 22.11.2024 um 16:11 Uhr

MiniStrator
MiniStrator 09.02.2011 um 21:58:39 Uhr
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
0belixx
0belixx 14.02.2011 um 10:10:10 Uhr
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
0belixx
0belixx 14.04.2011 um 13:52:28 Uhr
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
MiniStrator
MiniStrator 15.04.2011 um 00:07:22 Uhr
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
99045
99045 15.04.2011 um 00:17:24 Uhr
Goto Top
@0belixx
Hi,

auch du könntest in deinen Beiträgen die Formatierungen in den Beiträgen 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ß