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, 4414 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
Off Topic

"Ich habe nichts zu verbergen"

(2)

Erfahrungsbericht von FA-jka zum Thema Off Topic ...

Ä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 ...

Batch & Shell
gelöst Batch: Textdatei Zeilenweise auslesen (2)

Frage von CreatorX zum Thema Batch & Shell ...

Batch & Shell
Verschachtelte For Schleife für Batch Neuling (3)

Frage von yperiu zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Linux Netzwerk
gelöst DHCP vergibt keine Adressen (31)

Frage von Maik82 zum Thema Linux Netzwerk ...

Exchange Server
gelöst Bestehende eMails autoamatisch weiterleiten (22)

Frage von metal-shot zum Thema Exchange Server ...

Switche und Hubs
LAG zwischen SG300-Switches macht Probleme. Wer weiß Rat? (20)

Frage von White-Rabbit2 zum Thema Switche und Hubs ...

Apache Server
gelöst Lets Encrypt SSL mit Apache2 (20)

Frage von banane31 zum Thema Apache Server ...