# Zuverlässige Datenbankverbindung



## Einklang. (5. Jan 2013)

Hallo,

kurz und schmerzlos:


> SQL-Exception bei der Abfrage: Communications link failure


Tritt während einer VErbindung zu einer Serverdatenbank auf - zufällig.
Zuerst werden Datensätze durchgearbeitet und plötzlich (oder auch nicht) ist die Verbindung weg...! Wie gesagt, mal passierts, mal nicht. Kommt auch nur ab und zu vor... also es klappt meistens, aber eben nicht immer!

Wie kann ich denn so eine Verbindung "sicherer" bzw stabiler machen?

Danke


----------



## Phash (5. Jan 2013)

Neues Kabel verlegen?
USV einbauen?
Server testen - ist was kaputt, wackelt was, ueberlastet?

WLAN?

falls das nichts hilft: kuerzere Transaktionsspannen?


----------



## Einklang. (5. Jan 2013)

Also physisch kann ich nicht viel ändern, weils der Server von einem hosting-Anbieter ist. 
Ich bin allerdings mit UMTS online...!

Interessant klingt das mit den kürzeren Transaktionsspannen - wie funktioniert das?

Danke


----------



## Phash (6. Jan 2013)

kuerzere Transaktionsspannen bedeutet eigentlich nur, dass du rausfinden musst, ob du weniger in eine Transaktion packen kannst.

die Datenbankverbindung wird aufgebaut, eine Transaktion gestartet, irgendwas in die DB geschoben, dann wird die Transaktion beendet und die Datenbankverbindung evtl geschlossen.

so sieht es normalerweise aus, und das ist auch gut.

Aendern kann man hier etwas daran, was in die DB geschoben wird.

Ein Bsp aus meiner Arbeit.
Ich habe eine Liste aller Gemeinden in einem Bundesland, und muss fuer jede Gemeinde Unternehmensdaten berechnen und diese dann in die Datenbank schreiben.

In By gibts 2056 Gemeinden, und eine Unmenge von Unternehmen... da die Berechnungen etwas komlpexer sind, braucht jede Gemeinde ca. 2 Sekunden und fertig zu werden (inkl Datenbanksuche, Berechnung, Umformung und Speicherung)

wenn ich jetzt eine Transaktion ueber alle 2056 Gemeinden mache, muss die DB Verbindung 2056*2s aufrecht erhalten werden - das schmiert mir ab, weil da alles moegliche passieren kann und der Server die Verbindung auch schliesst in der Zeit.

Also gibt es nun 2 Moeglichkeiten:
entweder ich berechne erstmal alles, speicher es im RAM und schieb hinterher nur das Ergebnis in die Datenbank. Die Berechnung dauert immer noch 2 Sekunden, und das in die DB schieben dauert nur ganz kurz.
Oder ich mach das ganze fuer jede Gemeinde einmal - also DB aufbauen, eine Gemeinde berechnen, in die DB schreiben, schliessen, und von vorne

das hat beides Vor- und Nachteile, und nicht immer geht beides.


----------



## Einklang. (7. Jan 2013)

Danke ja ich habe das schon so gemacht, dass immer wieder eine Verbindung aufgebaut wird. Nach Information von dem Hoster wird die Verbindung auch nur bei Inaktivität nach 2 Minuten abgebrochen. 
Und letztlich hat heute die Verarbeitung ganze 8 Minuten lang gehalten, in denen ich die Daten geholt und in eine andere reingeschrieben habe.
Allerdings war sie zuvor 2 mal unterbrochen nach etwa 2 Minuten und hat anschließend wie gesagt 8 Minuten durchgearbeitet...!
Da ich jetzt aber alle Datensätze prüfe, ob diese schon vorhanden sind in der Zieltabelle, bleiben die Tabellen ordentlich. Es sollte halt nicht sein, dass das Programm abschmiert bzw die Verbindung...! 

Vielleicht kommt ja jemand die Fehleranzeige bekannt vor:


> SQL-Exception bei der Abfrage: Communications link failure
> 
> The last packet successfully received from the server was 173.650 milliseconds ago.  The last packet sent successfully to the server was 0 milliseconds ago.



Aber wie gesagt, jetzt kann ich mit den Daten erstmal weitermachen, mit diesen Daten meien Auswertungen programmieren ;-)


----------

