Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

SQLCMD benutzt in einer Batch die falsche SQL-Instanz

Frage Entwicklung Datenbanken

Mitglied: Seelbreaker

Seelbreaker (Level 1) - Jetzt verbinden

09.06.2009, aktualisiert 15:54 Uhr, 4391 Aufrufe, 4 Kommentare

Es wird eine Batch ausgeführt die mittels SQLCMD mehrere Datenbanken verteilt auf 2 Server und 2 Instanzen Datenbanken sichern soll:
Server 1 --> Instanz1 --> Datenbanken 1-5
Server 2 --> Instanz2 --> Datenbanken 6-16

Danach läuft noch Defragmentierungstask los, der ist aber auskommentiert, da erstmal die SQL Sicherung laufen soll.

Die Batch wird von Server 1 ausgeführt mit als Domänenadmin.

Die von mir geposteten Batches etc. lassen sich unter Notepad++ besser lesen :P

Mein Problem ist nun, dass in der Batch die Datenbanken vom 1. Server und der 1. Instanz ordnungsgemäß gesichert werden.

Sobald der Task für Server2--> Instanz2--> DB 6-16 losläuft sucht der aber komischerweise auf dem 1. Server und der 1. Instanz...

Hier mal meine Batch.

Daraufhin folgt ein Log von der 1. Sicherung die erfolgreich durchläuft und die Übergabedatei für SQLCMD. Danach Log und Übergabedatei für SQLCMD der 2. Sicherung bei der mein Problem besteht.

01.
@echo off 
02.
 
03.
REM Umgebungsvariablen festlegen 
04.
REM Server 
05.
SET S1=LXSRV3 
06.
SET S2=LXSRV2 
07.
SET S3=LXDC1 
08.
 
09.
REM Instanzen 
10.
SET Instanz1=Instanz01 
11.
SET Instanz2=w4a 
12.
SET Instanz3= 
13.
SET Instanz4= 
14.
 
15.
REM Datenbanken 
16.
SET DB1=EHF_Test 
17.
SET DB2=eloam 
18.
SET DB3=blab 
19.
SET DB4=blub 
20.
SET DB5=blib 
21.
SET DB6=db_10it 
22.
SET DB7=db_zp_10it_banking 
23.
SET DB8=Northwind 
24.
SET DB9=pubs 
25.
SET DB10=Work 
26.
SET DB11=Workdef 
27.
SET DB13=WorkM001 
28.
SET DB14=WorkM002 
29.
SET DB15=WorkM003 
30.
SET DB16=WorkM004 
31.
SET DB17= 
32.
SET DB18= 
33.
SET DB19= 
34.
SET DB20= 
35.
 
36.
REM Sicherungspfade (wo die Backups und Logs hinkommen) 
37.
SET Sicherungspfad1=E:\sql-test\%Instanz1%\ 
38.
SET Sicherungspfad2=E:\sql-test\%Instanz2%\ 
39.
 
40.
REM Überprüfen auf das Vorhandensein für das Sicherungsverzeichnis für die Sicherung1 
41.
if exist %Sicherungspfad1% goto Sicherung1 
42.
mkdir %Sicherungspfad1% 
43.
 
44.
 
45.
 
46.
REM Sicherung aller Datenbanken auf Server 1, Instanz1 
47.
:Sicherung1 
48.
sqlcmd -e -s \S1\Instanz1 -i C:\sql_save\%Instanz1%\%DB1%.sql -o %Sicherungspfad1%%DB1%.txt 
49.
REM sqlcmd -e -s \S1\Instanz1 -i C:\sql_save\%Instanz1%\%DB2%.sql -o %Sicherungspfad1%%DB2%.txt 
50.
REM sqlcmd -e -s \S1\Instanz1 -i C:\sql_save\%Instanz1%\%DB3%.sql -o %Sicherungspfad1%%DB3%.txt 
51.
REM sqlcmd -e -s \S1\Instanz1 -i C:\sql_save\%Instanz1%\%DB4%.sql -o %Sicherungspfad1%%DB4%.txt 
52.
REM sqlcmd -e -s \S1\Instanz1 -i C:\sql_save\%Instanz1%\%DB5%.sql -o %Sicherungspfad1%%DB5%.txt 
53.
 
54.
 
55.
 
56.
REM Überprüfen auf das Vorhandensein für das Sicherungsverzeichnis für die Sicherung2 
57.
if exist %Sicherungspfad2% goto Sicherung2 
58.
mkdir %Sicherungspfad2% 
59.
 
60.
REM Sicherung aller Datenbanken auf Server 2, Instanz 2 
61.
:Sicherung2 
62.
REM sqlcmd -e -s \S2\Instanz2 -i C:\sql_save\%Instanz2%\%DB6%.sql -o %Sicherungspfad2%%DB6%.txt 
63.
REM sqlcmd -e -s \S2\Instanz2 -i C:\sql_save\%Instanz2%\%DB7%.sql -o %Sicherungspfad2%%DB7%.txt 
64.
REM sqlcmd -e -s \S2\Instanz2 -i C:\sql_save\%Instanz2%\%DB8%.sql -o %Sicherungspfad2%%DB8%.txt 
65.
sqlcmd -e -s \S2\Instanz2 -i C:\sql_save\%Instanz2%\%DB9%.sql -o %Sicherungspfad2%%DB9%.txt 
66.
REM sqlcmd -e -s \S2\Instanz2 -i C:\sql_save\%Instanz2%\%DB10%.sql -o %Sicherungspfad2%%DB10%.txt 
67.
REM sqlcmd -e -s \S2\Instanz2 -i C:\sql_save\%Instanz2%\%DB11%.sql -o %Sicherungspfad2%%DB11%.txt 
68.
REM sqlcmd -e -s \S2\Instanz2 -i C:\sql_save\%Instanz2%\%DB12%.sql -o %Sicherungspfad2%%DB12%.txt 
69.
REM sqlcmd -e -s \S2\Instanz2 -i C:\sql_save\%Instanz2%\%DB13%.sql -o %Sicherungspfad2%%DB13%.txt 
70.
REM sqlcmd -e -s \S2\Instanz2 -i C:\sql_save\%Instanz2%\%DB14%.sql -o %Sicherungspfad2%%DB14%.txt 
71.
REM sqlcmd -e -s \S2\Instanz2 -i C:\sql_save\%Instanz2%\%DB15%.sql -o %Sicherungspfad2%%DB15%.txt 
72.
REM sqlcmd -e -s \S2\Instanz2 -i C:\sql_save\%Instanz2%\%DB16%.sql -o %Sicherungspfad2%%DB16%.txt 
73.
 
74.
 
75.
 
76.
 
77.
 
78.
REM "C:\Programme\Auslogics\AusLogics Disk Defrag\cdefrag -c -log:"C:\Dokumente und Einstellungen\All Users\Desktop\Defragmentierung.html"" 
79.
 
80.
pause

Log der 1. Sicherung --> sqlcmd -e -s \S1\Instanz1 -i C:\sql_save\%Instanz1%\%DB1%.sql -o %Sicherungspfad1%%DB1%.txt
01.
-- Deklarieren der Variablen 
02.
declare @database as varchar(100); 
03.
declare @pfad as varchar(100); 
04.
declare @Instanz as varchar(100); 
05.
 
06.
-- Name der zu sichernden Datenbank und Instanzen 
07.
set @database = N'EHF_Test'; 
08.
set @Instanz = N'Instanz01'; 
09.
 
10.
-- Pfad zusammenbasteln 
11.
select @pfad = 'E:\sql-test\' + @Instanz + '\' + @database  + '_Sicherung.bak'; 
12.
 
13.
-- Und jetzt das Backup 
14.
BACKUP DATABASE @database TO DISK = @pfad WITH FORMAT; 
15.
2936 Seiten wurden für die 'EHF_Test'-Datenbank, Datei 'EHF_Test_dat' für Datei 1, verarbeitet. 
16.
1 Seiten wurden für die 'EHF_Test'-Datenbank, Datei 'EHF_Test_log' für Datei 1, verarbeitet. 
17.
BACKUP DATABASE hat erfolgreich 2937 Seiten in 0.662 Sekunden verarbeitet (36.344 MB/s).
Übergabedatei der 1. Sicherung
01.
-- Deklarieren der Variablen 
02.
declare @database as varchar(100); 
03.
declare @pfad as varchar(100); 
04.
declare @Instanz as varchar(100); 
05.
 
06.
-- Name der zu sichernden Datenbank und Instanzen 
07.
set @database = N'EHF_Test'; 
08.
set @Instanz = N'Instanz01'; 
09.
 
10.
-- Pfad zusammenbasteln 
11.
select @pfad = 'E:\sql-test\' + @Instanz + '\' + @database  + '_Sicherung.bak'; 
12.
 
13.
-- Und jetzt das Backup 
14.
BACKUP DATABASE @database TO DISK = @pfad WITH FORMAT;

Log der 2. Sicherung --> sqlcmd -e -s \S2\Instanz2 -i C:\sql_save\%Instanz2%\%DB9%.sql -o %Sicherungspfad2%%DB9%.txt
01.
-- Deklarieren der Variablen 
02.
declare @database as varchar(100); 
03.
declare @pfad as varchar(100); 
04.
declare @Instanz as varchar(100); 
05.
 
06.
-- Name der zu sichernden Datenbank und Instanzen 
07.
set @database = N'pubs'; 
08.
set @Instanz = N'w4a'; 
09.
 
10.
-- Pfad zusammenbasteln 
11.
select @pfad = 'E:\sql-test\' + @Instanz + '\' + @database  + '_Sicherung.bak'; 
12.
 
13.
-- Und jetzt das Backup 
14.
BACKUP DATABASE @database TO DISK = @pfad WITH FORMAT; 
15.
Meldung '911', Ebene '16', Status '11', Server 'LXSRV3\INSTANZ01', Zeile 14 
16.
'In 'sysdatabases' wurde kein Eintrag für die 'pubs'-Datenbank gefunden. Es wurde kein Eintrag mit diesem Namen gefunden. Stellen Sie sicher, dass der Name richtig eingegeben wurde.' 
17.
Meldung '3013', Ebene '16', Status '1', Server 'LXSRV3\INSTANZ01', Zeile 14 
18.
'BACKUP DATABASE wird fehlerbedingt beendet.'
Übergabedatei der 2. Sicherung
01.
-- Deklarieren der Variablen 
02.
declare @database as varchar(100); 
03.
declare @pfad as varchar(100); 
04.
declare @Instanz as varchar(100); 
05.
 
06.
-- Name der zu sichernden Datenbank und Instanzen 
07.
set @database = N'pubs'; 
08.
set @Instanz = N'w4a'; 
09.
 
10.
-- Pfad zusammenbasteln 
11.
select @pfad = 'E:\sql-test\' + @Instanz + '\' + @database  + '_Sicherung.bak'; 
12.
 
13.
-- Und jetzt das Backup 
14.
BACKUP DATABASE @database TO DISK = @pfad WITH FORMAT;
Mitglied: Biber
09.06.2009 um 17:23 Uhr
Moin seelbreaker,

es ist beim Arbeiten mit M$-Tools oft ungemein hilfreich sich vorzustellen, wie wohl ein pickliger Redmonder Praktikant so ein Utilily wie SQLCMD zusammenschroten würde.

Dann kommt man/frau relativ schnell auf den Bolzen, dass sich ein Server-Wechsel via SQLCmd-Skript nur hinbekommen lässt, wenn Du zwischen den beiden Aufrufen ein explizites GO einfügst.


Frag nicht....

Grüße
Biber
Bitte warten ..
Mitglied: filippg
09.06.2009 um 19:24 Uhr
Hallo,

Die Komandozeilenoptionen bei sqlcmd sind Case-Sensitiv. Ein "-s" wird daher ignoriert. Auf Server 1 funktioniert es dann, da das Skript dort ausgeführt und die Standardinstanz verwendet wird.

Gruß

Filipp
Bitte warten ..
Mitglied: Biber
09.06.2009 um 19:50 Uhr
Moin filippg,

Na, dann versuche ich auch noch mal was Sinnvolles beizutragen

du kannst aber auch mit EINEM *.sql-Skript arbeiten und die Variablen direkt übergeben.
Dazu dieht der un- oder lau dokumentierte Parameter -v.


D.h statt diesem Geraffel:
01.
.... 
02.
set @database = N'pubs';  
03.
set @Instanz = N'w4a';  
04.
-- Pfad zusammenbasteln  
05.
select @pfad = 'E:\sql-test\' + @Instanz + '\' + @database  + '_Sicherung.bak';  
06.
BACKUP DATABASE @database TO DISK = @pfad WITH FORMAT;
..änderst Du die Syntax in dem SQL auf:

01.
BACKUP DATABASE $(database) TO DISK = $(pfad) WITH FORMAT;
...und übergibst die Variablen im SQLCmd.exe-Aufruf so:
01.
sqlcmd -e -S \S1\Instanz1 -i C:\sql_save\%Instanz1%\%DB1%.sql -v database-pubs pfad=E:\sql-test\Instanzxx -o %Sicherungspfad1%%DB1%.txt 
Grüße
Biber
Bitte warten ..
Mitglied: Seelbreaker
10.06.2009 um 09:50 Uhr
Zitat von filippg:
Hallo,

Die Komandozeilenoptionen bei sqlcmd sind Case-Sensitiv. Ein
"-s" wird daher ignoriert. Auf Server 1 funktioniert es
dann, da das Skript dort ausgeführt und die Standardinstanz
verwendet wird.

Gruß

Filipp


Oh man, das war es
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Server
SQL Server 2008 R2 SP3 neue Instanz (10)

Frage von technikdealer zum Thema Windows Server ...

Datenbanken
MS-SQL-Server + T-SQL+Batch (4)

Frage von kallewirsch zum Thema Datenbanken ...

Windows Server
gelöst SQLCMD über BAT aufrufen (Sicherung SQL Server Express 2012 (3)

Frage von joeyschweiz zum Thema Windows Server ...

Batch & Shell
gelöst Falsche Umlaute beim auslesen einer .txt mit batch (2)

Frage von pdiddo zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...