2010-12-28 18 views
1

私は1つのSQLデータベースを使用するWebサイトを持っていますが、ホスティング会社は時には非常に遅く、データベースのタイムアウト、ログインなどのエラーが発生します。 2つのデータベースを同時に使用するコードを実装できますか?私はプロシージャを保存しており、データは定期的に更新されます。データベースを切り替えると2つのデータベースを同時に使用する

EDIT: 単に:dbDefaultがダウンし、アクセスできない私は、Webアプリが動作を続けてdbSecondaryを使用する必要があるとき。この2つのデータベースは常に同じでなければなりません。

EDIT: 一部のエラー:サーバーにリクエストを送信するときに

  • トランスポートレベルのエラーが発生しました。 (プロバイダー:TCPプロバイダー、エラー:0 - 既存の接続がリモートホストによって強制的に閉じられました)
  • SQL Serverへの接続を確立する際に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからなかったか、アクセスできませんでした。インスタンス名が正しいこと、およびSQL Serverがリモート接続を許可するように構成されていることを確認します。 (プロバイダー:名前付きパイププロバイダー、エラー:40 - SQL Serverへの接続を開けませんでした)
  • タイムアウトが切れています。プールから接続を取得する前にタイムアウト期間が経過しています。これは、プールされたすべての接続が使用中で、プールの最大サイズに達したために発生した可能性があります。
  • ログインで要求されたデータベース "db"を開くことができません。ログインに失敗しました。ユーザー 'root'のログインに失敗しました。
+7

より良いウェブホストに切り替えます。 – SLaks

+0

2つのデータベースを同時に使用するにはどうすればよいでしょうか? – SLaks

+2

データベースが遅い原因ではないことを確認しましたか? –

答えて

4

ロードバランシングおよび/またはフェイルオーバークラスタリングデータベースサーバーは、通常、多くの作業が必要です。

すべてのデータが2つのデータベースサーバー間でマージレプリケートされていることを確認する必要があります。ホスティングプロバイダは、専用のサーバーを持っていない限り、このオプションを提供することはほとんどありません。

マージレプリケーションを許可するには、データベースの一部を再設計する必要があります。実行可能ではない可能性があります。

時間とお金をたくさん投資したくないのであれば、ホスティングプロバイダをより良いデータベースをサポートするものに切り替えるほうがずっと良いでしょう。このような企業には何千もの文字通り何千もの文字があることを考えれば、これは簡単に解決できます。ほとんどあなたが編集中で識別されたすべてのエラーの

UPDATE

が正しく接続、コマンド、および読者を処分するために失敗に一般的に起因しています。 SQL Serverに正しくアクセスしていることを確認するためにコードを調べることができます。すべての接続、コマンド、およびリーダーは、接続プールに適切に戻されるように、using句でラップする必要があります。

データアクセスコードサンプル(新しい質問をください)を提供した場合は、書き直しをお手伝いします。

+2

実用的な答えのために+1 – gbn

+0

私は私のコードに間違いがあるとは思わないが、私はここに質問を掲示した:http://stackoverflow.com/questions/4550206/right-code-to-retrieve-data -from-sql-server-databaseありがとうございます。 –

1

実際はありません。

データの一貫性と整合性:

  • はどのようにあなたが何時にどのような呼び出しを行うためにどのようなデータまたは決めるのですか?
  • 書き込みはどうなりますか?

ファイアウォール、リモートサーバなど:

  • あなたが別のホスティング会社を使用する場合、どのように接続するのだろうか?

誤解:1台のサーバー上

  • つのデータベース=全く利点。
  • サーバーがおそらく過負荷になっている、第二デシベルはそれを悪化させるだろう

データベースのタイムアウトはもちろん、関連するコードである可能性があり、それはあなたが同じ貧しいコードやデザインの2つのデータベースを持って助けないかもしれません。.. 。

ない素敵な答えが、あなたのホストはあなたのオプションは、すべての

+0

セカンダリデータベースは別の国の別のサーバーにあります。 –

1

イストに限定されて、その後悪いサービスを提供している場合、それは、クエリなどを最適化することにより、コードを修正よりも、あなたのコード内にある場合タイムアウトの原因を見つけます。

私はあなたが必要と思うのは、1台のサーバがダウンしている場合に切り替えることができるフェールオーバーサーバです。

また

あなたはweb.configファイルに二つの接続文字列を維持することができ、1つがダウンした場合、他のサーバーに切り替えることができます。

のいずれの方法でも、サーバーを同期させるためには、戦略を策定する必要があります。

+0

これは本当です。ホット/コールドレプリケーションについて考えてみましょう – TalentTuner

+2

-1フェールオーバーサーバーは役に立ちません。サーバーが過負荷になっている場合、同期タスクではどのようになると思いますか?同期が自動であれば、高可用性ソリューション(ミラー、クラスタ)であり、いつでも1台のサーバーが稼動していることを意味します。これはロードバランシングではありません – gbn

+1

ほとんどの場合、デプロイメントにはDRサーバーが含まれているため、障害発生時にDRサーバーに切り替えることができます。リアルタイムのシナリオでは何を提案しますか?デプロイメント戦略の一環としてDRまたはフェールオーバーサーバーを含めない – TalentTuner

1

データベースが両方とも同期しようとしている場合(これは明らかに必要なことです)、ロードバランサに頼るのが最良の解決策ですが、できない場合は、両方のデータベースに対して同時にクエリを実行し、最初の結果を返します。そうでなければ、2番目のサーバーに対して要求を実行するためにタイムアウトを待たなければなりません。

だから、必要なのは非同期SQLコマンドです。

+0

はい、おそらくこれが解決策になるかもしれません。タイムアウトエラーを待っていることはあまりよくありません。 –

+0

私はあなたが "かなり"間違いなく、サーバーの問題を回避するためにどこのソリューションにもマッチしないことを知っていると思います。サーバーを修正する代わりにクライアントにパッチを当てようとします... – VdesmedT

+0

パッチクライアント? http://firmadmoz.com/ –

関連する問題