0

我正在尝试帮助我们的网络工程师为我们的一位客户解决问题。该客户从名副其实的“夫妻店”供应商处购买了一个销售点系统,并表示供应商推荐 SQL Server Express 2005 作为后端数据库,以使客户免于产生额外的许可费用。(请不要让我开始这样做

我们没有编写应用程序,因为它是一个商业应用程序,所以我们没有可用的源代码。(并不是说如果我们这样做了会对我们有所帮助;这个东西是在 PowerBuilder 中构建的,所以我们没有工具。)该应用程序没有自己的日志记录,这是我们可以确定的。我们所要做的就是 SQL Server Express 自己的日志记录。

在应用程序中,最终用户刷会员卡。偶尔(一天几次),滑动不会从数据库返回数据。屏幕上的消息将显示“未找到成员 123”。(会员编号实际上是六位数字,“000123”。) 之后立即重新扫描正确返回会员数据。

我们已经消除了扫描仪本身作为问题的根源——它会定期扫描完整的六位数号码。对 SQL Server Express 日志的扫描表明它正在从空闲状态重新联机,通常是在扫描时(但也可能在每天的其他几次)。(这里解释了空闲模式。)

我知道以 SQL Express 的方式分配/取消分配 RAM 是一个耗时的过程,尤其是当我们一次谈论数百兆字节时——似乎就是这种情况。

我们不确定的是我们是否正在取回部分数据,或者应用程序是否只是无法连接到数据库并显示一般错误消息。由于一切都是如此不透明,并且客户(出于显而易见的原因)不愿意付钱让我们在他们的设施中坐 8 个小时左右来亲眼目睹它的发生(也许使用网络监控/数据包嗅探工具),我们有点不知所措。

此时,我们的建议是客户端升级到具有 5 个 CAL 的 SQL Server 2005 Workgroup Edition。但这并不完全适合我作为这个问题解决方案,因为我有理由确定没有 SQL Server 会返回部分数据——如果你无法连接,你就无法连接。(也就是说,我仍然推荐它,因为它可以解决他们的许多其他问题!)

我对 Express 没有太多经验。(除了本地开发,我从不使用它,而且只在家里使用;我当然从不向我的客户推荐它。)

对于那些可能有 Express 经验的人,我的问题是,您是否见过 SQL Express 的实例返回部分数据,而应用程序本身不是它的原因?具体来说,您从空闲模式返回时是否看到过这种行为?

(对于它的价值,我们倾向于认为应用程序无法连接并且仅显示一般错误消息,当它连接时会在成员 ID 上删除前导零。这似乎是最合理的答案 - 第三个问题可能是,你们同意这个评价吗?)

4

1 回答 1

1

我从未听说过或体验过 SQL Server Express 返回部分数据。它本质上与完整的 SQL Server 具有相同的代码库。

由于 SQL Server Express 处于空闲状态,应用程序更有可能遇到超时(默认为 30 秒)。应用程序可能会收到一个它没有预料到的超时并且不能很好地处理它。

此论坛主题讨论了问题和可能的解决方案:http: //social.msdn.microsoft.com/forums/en-US/sqlexpress/thread/a8fbf8d6-9949-47a5-a32b-50f8131f1127/

我怀疑您的连接字符串如下所示:

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 回答