我正在尝试帮助我们的网络工程师为我们的客户解决问题。该客户从一个“妈妈和流行”的供应商那里购买了一个销售点系统,并表示供应商推荐使用SQL Server Express 2005作为后端数据库,以避免客户产生额外的许可费用。 (请不要让我开始那个!)
我们没有编写应用程序,因为它是商业应用程序,我们没有可用的源代码。 (如果我们这样做,它不会对我们有所帮助;这个东西是在PowerBuilder中构建的,所以我们没有工具。)应用程序没有自己的日志记录,我们可以确定。我们所要做的只是SQL Server Express自己的日志记录。
在应用程序中,最终用户刷一张会员卡。有时(每天几次),滑动不会从数据库返回数据。屏幕上的消息将显示“未找到成员123”。 (成员编号实际上是六位数,“000123。”)之后立即重新扫描会正确返回成员数据。
我们已经消除了扫描仪本身作为问题的根源 - 它通常扫描完整的六位数字。扫描SQL Server Express的日志表明它正在从空闲状态恢复到正常状态,通常是在扫描点(但也是每天其他几个时间)。 (空闲模式为explained here。)
据我所知,以SQL Express的方式分配/释放RAM是一个非常耗时的过程,特别是如果我们一次谈论数百兆字节的话 - 似乎就是这种情况。
我们不确定的是我们是否收回部分数据,或者应用程序是否只是无法连接到数据库并显示一般错误消息。由于一切都是如此不透明,并且客户(由于显而易见的原因)不愿意付钱让我们坐在他们的设施中8个小时左右来实际看到它发生(可能有网络监控/数据包嗅探工具),我们有点像不知所措。
此时,我们的建议是客户端升级到SQL Server 2005 Workgroup Edition,带有5个CAL。但是,作为此问题的 解决方案并不完全符合我的要求,因为我有理由确定没有SQL Server会返回部分数据 - 如果可以的话连接,你无法连接。 (也就是说,我仍然推荐它,因为它是解决其他一些问题的 解决方案!)
我对Express没有多少经验。 (除了本地开发之外,我从不使用它,只有在家里;我绝对不会向客户推荐它。)
我对那些可能有使用Express经验的人的问题是,您是否曾见过SQL Express的实例返回部分数据,而应用程序本身并不是它的原因?具体来说,从空闲模式返回时,您是否看到过这种行为?
(对于它的价值,我们倾向于认为应用程序无法连接并且仅显示一般错误消息,在成员ID上删除前导零。这似乎是最合理的答案 - 第三个问题可能是,你们同意这个评估吗?)
答案 0 :(得分: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的实例 服务器形成主要实例 对用户而言是独一无二的 当没有任何东西时关闭 与它的联系。
这完全不同 将数据库附加到主数据库 实例,它一直在运行 时间,除非你手动关闭它 下。如果你的问题是关于 主要实例进入空闲状态 国家,然后你的问题不是 SQL Express是独一无二的,你应该这样做 在数据库中提出这个问题 引擎论坛。我相信所有版本 SQL Server具有空闲状态和 另一个论坛就是你能去的地方 了解如何影响这种行为。