0

ネットワーク エンジニアがクライアントの 1 つの状況をトラブルシューティングするのを手伝おうとしています。このクライアントは、文字通り「家族経営」のベンダーから POS システムを購入しました。このベンダーは、クライアントが追加のライセンス料を負担する必要がないように、SQL Server Express 2005 をバックエンド データベースとして推奨しました。(私にそれを始めさせないでください

このアプリは私たちが作成したものではなく、商用アプリであるため、入手できるソース コードはありません。(そうしても役に立たないというわけではありません。これは PowerBuilder で作成されたものなので、そのためのツールはありません。) アプリは、確認できる独自のログ記録を行いません。先に進む必要があるのは、SQL Server Express 独自のログだけです。

アプリケーションでは、エンド ユーザーが会員カードを読み取ります。時折 (1 日に数回)、スワイプでデータベースからデータが返されないことがあります。画面に「メンバー 123 が見つかりません」というメッセージが表示されます。(メンバー番号は実際には 6 桁の「000123」です。) 直後に再スキャンすると、メンバー データが正しく返されます。

問題の原因となるスキャナ自体を排除しました。スキャナは 6 桁の数字全体を定期的にスキャンします。SQL Server Express のログをスキャンすると、多くの場合、スキャンの時点でアイドル状態からオンラインに戻っていることが示されます (ただし、1 日に数回発生します)。(アイドルモードについてはこちらで説明しています。)

SQL Express の方法で RAM を割り当て/割り当て解除するのは、特に一度に数百メガバイトについて話している場合、時間のかかるプロセスであることを理解しています。

部分的なデータが返されているのか、それとも単にアプリがデータベースへの接続に失敗して一般的なエラー メッセージを表示しているだけなのかは不明です。すべてが非常に不透明であり、クライアントは (明白な理由で) 物理的にそれが起こるのを確認するために (おそらくネットワーク監視/パケット スニッフィング ツールを使用して) 施設に 8 時間ほど滞在するために私たちに支払うことを望まないため、私たちは一種の途方に暮れて。

この時点で、クライアントを 5 つの CAL で SQL Server 2005 Workgroup Edition にアップグレードすることをお勧めします。しかし、SQL Server が部分的なデータを返すことは決してないと確信しているため、この問題の解決策として、それは私には完全に適していません。接続できない場合は、接続できません。(とはいえ、他の多くの問題の解決策であるため、私はまだそれをお勧めします!)

Expressの経験はあまりありません。(私はローカル開発以外には決して使用せず、自宅でのみ使用します。クライアントには決してお勧めしません。)

Express を使用したことがある方への質問ですが、SQL Express のインスタンスが部分的なデータを返すのを見たことがありますか? アプリ自体が原因ではありません。具体的には、アイドル モードから戻ったときにこの動作を見たことがありますか?

(価値があるのは、アプリが接続に失敗し、単に一般的なエラー メッセージを表示し、接続時にメンバー ID の先頭のゼロを削除していると考える傾向があることです。それが最も合理的な答えのようです - 3 番目の質問かもしれませんが、皆さんはその評価に同意しますか?)

4

1 に答える 1

1

SQL Server Express が部分的なデータを返すということは、聞いたことも経験したこともありません。基本的に、完全な SQL Server と同じコード ベースです。

SQL Server Express がアイドル状態になるため、アプリケーションでタイムアウト (既定では 30 秒) が発生している可能性が高くなります。アプリケーションが予期しないタイムアウトを受け取り、それを適切に処理していない可能性があります。

問題と考えられる解決策については、次のフォーラムスレッドで説明されています。

次のような接続文字列があると思われます。

Data Source=.\SQLEXPRESS; Integrated Security=True;AttachDbFilename=|DataDirectory|\myDatabase.mdf;User Instance=True

参照スレッドから:

この接続文字列により、メイン インスタンス (.\SQLEXPRESS) への初期接続が発生し、メイン インスタンスがユーザーのコンテキストで SQL Server の新しいインスタンスを生成し、指定されたデータベースをその新しいユーザー インスタンスに接続するように指示されます。ユーザー インスタンスは、メイン インスタンスから完全に分離された SQL Server の実行中のインスタンスであり、ユーザーに固有であり、接続がなくなるとシャットダウンされます。

これは、手動でシャットダウンしない限り、常に実行されているメイン インスタンスにデータベースをアタッチするのとはまったく異なります。アイドル状態になるメイン インスタンスに関する質問の場合、その質問は SQL Express に固有のものではなく、データベース エンジン フォーラムでこの質問をする必要があります。SQL Server のすべてのエディションにはアイドル状態があり、他のフォーラムでその動作に影響を与える方法を見つけることができると思います。

于 2009-01-04T05:10:39.393 に答える