2010-12-28 3 views
1

Ich habe eine Website, die eine SQL-Datenbank verwendet, aber das Hosting-Unternehmen ist manchmal sehr langsam und ich habe Datenbank-Timeout, Login und ähnliche Fehler. Kann ich meinen Code für die gleichzeitige Verwendung von zwei Datenbanken implementieren? Ich habe Prozeduren gespeichert und die Daten werden regelmäßig aktualisiert.Wechseln Sie zwischen Datenbanken, verwenden Sie zwei Datenbanken gleichzeitig

EDIT: einfach: Wenn dbDefault ist nach unten und unzugänglich Ich brauche dbSecondary zu verwenden, um den Web-App am Laufen hält. Ant diese beiden Datenbanken müssen immer gleich sein.

EDIT: Einige Fehler:

  • Ein Übertragungsfehler aufgetreten ist, wenn die Anfrage an den Server sendet. (Anbieter: TCP-Anbieter, Fehler: 0 - Eine vorhandene Verbindung wurde vom Remote-Host zwangsweise geschlossen.)
  • Beim Herstellen einer Verbindung zu SQL Server ist ein netzwerkbezogener oder instanzspezifischer Fehler aufgetreten. Der Server wurde nicht gefunden oder war nicht erreichbar. Stellen Sie sicher, dass der Instanzname korrekt ist und dass SQL Server so konfiguriert ist, dass Remoteverbindungen zugelassen werden. (Anbieter: Named Pipes Provider, Fehler: 40 - Verbindung zu SQL Server konnte nicht hergestellt werden)
  • Timeout abgelaufen. Die Zeitüberschreitung ist abgelaufen, bevor eine Verbindung vom Pool erhalten wurde. Dies ist möglicherweise der Fall, weil alle gepoolten Verbindungen verwendet wurden und die maximale Poolgröße erreicht wurde.
  • Die Datenbank "db", die vom Login angefordert wurde, kann nicht geöffnet werden. Die Anmeldung ist fehlgeschlagen. Anmeldung fehlgeschlagen für Benutzer 'root'.
+7

Wechseln Sie zu einem besseren Webhost. – SLaks

+0

Was würde _mean_ bedeuten, zwei Datenbanken gleichzeitig zu benutzen? – SLaks

+2

Haben Sie festgestellt, dass Ihre Datenbank nicht die Langsamkeit verursacht? –

Antwort

4

Load Balancing- und/oder Failover-Clustering-Datenbankserver erfordern normalerweise viel Arbeit.

Sie müssen sicherstellen, dass ALLE Daten zwischen den beiden Datenbankservern repliziert werden. Hosting-Provider bieten diese Option nur selten an, wenn Sie einen dedizierten Server haben.

Wenn Sie die Mergereplikation zulassen, müssen Sie möglicherweise Teile Ihrer Datenbank neu entwerfen; was möglicherweise nicht machbar ist.

Sofern Sie nicht bereit sind, viel Zeit und Geld zu investieren, sind Sie viel besser dran, nur Hosting-Provider zu einem, der bessere DB-Unterstützung hat. Wenn man bedenkt, dass es buchstäblich Tausende und Abertausende solcher Firmen gibt, ist das eine einfache Lösung.

UPDATE

Fast alle Fehler, die Sie in Ihrem bearbeiten identifiziert sind im Allgemeinen auf eine andernfalls ordnungsgemäß von Verbindungen zu verfügen, Befehle und Leser. Möglicherweise möchten Sie Ihren Code durchgehen, um sicherzustellen, dass Sie korrekt auf den SQL-Server zugreifen. Jede Verbindung, jeder Befehl und jeder Leser sollte in eine using-Klausel eingebettet werden, um sicherzustellen, dass sie ordnungsgemäß in den Verbindungspool zurückgeliefert werden.

Wenn Sie ein Datenzugriffscode-Beispiel (neue Frage bitte) bereitstellen, können wir Ihnen helfen, es neu zu schreiben.

+2

+1 für eine praktische Antwort – gbn

+0

Obwohl ich glaube nicht, dass ich einen Fehler in meinem Code habe, habe ich hier eine Frage gestellt: http://stackoverflow.com/questions/4550206/right-code-to-retrieve-data -from-sql-server-datenbank Vielen Dank. –

1

Nicht wirklich.

Datenkonsistenz und Integrität:

  • Wie entscheiden Sie, welche Daten oder welche Anruf zu welchem ​​Zeitpunkt zu machen?
  • Was passiert beim Schreiben?

Firewalls, Remote-Server etc:

  • Wenn Sie einen anderen Hosting-Unternehmen verwenden, wie werden Sie verbinden?

Misconception:

  • Zwei Datenbanken auf einem Server = absolut keinen Vorteil.
  • Der Server wahrscheinlich überlastet ist, wird eine zweite db noch schlimmer machen

Ein Datenbank-Timeout-Code sein könnte natürlich bezogen und es Ihnen 2 Datenbanken mit dem gleichen schlechten Code oder Design haben nicht helfen kann ..

.

Keine schöne Antwort, aber wenn Ihr Host schlechten Service bietet dann sind Ihre Möglichkeiten begrenzt

+0

Die sekundäre Datenbank befindet sich auf einem anderen Server in einem anderen Land. –

1

ist von allen die Gründe des Timeout zu finden, wenn es in Ihrem Code ist, als den Code zu korrigieren, indem Abfrage etc Optimierung

Ich denke, was Sie brauchen, ist ein Failover-Server, wo Sie wechseln können, wenn der eine Server ausgefallen ist.

Alternativ

können Sie zwei Verbindungszeichenfolge in web.config pflegen und zu anderen Server wechseln kann, wenn man unten ist.

In beiden Methoden müssen Sie eine Strategie entwickeln, um die Server zu synchronisieren.

+0

das stimmt, denken Sie an Hot/Cold Replication – TalentTuner

+2

-1 Ein Failover-Server wird einfach nicht helfen. Wenn der Server überlastet ist, was bringt eine Synch-Aufgabe? Wenn die Synchronisation automatisch erfolgt, handelt es sich um eine Hochverfügbarkeitslösung (Spiegel, Cluster), die immer noch bedeutet, dass zu jeder Zeit ein Server läuft.Dies ist nicht Load Balancing – gbn

+1

Ich erzähle über die Db Server Switching wie in den meisten Fällen Ihre Deployment-Strategie DR-Server enthalten, so können Sie auf den DR-Server im Falle eines Ausfalls, was schlagen Sie in einem Echtzeit-Szenario, haben Sie DR oder Failover-Server nicht als Teil Ihres Deployment Strategy enthalten – TalentTuner

1

Wenn beide Ihre Datenbank synchron sind (was eine offensichtliche Voraussetzung für das ist, was Sie zu tun versuchen), ist die beste Lösung, auf einen Loadbalancer zu verlassen, aber wenn Sie nicht können, denke ich, dass Sie das Ziel ist Abfrage gegen beide Datenbank in der gleichen Zeit und gibt das erste Ergebnis zurück, andernfalls müssen Sie auf das Zeitlimit warten, um die Anfrage gegen den zweiten Server laufen zu lassen.

SO was Sie brauchen, ist asynchroner SQL-Befehl richtig?

+0

Ja, wahrscheinlich könnte das eine Lösung sein. Warten auf Timeout-Fehler wird nicht schön sein. –

+0

Ich denke, Sie wissen, dass "hübsch" ist definitiv keine Lösung, wo das Problem eines fehlgeschlagenen Servers zu vermeiden, versuchen wir, den Client anstelle der Reparatur des Servers Patch ... – VdesmedT

+0

Patch-Client? Es ist eine öffentliche Web-App: http://firmadmoz.com/ –