Zugriff auf SQL-Server nicht möglich wegen Überbleibsel: Unterschied zwischen den Versionen

Aus GEVITAS
Wechseln zu: Navigation, Suche
(Links)
 
(8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 21: Zeile 21:
  
 
Die oben angenommene Inkompatibilität war also keine, sondern ein Server-Problem: Dem angemeldeten User musste das volle Zugriffsrecht auf das Verzeichnis gegeben werden, in dem die Backup-Datei lag.
 
Die oben angenommene Inkompatibilität war also keine, sondern ein Server-Problem: Dem angemeldeten User musste das volle Zugriffsrecht auf das Verzeichnis gegeben werden, in dem die Backup-Datei lag.
 +
 
''(Ob die oben angegebene Reihenfolge und die angegebenen Versionsnummern entscheidend sind, ist nicht bekannt)''
 
''(Ob die oben angegebene Reihenfolge und die angegebenen Versionsnummern entscheidend sind, ist nicht bekannt)''
  
Zeile 41: Zeile 42:
 
* Port 1433 in der ODBC-Konfiguration festlegen (statt "Anschluss dynamisch bestimmen"-Option.
 
* Port 1433 in der ODBC-Konfiguration festlegen (statt "Anschluss dynamisch bestimmen"-Option.
  
Nach stundenlangen Versuche mit wachsender Begeisterung wurde die Firewall '''ausgeschaltet'''.
+
Nach stundenlangen Versuchen mit wachsender Begeisterung wurde die Firewall '''ausgeschaltet'''.
  
Dabei stellte man fest, dass der Kontakt zum SQL-Server und zur Datenbank '''erfolgreich''' war, wenn
+
Dabei stellte man fest,  
  
 +
;Kontakt erfolgreich:
 +
:Der Kontakt zum SQL-Server und zur Datenbank '''erfolgreich''' war erfolgreich, wenn
 
* die Firewall ausgeschaltet war '''und'''
 
* die Firewall ausgeschaltet war '''und'''
 
* die Option "Anschluss dynamisch bestimmen" im ODBC-Treiber eingestellt war!
 
* die Option "Anschluss dynamisch bestimmen" im ODBC-Treiber eingestellt war!
  
Mit '''festem Port 1433''' in der ODBC-Konfiguration wurde der SQL-Server '''nicht gefunden!'''
+
;Kontakt nicht erfolgreich:
 +
:Mit '''festem Port 1433''' in der ODBC-Konfiguration wurde der SQL-Server '''nicht gefunden!'''
  
* der Admin des Kunden wollte unbedingt mit festen Ports arbeiten, damit er die Firewall entsprechend auf diese Ports freischalten konnte.
+
Der Admin des Kunden wollte aber unbedingt mit festen Ports arbeiten, damit er die Firewall entsprechend auf diese Ports freischalten konnte.
  
Ein TCP-Protocol-Analyzer bewies, dass auf Port 1433 eine Anfrage vom Client gesendet wurde und vom Server mit "Reset" (also abweisen) beantwortet wurde! Warum machte der SQL-Server das?
+
Ein TCP-Protocol-Analyzer bewies, dass auf Port 1433 eine Anfrage vom Client gesendet wurde und vom Server mit "Reset" (also abweisen) beantwortet wurde! '''Warum machte der SQL-Server das?'''
  
 
Nun, die Antwort ist (im Nachhinein) einfach: '''Der SQL-Server antwortete gar nicht, sondern ein Überbleibsel einer früheren SQL-Server 2005 (!) Installation'''!
 
Nun, die Antwort ist (im Nachhinein) einfach: '''Der SQL-Server antwortete gar nicht, sondern ein Überbleibsel einer früheren SQL-Server 2005 (!) Installation'''!
  
Im Task-Manager gab es einen Task (SQL-Server Browser). Beim Klicken mit der rechten Maustaste und "Dateipfad öffnen" öffnete sich
+
;Wie hat man das herausgefunden?
 +
:Im Task-Manager gab es einen Task (SQL-Server Browser). Beim Klicken mit der rechten Maustaste und "Dateipfad öffnen" öffnete sich
  
 
  C:\Program Files\Microsoft SQL Server\90
 
  C:\Program Files\Microsoft SQL Server\90
  
 +
Es war also noch ein Programm (bzw. ein Dienst) aktiv,der den Port 1433 abhörte und die Anfrage dann ablehnte.
  
 
== Ursache ==
 
== Ursache ==
Zeile 73: Zeile 79:
 
Die sauberste Lösung in diesem Fall war es, einen '''komplett neuen''' Server aufzubauen, ohne auf ein bestehendes Image zurückzugreifen.
 
Die sauberste Lösung in diesem Fall war es, einen '''komplett neuen''' Server aufzubauen, ohne auf ein bestehendes Image zurückzugreifen.
  
Eine andere Möglichkeit wäre es, das angegeben alte Verzeichnis zu löschen (vorher den Dienst zu zu beenden) und dann mit einem Tool die Registry aufzuräumen.
+
Eine andere Möglichkeit wäre es, das angegebe alte Verzeichnis zu löschen (vorher den Prozess beenden!) und dann mit einem Tool die Registry aufzuräumen.
 
 
 
 
  
 
== Links ==
 
== Links ==
  
 
* [[REFLEX-Installation:_Bekannte_Probleme_bei_der_Installation|Bekannte Probleme bei der Installation]]
 
* [[REFLEX-Installation:_Bekannte_Probleme_bei_der_Installation|Bekannte Probleme bei der Installation]]
 +
 +
* [[Zugriff auf SQL-Server nicht möglich]]
  
 
* [[REFLEX-Installation:_Bekannte_Probleme_bei_der_Installation#Portfreischaltung_auf_dem_Server|Portfreischaltung auf dem Server]]
 
* [[REFLEX-Installation:_Bekannte_Probleme_bei_der_Installation#Portfreischaltung_auf_dem_Server|Portfreischaltung auf dem Server]]
 +
 +
* [http://windows.microsoft.com/de-de/windows/communicate-through-windows-firewall#1TC=windows-7 Zulassen der Kommunikation eines Programms über die Windows-Firewall]
 +
 +
* [https://msdn.microsoft.com/de-de/library/cc646023.aspx Konfigurieren der Windows-Firewall für den SQL Server-Zugriff].
  
 
* [[REFLEX-Installation: Technische Informationen|Technische Informationen]]
 
* [[REFLEX-Installation: Technische Informationen|Technische Informationen]]
Zeile 96: Zeile 106:
  
 
* [[REFLEX-Installation: Client-Installation: Programm installieren|Client-Installation: Programm installieren]]
 
* [[REFLEX-Installation: Client-Installation: Programm installieren|Client-Installation: Programm installieren]]
 +
 +
* [http://windows.microsoft.com/de-de/windows/communicate-through-windows-firewall#1TC=windows-7 Zulassen der Kommunikation eines Programms über die Windows-Firewall]
 +
 +
* [https://msdn.microsoft.com/de-de/library/cc646023.aspx Konfigurieren der Windows-Firewall für den SQL Server-Zugriff]

Aktuelle Version vom 19. August 2015, 22:50 Uhr

1 Überbleibsel von alten Installationen

Besonders perfide können Fragmente von früheren SQL-Server-Installationen sein! Im konkreten Fall stellte sich die Situation wie folgt dar:

2 Vorgeschichte

Es wurde ein virtueller Server aus einem anderen, lauffähigen Server "geklont", also das Image des Servers für den neuen Server kopiert. Auf diesem Server war SQL-Server 2008© (=Version 10.0) installiert. Dieser wurde de-installiert, der Rechner mehrmals neu gestartet.

Dann wurde SQL-Server 2014 Express Edition© (=Version 12.0) installiert, und zwar nicht in der Standard-Instanz sondern in einer benannten Instanz.

Es wurde versucht, eine neue Datenbank durch Wiederherstellen eines Backups anzulegen. Dies scheiterte, weil die Backup-Datei nicht als solche erkannt wurde. Zudem gab es mehrere unerklärliche Fehlermeldung auf den Server. Da man annahm, dass die Backup-Datei (aus SQL-Server 2012) nicht kompatibel zu SQL-Server 2014 war, wurde SQL-Server 2014 wieder de-installiert.

  • Diese Annahme stellte sich als falsch heraus, s.u.

Dann wurde SQL-Server 2012 Express Edition© (=Version 11.0) installiert, und zwar nicht in der Standard-Instanz sondern auch in einer benannten Instanz.

Es wurde wieder versucht, eine neue Datenbank durch wiederherstellen des Backups anzulegen. Dies scheiterte aber auch, weil:

  • die Backup-Datei nicht ausgewählt werden konnte, der Pfad zu der Datei wurde im Wiederherstellungs-Dialog nicht angezeigt.
  • die Backup-Datei nicht als solche erkannt wurde, genau wie zuvor! Nach Kopieren der Datei nach "C:\" konnte die Datei ausgewählt werden und die Wiederherstellung funktionierte!

Die oben angenommene Inkompatibilität war also keine, sondern ein Server-Problem: Dem angemeldeten User musste das volle Zugriffsrecht auf das Verzeichnis gegeben werden, in dem die Backup-Datei lag.

(Ob die oben angegebene Reihenfolge und die angegebenen Versionsnummern entscheidend sind, ist nicht bekannt)

So weit die Vorgeschichte, nun zum eigentlichen Problem:

3 Eigentliches Problem

Nachdem nun ein funktionsfähiger SQL-Server mit Datenbank zur Verfügung stand, wurde die Software auf einem Client-Rechner installiert und der ODBC-Eintrag dazu gemacht.

Beim Versuch zu dem SQL-Server Kontakt aufzunehmen, wurde nach einigen Sekunden angezeigt

Server existiert nicht oder Zugriff verweigert.

Nun folgten die üblichen Maßnahmen, also

  • Port 1433 in der ODBC-Konfiguration festlegen (statt "Anschluss dynamisch bestimmen"-Option.

Nach stundenlangen Versuchen mit wachsender Begeisterung wurde die Firewall ausgeschaltet.

Dabei stellte man fest,

Kontakt erfolgreich
Der Kontakt zum SQL-Server und zur Datenbank erfolgreich war erfolgreich, wenn
  • die Firewall ausgeschaltet war und
  • die Option "Anschluss dynamisch bestimmen" im ODBC-Treiber eingestellt war!
Kontakt nicht erfolgreich
Mit festem Port 1433 in der ODBC-Konfiguration wurde der SQL-Server nicht gefunden!

Der Admin des Kunden wollte aber unbedingt mit festen Ports arbeiten, damit er die Firewall entsprechend auf diese Ports freischalten konnte.

Ein TCP-Protocol-Analyzer bewies, dass auf Port 1433 eine Anfrage vom Client gesendet wurde und vom Server mit "Reset" (also abweisen) beantwortet wurde! Warum machte der SQL-Server das?

Nun, die Antwort ist (im Nachhinein) einfach: Der SQL-Server antwortete gar nicht, sondern ein Überbleibsel einer früheren SQL-Server 2005 (!) Installation!

Wie hat man das herausgefunden?
Im Task-Manager gab es einen Task (SQL-Server Browser). Beim Klicken mit der rechten Maustaste und "Dateipfad öffnen" öffnete sich
C:\Program Files\Microsoft SQL Server\90

Es war also noch ein Programm (bzw. ein Dienst) aktiv,der den Port 1433 abhörte und die Anfrage dann ablehnte.

4 Ursache

Das bedeutete, dass eine frühere Installation nicht vollständig de-installiert wurde!

Dieses Programm und nicht der neu-installierte SQL-Server reagierte auf die Anfrage auf Port 1433 und versuchte, die Anfrage zu seiner SQL-Server-Instanz weiterzureichen. Die gab es aber gar nicht mehr, die Anfrage wurde also abgelehnt!

Das war auch die Erklärung dafür, dass der SQL-Server mit der Einstellung "Dynamische Ports" angesprochen werden konnte, aber auf dem fest eingestellten Port 1433 nicht.

5 Lösung

Die sauberste Lösung in diesem Fall war es, einen komplett neuen Server aufzubauen, ohne auf ein bestehendes Image zurückzugreifen.

Eine andere Möglichkeit wäre es, das angegebe alte Verzeichnis zu löschen (vorher den Prozess beenden!) und dann mit einem Tool die Registry aufzuräumen.

6 Links